Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
年來,使用setInterval條件輪詢確實(shí)很有用。無論是在客戶端還是服務(wù)器端進(jìn)行輪詢,對(duì)特定條件做出反應(yīng)都有助于改善用戶體驗(yàn)。我最近需要完成的一項(xiàng)任務(wù)要求我setInterval立即執(zhí)行然后繼續(xù)執(zhí)行。
常規(guī)和最佳方法是在調(diào)用初始`setInterval之前,我們就執(zhí)行一下自定義的函數(shù)
myFunction();
setInterval ( myFunction , 1000 ) ;
如果你真的想隔離對(duì) 的函數(shù)調(diào)用setInterval,你可以使用這個(gè)返回自身的自執(zhí)行函數(shù)的技巧:
setInterval ( function myFunction ( ) {
return myFunction ;
} ( ) , 3000 )
這種模式的缺點(diǎn)是它會(huì)導(dǎo)致維護(hù)問題,下一個(gè)開發(fā)人員不了解發(fā)生了什么。
維護(hù)是成為一名優(yōu)秀工程師的重要組成部分,因此至少應(yīng)該需要注釋或輔助函數(shù)形式的文檔。如果你真的想要一個(gè)自動(dòng)執(zhí)行的setInterval,你有它!
JS有兩種定時(shí)器分別是setTimeout()和setInterval(),這兩個(gè)區(qū)別就是setTimeout()是一次性的定時(shí)器,而setInterval()是循環(huán)的定時(shí)器。
js中的定時(shí)器精度并不準(zhǔn)確,這是因?yàn)镴S中的定時(shí)器僅僅是將執(zhí)行的語句加入隊(duì)列,這樣在定時(shí)器之前的語句若是在循環(huán)或者有延遲的情況下,定時(shí)器也會(huì)相應(yīng)的延后。
上面提到了js中的定時(shí)器精度不準(zhǔn)確的原因,同樣的這也會(huì)導(dǎo)致使用setTimeInterVal語句會(huì)卡頓,其不管語句是否執(zhí)行完成,都會(huì)在時(shí)間點(diǎn)執(zhí)行語句。
實(shí)際上大多數(shù)的場(chǎng)景中,只是想要定時(shí)之后執(zhí)行完語句再等待定時(shí)的觸發(fā),完全可以使用setTimeOut搭配clearTimeout這樣在使用定時(shí)器之后進(jìn)行消除再加一個(gè)循環(huán),總和性能比單純的setTimeInterVal要好上不少。
由于歷史原因,兩種定時(shí)器都支持eval的效果,可以執(zhí)行字符串形式的語句。
如果將定時(shí)為0秒后執(zhí)行,語句并不會(huì)立刻執(zhí)行,而是將其放在隊(duì)列最后,等待所有語句執(zhí)行完成之后,再立刻執(zhí)行。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。