摘要:延時函數的不準確性瀏覽器時鐘精度瀏覽器的時鐘精度就是瀏覽器更新時鐘的頻率。延時函數的不準確性在人類的眼中或許感覺不到和存在誤差,畢竟級的時間太短暫了。我們先設置了這樣一個延時處理的函數,函數被添加到隊列當中,預計之后執行。
延時函數的不準確性 瀏覽器時鐘精度
瀏覽器的時鐘精度就是瀏覽器更新時鐘的頻率。更新的越頻繁,那么時間也就越準確。
現在瀏覽器的最小精度為4ms,但并不意味著頻率時刻保持在4ms。仔細分析一下,“更新操作”對電腦來說是比較燒腦的,腦子稍微差點的cpu反應慢,精度就低。事實上,除了cpu硬件之外,操作系統(OSX和windows下不同)以及瀏覽器內核都會影響到瀏覽器的精度;其次,電腦本身的調節機制,尤其是筆記本。筆記本在使用電池供電的時候,精度就會被自動降低從而達到保護電源的作用。所以最小精度4ms只是當今瀏覽器的最高水平,顯示情況下是不會達到這一精度。
延時函數的不準確性在人類的眼中或許感覺不到setTimeout()和setInterval()存在誤差,畢竟ms級的時間太短暫了。但事實上確實存在著誤差。下面來講誤差從何而來。
setTimeout(fn,15ms);
我們先設置了這樣一個延時處理的函數,fn函數被添加到隊列當中,預計15ms之后執行。
過去的瀏覽器時間精度在10ms~15.6ms之間已經是極限了,那么我們就假設我們使用的瀏覽器的時間精度為10ms。
函數等待時間 |--------------| 15ms 瀏覽器刷新 |--------||----------| 20ms
當第一個10ms之后,瀏覽器刷新了時間,發現“我靠,跑了這么久,還沒有到點”,于是又發動第二次刷新。第二次刷新結束之后,20ms已經過去了,函數才到了執行期,并且比預期要多等了5ms。
我們知道,瀏覽器執行js和更新界面是共用一個線程的,當線程空閑時,它會從任務隊列中取任務來運行。所以當函數到了執行期時,它會被添加到隊列當中,但是不一定立即執行,如果隊列中還有其他任務,單線程的規則就會導致這個函數需要等待前面的任務執行完才可以執行。
基于這兩點原因,setTimeout()和setInteval()在微世界中,其實并不守時,這是無法控制且無奈的事情。
從上面可以看出,瀏覽器的精度越小,那么誤差也就越小。嗯 ~ ~ 排隊時間無法預算,只能求老天保佑了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86479.html
摘要:機器學習系統被用來識別圖像中的物體將語音轉為文本,根據用戶興趣自動匹配新聞消息或產品,挑選相關搜索結果。而深度學習的出現,讓這些問題的解決邁出了至關重要的步伐。這就是深度學習的重要優勢。 借助深度學習,多處理層組成的計算模型可通過多層抽象來學習數據表征( representations)。這些方法顯著推動了語音識別、視覺識別、目標檢測以及許多其他領域(比如,藥物發現以及基因組學)的技術發展。...
摘要:禁止內聯腳本執行規則較嚴格,目前發現使用。合理使用上報可以及時發現,利于盡快修復問題。因為事件會從目標元素一層層冒泡至對象。允許給一個事件注冊多個監聽。表示在捕獲階段觸發,表示在冒泡階段觸發。 關于【Step-By-Step】 Step-By-Step (點擊進入項目) 是我于 2019-05-20 開始的一個項目,每個工作日發布一道面試題。每個周末我會仔細閱讀大家的答案,整理最一份...
閱讀 837·2021-11-18 10:07
閱讀 2355·2021-10-14 09:42
閱讀 5315·2021-09-22 15:45
閱讀 585·2021-09-03 10:29
閱讀 3462·2021-08-31 14:28
閱讀 1873·2019-08-30 15:56
閱讀 3038·2019-08-30 15:54
閱讀 994·2019-08-29 11:32