中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

北京專業(yè)網(wǎng)站制作大概費用小程序seo

北京專業(yè)網(wǎng)站制作大概費用,小程序seo,搜索網(wǎng)站怎么做,湖南疫情最新新增為什么會出現(xiàn)定時器不準確呢? 這個其實就得提到j(luò)s執(zhí)行機制了,叫做事件循環(huán)Eventloop 循環(huán)機制中,異步事件 setInterval 到時后會把回調(diào)函數(shù)放入消息隊列中Event Queue,主線程的宏任務(wù)執(zhí)行完畢后依次執(zhí)行消息隊列的微任務(wù)&#xff…

為什么會出現(xiàn)定時器不準確呢?

????????這個其實就得提到j(luò)s執(zhí)行機制了,叫做事件循環(huán)Eventloop 循環(huán)機制中,異步事件 setInterval 到時后會把回調(diào)函數(shù)放入消息隊列中Event Queue,主線程的宏任務(wù)執(zhí)行完畢后依次執(zhí)行消息隊列的微任務(wù),等微任務(wù)執(zhí)行完了在循環(huán)回來執(zhí)行宏任務(wù)。并且由于消息隊列中存在大量任務(wù),其他任務(wù)執(zhí)行時間就會造成定時器回調(diào)函數(shù)的延遲,如果不處理則會一直疊加延遲。

以下是ChatGPT給出的的一些解決JS定時器不準確問題的方法:

  1. 使用精度更高的定時器:使用requestAnimationFrame()代替setInterval或setTimeout,因為它以常規(guī)更新率刷新屏幕,并保證在用戶可見的時間內(nèi)繪制動畫。requestAnimationFrame()是基于瀏覽器屏幕的重繪機制觸發(fā)的,可以有效避免誤差的累積。

  2. 縮短定時間隔時間:如果一個定時器在瀏覽器里表現(xiàn)得很不準確,可能需要縮小時間間隔,比如說從100毫秒改成10毫秒。

  3. 使用標準時間: 可以使用標準時間對象提供的函數(shù)(如getTime、getSeconds等)獲取當前時間,而不是使用JavaScript自帶的全局變量Date來保證計時器的準確性。

  4. 避免多個計時器同時存在:如果多個計時器同時存在,可能會導致其他定時器的執(zhí)行被延遲或丟失調(diào)用。只使用唯一一個計時器進行安排和管理。

????????總之,實際場景中,可結(jié)合具體應用場景選擇相符的解決方案。

????????我們開發(fā)過程中也可以通過計算時差可以有效的解決。


? ? ? ? 接下來是我自己整理的方法


?通過動態(tài)計算時差解決setInterval定時器不準確的問題

????????根據(jù)定時器最開始時間計算當前時間(回調(diào)函數(shù)執(zhí)行時間)與開始時間的誤差,用期望時差減誤差作為下一次任務(wù)的時間間隔

  1. 在開始執(zhí)行計時器之前,記錄本地時間。

  2. 在計時器函數(shù)中,獲取當前本地時間,并計算與記錄的本地時間之間的時差(單位為毫秒)。

  3. 在計算得到的時差的基礎(chǔ)上,添加上期望的時間間隔,便是下一次計時器應該觸發(fā)的時間。

  4. 在定時器回調(diào)函數(shù)中,采用setTimeout代替setInterval,并傳入計算得到的時間差作為等待時間。

let localTime = new Date().getTime(); //記錄本地時間
function timer() {const now = new Date().getTime(); // 獲取當前本地時間const timeGap = now - localTime; // 計算時間差// 下一次計時器應該觸發(fā)的時間const nextTickTime = 1000 - (timeGap % 1000);setTimeout(() => {// 在此處執(zhí)行計時器的操作console.log('tick');timer(); // 遞歸調(diào)用,實現(xiàn)循環(huán)}, nextTickTime);
}timer(); // 啟動計時器

? ? ??這種方法能夠避免JavaScript在處理大量任務(wù)時的卡頓和延遲,保證定時器的調(diào)用的準確性。

使用 web Worker解決setInterval定時器不準確的問題

? ? ? ? ?原理:將定時函數(shù)作為獨立線程執(zhí)行

????????Web Worker 是運行在后臺線程中的 JavaScript 腳本,可以與主線程并行工作,因此不會受主線程的影響。我們可以使用 Web Worker 來創(chuàng)建一個新的線程來處理定時器。

以下是一個簡單的示例:

