Cishe ubudinga iwebhusayithi yakho ukuthi yenze okuthile ngesikhathi esithile, kodwa hhayi ngokushesha, kunalokho ngemva kwemizuzwana embalwa. Ukuze kufezwe lokhu, iJavaScript inikeza ithuluzi eliyisisekelo elibizwa ngokuthi i -`setTimeout` , elisebenza njengesibali sikhathi, lapho sifika ku-zero, siqala isenzo esithile. Ingenye yalezo misebenzi ebonakala ilula ekuqaleni, kodwa inezimo zayo kanye nemininingwane yobuchwepheshe okufanele ikwaziwe ukuze igweme ukwenza amaphutha ngenkathi ihlela.
Nakuba siyibona njalo kusiphequluli, kubalulekile ukucacisa ukuthi le ndlela ayiyona ingxenye yolimi oluyinhloko lweJavaScript uqobo, kodwa kunalokho inikezwa yi- runtime environment . Lokhu kusho ukuthi ngenkathi siyisebenzisa ku-Chrome noma ku-Firefox, siyithola naku-Node.js, yize kunomehluko othile kulokho uhlelo olukubuyiselayo. Ake sihlaziye ukuthi isebenza kanjani ngokuningiliziwe, kusukela ezisekelweni kuya kumaqhinga athuthukile okwenza izinhlelo zakho zokusebenza zisebenze kahle.
Iyini ngempela i-setTimeout futhi isetshenziswa kanjani?

Ngamagama alula, le ndlela yomhlaba wonke ikuvumela ukuthi uhlele ukwenziwa kwekhodi noma umsebenzi ngemva kwesikhathi esithile esibekiwe . Uma isikhathi sesiphelile futhi umsebenzi usuqalile ukusebenza, inqubo iyaphela; okungukuthi, ayiphindi ngokuzenzakalelayo. I-syntax eyisisekelo idinga ukuthi ucacise ukuthi ufuna ukwenzani nokuthi uzolinda isikhathi esingakanani, ehlala ivezwa ngama- millisecond (khumbula ukuthi i-1000 ms ilingana nomzuzwana owodwa).
Ukuze sikuqale, singadlulisa umsebenzi njengempikiswano yokuqala. Kodwa-ke, ngenxa yezizathu zomlando, kungenzeka futhi ukudlulisa uchungechunge lombhalo oluqukethe ikhodi, yize kulezi zinsuku lokhu kubhekwa njengomkhuba omubi, futhi kungcono kakhulu ukusebenzisa imisebenzi yomcibisholo noma izinkomba emisebenzini eqanjwe ngamagama ukugcina ikhodi ihlanzekile futhi iphephile.
Amapharamitha kanye nokuguquguquka ekusebenzeni

Uma silungiselela isibali sikhathi, ipharamitha yesibili yi- delay . Uma singacacisi lutho, inani elizenzakalelayo lingu-0. Kodwa nansi ingxenye ethakazelisayo: kuthiwani uma umsebenzi wethu udinga idatha yangaphandle? Kunezindlela ezimbili eziyinhloko zokusingatha lokhu. Eyokuqala iwumsebenzi ongaziwa ogoqa ucingo lokuqala, osivumela ukuthi sidlulise noma yiziphi izimpikiswano esizifunayo. Indlela yesibili, nenhle kakhulu, ukusebenzisa iqiniso lokuthi i-`setTimeout` isivumela ukuthi sengeze izimpikiswano ezengeziwe eziqala ngepharamitha yesithathu, ezifakwe ngqo kumsebenzi we-callback.
Ukuphathwa kokukhansela nge-clearTimeout

Ngezinye izikhathi impilo ishintsha ngokungalindelekile, futhi sidinga ukukhansela umsebenzi ohleliwe ongakaqali ukusebenza. Ukuze senze lokhu, sidinga ukwazi ukuthi i-`setTimeout` ibuyisela isihlonzi esiyingqayizivele (i-`timerId`). Kuziphequluli, le ID ivame ukuba yinombolo, kanti ku-Node.js iyinto eyinkimbinkimbi kakhulu. Uma sigcina leli nani ku-variable, singabiza umsebenzi we- `clearTimeout(timerId)` ukuze sikhansele ukusebenza futhi sivimbele ikhodi ekusebenzeni, ngaleyo ndlela silondoloze izinsiza zesistimu.
Ukuqhathanisa: i-setTimeout vs i-setInterval

