JavaScript 中的 setTimeout 是否依赖系统时钟?

settimeout 的延迟计时基于浏览器内部的高精度单调时钟(如 performance.now() 所依赖的机制),而非操作系统本地时间;因此修改系统时间不会影响其倒计时行为,但页面休眠、cpu 节流或事件循环阻塞会导致实际触发延迟。 settimeout 的延迟计时基于浏览器内部的高精度单调时钟(如 performance.now() 所依赖的机制),而非操作系统本地时间;因此修改系统时间不会影响其倒计时行为,但页面休眠、cpu 节流或事件循环阻塞会导致实际触发延迟。在 JavaScript 开发中,一个常被误解的细节是:setTimeout(callback, delay) 的计时逻辑是否与操作系统的当前时间(即"墙钟时间",wall-clock time)绑定?答案是否定的------它不依赖系统时钟,而依赖浏览器内建的单调递增计时器(monotonic clock)。现代浏览器(Chrome、Firefox、Safari、Edge)均使用底层操作系统提供的高精度单调时钟(例如 clock_gettime(CLOCK_MONOTONIC) 在 Linux/macOS,QueryPerformanceCounter 在 Windows)来驱动定时器系统。这类时钟具有两个关键特性:? 不受系统时间调整影响:即使用户手动修改系统日期/时间(如向前拨快 1 小时或向后拨慢 30 分钟),setTimeout 的剩余延迟毫秒数不会跳变或重置;? 不倒退、不跳跃:它只随真实物理时间(或 CPU 时间)单向增长,避免了 NTP 校时、夏令时切换等引发的时间回跳问题。实际行为验证示例以下代码可帮助直观理解其行为(建议在控制台中运行并配合系统时间修改测试):console.log('Start at:', new Date().toISOString());const start = performance.now();setTimeout(() => { const elapsed = performance.now() - start; console.log(`Timeout fired after ~${Math.round(elapsed)}ms`); console.log('Current wall time:', new Date().toISOString());}, 5000);? 若你在 setTimeout 启动后立即将系统时间调快 1 小时:→ 控制台仍会在约 5000ms 后输出日志,且 performance.now() 差值接近 5000;→ new Date() 显示的是修改后的新时间,但不影响倒计时进度。?? 但需注意:以下场景会显著干扰 setTimeout 的准时性: 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
529宝宝起名网4 分钟前
用 Python 实现基于字源特征的名字文化评分算法:从六书部首到文化寓意的多维度评分模型
python
努力学习的代码小白5 分钟前
mem0源码学习03
python
严同学正在努力12 分钟前
认识 SQL Server 的 T-SQL 语法
数据库·人工智能·ai·oracle·dba
zzj_26261013 分钟前
Python数组定义及操作
python
溪语流沙14 分钟前
【Python项目实战】部署上线:把博客发布到云服务器
服务器·开发语言·python
EatFan19 分钟前
我为什么把患者与病例从 1:1 改成 1:N?一次真实数据库模型重构记录
数据库·后端·重构·健康医疗·全栈
智码看视界19 分钟前
神经网络基础——从感知机到多层网络的数学原理
python·深度学习·神经网络·感知机·激活函数·前向传播·权重初始化
oceanstonetree21 分钟前
zgy地震数据体的显示
python·zgy
“AI国潮设计-小江”38 分钟前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁美食猫IP & 创意甜品设计(附ComfyUI工作流与商用授权思路)
开发语言·人工智能·python·prompt·aigc