//在 main.js 中創(chuàng)建 Worker
const worker = new Worker("worker.js");//在 worker.js 中處理定時器
let intervalId = null;
worker.onmessage = function(event) {console.log("Received message from main script");if (event.data === "start") {intervalId = setInterval(function() {console.log("Worker: Interval fired");postMessage("tick");}, 1000);} else if (event.data === "stop") {clearInterval(intervalId);intervalId = null;}
};

????????在主線程中,我們首先創(chuàng)建一個新的 Web Worker worker.js,然后通過調(diào)用 onmessage 方法來監(jiān)聽來自 Worker 的消息。當收到 start 消息時,我們在 Worker 中啟動一個定時器。當收到 stop 消息時,我們清除定時器。

以下是 worker.js 文件的內(nèi)容:

//worker.js
onmessage = function(event) {console.log("Received message from main script");if (event.data === "start") {console.log("Worker: Starting interval");intervalId = setInterval(function() {console.log("Worker: Interval fired");postMessage("tick");}, 1000);} else if (event.data === "stop") {console.log("Worker: Stopping interval");clearInterval(intervalId);intervalId = null;}
};

????????在 Worker 中,我們定義了一個 onmessage 方法來監(jiān)聽來自主線程的消息。當收到 start 消息時,我們在 Worker 中啟動一個定時器;當收到 stop 消息時,我們清除定時器。通過調(diào)用 postMessage 方法來將消息發(fā)送回主線程。

????????現(xiàn)在,可以通過向 Worker 發(fā)送 startstop 消息來控制定時器的啟動和停止。由于該定時器是在 Worker 線程中運行的,因此它不會受到主線程的影響,從而保證了定時器的準確性。

http://www.risenshineclean.com/news/11125.html

相關(guān)文章:

  • 提供網(wǎng)站建設(shè)報客源軟件哪個最好
  • 做基礎(chǔ)網(wǎng)站主機要關(guān)鍵詞優(yōu)化方法
  • 珠海網(wǎng)站建設(shè)哪家專業(yè)北京網(wǎng)絡(luò)推廣有哪些公司
  • 阿里云快速備份網(wǎng)站網(wǎng)絡(luò)營銷推廣方案前言
  • 公安部網(wǎng)站備案 流程周口搜索引擎優(yōu)化
  • 微信小程序多少錢做一個博客程序seo
  • 軟件工程和網(wǎng)絡(luò)工程哪個好合肥網(wǎng)站優(yōu)化seo
  • 外貿(mào)網(wǎng)站建設(shè)模板下載廣西壯族自治區(qū)免費百度推廣
  • 網(wǎng)站開發(fā)崗位實際情況岳陽seo
  • 網(wǎng)站開發(fā)年終總結(jié)魔方優(yōu)化大師官網(wǎng)
  • 如何做網(wǎng)站實現(xiàn)收入穩(wěn)定免費seo關(guān)鍵詞優(yōu)化方案
  • 施工企業(yè)安全生產(chǎn)管理規(guī)范最新版seo站長網(wǎng)怎么下載
  • 做3d人物模型素材下載網(wǎng)站五種營銷工具
  • 順的網(wǎng)站建設(shè)咨詢免費國外ddos網(wǎng)站
  • 巴中哪里做網(wǎng)站網(wǎng)站推廣名詞解釋
  • 哪些網(wǎng)站可以做淘寶店招競價代運營
  • 金融軟件網(wǎng)站建設(shè)公司百度一下百度網(wǎng)頁官
  • 制作企業(yè)網(wǎng)站需要多少錢b2b平臺是什么意思啊
  • 國內(nèi)好用的五款開源建站系統(tǒng)企業(yè)培訓體系搭建
  • 同一個服務(wù)器的網(wǎng)站做有鏈事件營銷
  • 重慶網(wǎng)站建設(shè)設(shè)計俄羅斯搜索引擎瀏覽器官網(wǎng)入口
  • 視頻網(wǎng)站做cpa搜索關(guān)鍵詞的工具
  • php網(wǎng)站用到的知識山東最新消息今天
  • 如何在工商局網(wǎng)站上做網(wǎng)登湖南專業(yè)關(guān)鍵詞優(yōu)化服務(wù)水平
  • 網(wǎng)站如何制作學校的做手機如何建網(wǎng)站
  • 杭州公司展廳設(shè)計公司網(wǎng)站seo優(yōu)化分析
  • 網(wǎng)站充值接口免費推廣軟件
  • 網(wǎng)站建設(shè)需要域名服務(wù)器網(wǎng)絡(luò)營銷手段有哪些方式
  • 網(wǎng)站手機app開發(fā)seo引擎搜索入口
  • 如何做盆栽蔬菜網(wǎng)站網(wǎng)站首頁快速收錄