Kuvamile kakhulu ukudida lezi zindlela ezimbili. Ngenkathi i-`setTimeout` isebenza kanye kuphela, i-`setInterval` iyenza ngokuphindaphindiwe njalo lapho isikhawu esichaziwe sidlula. Kodwa-ke, kukhona icebo elithuthukisiwe: elifakwe i-`setTimeout` . Lokhu kuhilela ukubiza i-`setTimeout` entsha khona kanye ekupheleni kokusebenza komsebenzi wamanje.
Le ndlela iguquguquka kakhulu kune-`setInterval` ngoba iqinisekisa ukubambezeleka kwangempela nokuqhubekayo phakathi kokuphela komsebenzi owodwa nokuqala kolandelayo. Nge-`setInterval`, uma umsebenzi uthatha isikhathi eside ukuwusebenzisa kunesikhathi sokuphumula, izingcingo zinganqwabelana noma zisebenze ngaphandle kokuma. Ngokuphambene nalokho, ukwakha izidleke kukuvumela ukuthi ulungise isikhathi ngokuguquguqukayo, okubalulekile uma, isibonelo, wenza izicelo kuseva ezingase zigcwele ngokweqile futhi udinga ukwandisa isikhathi sokulinda.
Icala elimangalisayo lokulibaziseka okungekho kanye nemikhawulo
Uma usebenzisa i-`setTimeout(func, 0)` , ungase ucabange ukuthi umsebenzi usebenza ngokushesha, kodwa akunjalo. Okwenzekayo ukuthi umhleli wesikhathi ubeka umsebenzi emgqeni ukuze usebenze ngokushesha okukhulu , kodwa njalo ngemva kokuba iskripthi samanje sesiqediwe ngokuphelele. Kuyindlela yokuthi, "Qedela lokho okwenzayo, futhi ngokushesha okukhulu, yenza lokhu."
Ngaphezu kwalokho, kubalulekile ukuqaphela ukuthi iziphequluli zibeka umkhawulo omncane wama-ms angu-4 kuma-timer afakwe ngaphakathi ngemuva kokuthi asebenze izikhathi ezinhlanu zilandelana. Lokhu kuyisithiyo esivela ezinguqulweni ezindala ukuvimbela isiphequluli ukuthi singashabalali. Kodwa-ke, ukunemba akulona iqiniso; uma i-CPU igcwele ngokweqile noma ithebhu isebenza ngemuva , isiphequluli singase sibambezele ukusebenza kuze kufike ku-300 ms noma ngisho nomzuzwana ogcwele ukuze kulondolozwe amandla ebhethri.
Ukusetshenziswa kwezinhlaka zesimanje
Le ndlela ihumusha kahle amathuluzi afana ne-React noma i-Angular. Ku- React , indlela ekahle ukugoqa i-`setTimeout` ngaphakathi kwe- `useEffect` hook ukulawula umjikelezo wokuphila wengxenye nokuqinisekisa ukuthi i-timer isuliwe ngomsebenzi wokubuyisa, ngaleyo ndlela kuvinjelwe ukuvuza kwememori. Ku -Angular , ingafakwa kalula kuma-constructor wengxenye noma kuma-lifecycle hook ukuze kuqalise izexwayiso noma kulayishwe idatha engavumelani.
Kulabo abafuna amazinga amakhulu obunzima, ama-timer angahlanganiswa ne -Promises kanye ne- async/await . Lokhu kuvumela ukudalwa kwezinhlelo zokulinda ezifundeka kalula nezingochwepheshe, kugwenywe "isihogo sokubuyisa ucingo" esidumile futhi kuvunyelwe ama-timer amaningi ukuthi aphathwe ngendlela ehlelekile nangendlela ehlelekile.
Ikhono lokuphatha isikhathi ku-JavaScript liyisisekelo ekudaleni izixhumi ezishintshashintshayo, kusukela kumawashi edijithali kanye nama-animation kuya ezinhlelweni zokuzama kabusha ukuxhumana. Ukuqonda kahle i-`setTimeout`, ukuyibeka ngaphezulu kwe-`clearTimeout`, nokuqonda ukuthi isebenzisana kanjani ne-event loop kukuvumela ukuthi uthuthukise ukusebenza kohlelo lokusebenza futhi uthuthukise ulwazi lomsebenzisi wokugcina, uhlale ukhumbula ukuthi ukunemba kwesikhathi kuncike kakhulu endaweni kanye nomthwalo wohlelo.