成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

坑啊!前端倒計時有誤差!讓公司損失了幾十萬!

開發 前端
前幾天聽說公司某個項目組,由于不對定時器進行誤差處理,間接導致損失了幾十萬。。還被領導公開批評了。因為定時器誤差,導致了公司幾個單子處理失敗。。。白白損失了 money。

前幾天聽說公司某個項目組,由于不對定時器進行誤差處理,間接導致損失了幾十萬。。還被領導公開批評了。因為定時器誤差,導致了公司幾個單子處理失敗。。。白白損失了 money。

"倒計時誤差"是前端開發中的經典問題,也是面試官考察候選人問題分析能力的高頻考點

一、誤差從何而來?

核心問題: 瀏覽器主線程的阻塞

前端倒計時通常基于setIntervalsetTimeout實現,而這兩個API存在以下問題:

  • 時間間隔不可靠:實際執行間隔 >= 設定值
  • 事件循環被阻塞:同步代碼、長任務、網絡請求等
  • 標簽頁休眠:瀏覽器后臺運行時計時器會被限流(最小延遲4ms甚至更長)
  • 系統休眠:電腦睡眠/鎖屏會導致計時完全暫停
// 典型的誤差累計示例
let count = 10
const timer = setInterval(() => {
  count--
  console.log(count)
}, 1000)
// 實際誤差會隨時間逐漸增大

二、五大解決方案

1. 動態校準法(基礎版)

function accurateTimer(fn, interval) {
let expected = Date.now() + interval
let timeout

const tick = () => {
    const drift = Date.now() - expected // 計算偏差
    fn()
    
    expected += interval // 更新下次預期時間
    timeout = setTimeout(tick, Math.max(0, interval - drift))
  }

  timeout = setTimeout(tick, interval)
return() => clearTimeout(timeout)
}
  • 優點: 簡單有效
  • 缺點: 無法解決系統休眠等長時間阻塞

2. Web Worker 計時

將計時器移至獨立線程,避免主線程阻塞

// main.js
const worker = new Worker('timer.worker.js')
worker.postMessage({ cmd: 'start', interval: 1000 })

// timer.worker.js
self.addEventListener('message', (e) => {
  setInterval(() => {
    self.postMessage('tick')
  }, e.data.interval)
})
  • 優點: 隔離主線程影響
  • 缺點: 仍受系統休眠影響

3. 服務器時間同步

通過接口獲取服務器時間進行校準

async function syncTime() {
  const start = Date.now()
  const res = await fetch('/api/time')
  const serverTime = await res.json()
  const latency = Date.now() - start
  
  return serverTime + Math.floor(latency/2) // 假設網絡延遲對稱
}

最佳實踐:

  • 首次加載時校準
  • 定時輪詢同步(例如每1分鐘)
  • 使用 WebSocket 保持時間同步

4. Performance API 高精度計時

使用performance.now()獲取亞毫秒級時間戳

const start = performance.now()

function check() {
  const elapsed = performance.now() - start
  if(elapsed >= 1000) {
    // do something
    start = performance.now() 
  }
  requestAnimationFrame(check)
}

特點:

  • 精度可達微秒級
  • 不受系統時間修改影響
  • 適合需要高精度計算的場景

5. 頁面可見性API優化

在標簽頁不可見時降低更新頻率

document.addEventListener('visibilitychange', () => {
  if(document.hidden) {
    clearInterval(timer)
    // 記錄剩余時間
  } else {
    // 重新校準后啟動
  }
})

三、生產環境最佳實踐

根據場景選擇組合方案:

場景

推薦方案

誤差控制

秒殺倒計時

服務器時間 + WebSocket + 動態校準

<100ms

問卷計時

Web Worker + 本地存儲恢復

<1s

動畫倒計時

RAF + 性能監測

16ms以內

四、終極解決方案架構

圖片

責任編輯:武曉燕 來源: 前端之神
相關推薦

2022-10-21 15:42:21

倒計時鴻蒙

2014-03-21 13:46:45

2014-08-18 14:30:27

Android倒計時

2011-04-11 09:17:28

Ubuntu倒計時

2015-03-23 17:58:04

驗證碼倒計時并行

2017-07-20 16:21:52

UICountDownTidelay

2011-04-11 09:50:56

Ubuntu 11.0

2014-02-18 10:36:33

2013-10-08 09:24:39

Windows 8.1Windows 8

2022-06-14 08:45:27

瀏覽器IEWindows

2020-10-28 17:54:49

成都信息安全

2013-04-09 10:01:18

微軟Windows XP

2013-10-10 09:23:15

Android 4.4Kitkat

2019-12-13 19:37:00

BashLinux命令

2015-01-21 16:07:57

Android源碼驗證碼倒計時

2012-12-28 13:50:00

2012-03-28 09:37:07

Ubuntu 12.0倒計時

2025-04-11 08:42:37

JavaScript倒計時前端

2019-11-22 11:54:04

數字時代數字中國數字產業
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.99精品 | 欧美嘿咻 | 毛片网站在线观看视频 | 日本一区二区三区视频在线 | 久久久久久国模大尺度人体 | 91免费版在线观看 | 婷婷午夜天 | 亚洲国产中文字幕 | 永久网站| 日韩精品视频网 | 午夜影院中文字幕 | 日本黄色大片免费 | 成人亚洲精品久久久久软件 | 国产中文字幕网 | 亚洲精品视频在线 | 91麻豆精品一区二区三区 | 一区二区三区四区在线视频 | 在线播放亚洲 | 亚洲 成人 av| 精品日韩一区二区 | 国产精品成人av | 色一级| 亚洲精品久久久久久久久久久 | www.亚洲视频 | 99精品国产一区二区三区 | 亚洲精品久久久一区二区三区 | 黑人性hd| 久久久精品网 | 夫妻午夜影院 | 国产男女视频网站 | 麻豆视频国产在线观看 | 日韩精品无码一区二区三区 | 欧美大片在线观看 | 久操伊人 | 久久久久久久av麻豆果冻 | 国产精品久久久久aaaa樱花 | www日日日 | 国产高清在线精品 | 国产 欧美 日韩 一区 | 国产一区视频在线 | 一区天堂|