网易首页 > 网易号 > 正文 申请入驻

Chrome把1毫秒延迟藏了10年,开发者今天才发现

0
分享至

2014年,一个工程师在Chromium代码库里埋了一行注释:「1ms是最小延迟,但我们会把它变成4ms」。这条注释在2024年才被大规模讨论——期间整整10年,无数前端开发者对着setTimeout(0)百思不得其解:为什么我的代码总要等4毫秒才执行?

这不是bug,是浏览器和开发者之间的一场默契博弈。理解它,需要从JavaScript的「单线程」本质说起。

单线程的「厨房困境」

JavaScript的设计像一家只有一个厨师的餐厅。厨师(主线程)一次只能炒一道菜,但客人(用户操作)随时会点单。如果厨师炒到一半去处理新订单,锅里的菜就糊了。

事件循环(Event Loop)就是餐厅的点餐系统。它不做菜,只负责两件事:看锅里有没有正在炒的菜(检查调用栈),以及按顺序把新订单递给厨师(把回调函数推入执行队列)。

这个模型简单到近乎粗暴,却支撑了现代Web的复杂度。问题在于:当厨师真的忙不过来时,订单该等多久?

4毫秒的来历:一场被低估的功耗战争

2009年,Mozilla工程师Robert O'Callahan在Bugzilla提交了一份报告:「高频setTimeout正在吃掉笔记本电池」。他的测试显示,当页面用1毫秒间隔轮询时,CPU无法进入低功耗状态,续航直接腰斩。

浏览器厂商的解决方案出奇一致:给定时器加「冷却期」。HTML5规范最终定稿:嵌套层级超过5层的setTimeout,最小延迟强制4毫秒。Chrome、Safari、Firefox全部照做,只是没人大声宣传。

「开发者以为自己在用高精度定时器,实际上浏览器在帮你省电。」前Chrome工程师Alex Russell在2023年的一次播客中回忆,「我们讨论过要不要在控制台警告,但担心引发恐慌性重构。」

这个妥协制造了巨大的认知断层。2019年,React核心团队发现Scheduler组件的批量更新出现不可预测的延迟,追查三周才发现是setTimeout的4毫秒陷阱。Dan Abramov在GitHub issue里写道:「我们文档里写的'16ms一帧',底层其实可能是20ms。」

Promise和async/await:新语法,旧循环

ES2015引入Promise时,很多人以为JavaScript「摆脱」了回调地狱。真相更微妙:Promise的.then()仍然走事件循环,只是队列优先级不同。

浏览器内部至少有两条队列:宏任务(macrotask)和微任务(microtask)。setTimeout进宏任务队列,Promise回调进微任务队列。事件循环的每一轮,先清空所有微任务,再执行一个宏任务。

这个设计让async/await看起来像是「同步代码」,实际仍在切分执行权。看这段代码:

async function demo() { console.log('A'); await Promise.resolve(); console.log('B'); } demo(); console.log('C'); // 输出:A → C → B

await那一行把函数切成两半,后半段被塞进微任务队列。主线程继续跑C,等本轮同步代码走完,才回来执行B。这种「暂停-恢复」机制没有创建新线程,只是事件循环的调度魔术。

2022年,V8团队工程师Leszek Swirski在一篇技术博客中透露:实现async/await只用了不到200行C++代码,核心逻辑完全复用现有的Promise基础设施。「语法糖的成本接近于零,但开发者的心理模型彻底变了。」

从setTimeout到requestIdleCallback:浏览器在争夺什么

4毫秒延迟的争议在2019年达到顶点。Google提出Idle Detection API,想给开发者「真正的」空闲回调——不是定个时间猜浏览器忙不忙,而是浏览器主动告诉你「我现在有空」。

这个API引发了隐私争议。Mozilla反对票的理由很直接:「网站可以精确判断用户何时离开键盘」。W3C技术架构组花了18个月权衡,最终版本阉割了高精度时间戳,延迟精度降到秒级。

更具讽刺意味的是,requestIdleCallback这个「官方解决方案」至今未被Safari实现。2023年状态显示:Chrome和Edge支持,Firefox标记为「实验性」,Safari零进展。前端开发者仍在用setTimeout(0)打补丁,只是现在更多人知道它会变成4毫秒。

「浏览器厂商在性能、隐私、标准统一之间走钢丝,」W3C特邀专家Surma在2024年JSConf的演讲中说,「而开发者在下面捡碎片,拼凑出能用的工具链。」

Node.js的叛逃与回归

事件循环不是浏览器的专利。Node.js拿它管理文件I/O和网络请求,但实现细节大相径庭。浏览器有渲染管线要照顾,Node只关心效率,所以它的setTimeout精确到1毫秒——没有4毫秒限制。

这个差异曾让无数全栈开发者踩坑。2017年,npm包setimmediate的下载量突然暴涨,因为开发者发现它在浏览器和Node表现不一致:浏览器回退到setTimeout(0),Node用更高效的原生实现。

Node 11在2018年做出一个「破坏性」改动:把定时器精度从1毫秒降到和浏览器对齐的4毫秒。社区哗然,issue区被「这是breaking change」刷屏。核心维护者James Snell的回应很干脆:「跨平台一致性比微优化更重要。」

三个月后,这个决定被部分回滚。Node 11.2恢复1毫秒精度,但新增--force-node-api-uncached选项强制4毫秒行为,供测试使用。Snell在PR评论里承认:「我们低估了生态系统的碎片化程度。」

这场拉锯战暴露了JavaScript的深层张力:它既是「写一次跑到处」的跨平台语言,又被每个宿主环境的具体约束重塑。事件循环的抽象很美,落地时全是妥协。

2024年5月,V8团队提交了一项新实验:在桌面端恢复1毫秒setTimeout精度,前提是页面处于活跃标签且用户近期有交互。条件苛刻到几乎无法预测,但方向明确——浏览器正在重新评估那场10年前的功耗战争,毕竟现在的芯片制程和2009年已是两个世界。

如果你的代码里还有setTimeout(0),你会为了那3毫秒去检测浏览器版本吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
难以置信!张雪峰离世后,峰学蔚来员工从10点变为七八点主动到岗

难以置信!张雪峰离世后,峰学蔚来员工从10点变为七八点主动到岗

火山詩话
2026-04-11 19:37:49
快讯!万斯突然宣布了!

快讯!万斯突然宣布了!

达文西看世界
2026-04-12 13:20:48
从伊朗脱身后,特朗普要干的第一件事,就是拿“自己人”开刀

从伊朗脱身后,特朗普要干的第一件事,就是拿“自己人”开刀

空天力量
2026-04-12 17:19:20
“你怎么在这?”女子商场惊魂:闺蜜上趟洗手间,竟跟着陌生人走

“你怎么在这?”女子商场惊魂:闺蜜上趟洗手间,竟跟着陌生人走

一丝不苟的法律人
2026-04-11 19:27:49
这5个行业,已经发不出工资了!真的很严重了

这5个行业,已经发不出工资了!真的很严重了

细说职场
2026-04-12 14:35:35
连谈21小时,美伊不欢而散,特朗普:特朗普:中国不许送武器,否则有麻烦

连谈21小时,美伊不欢而散,特朗普:特朗普:中国不许送武器,否则有麻烦

闻识
2026-04-12 13:53:31
突发:王石被抓!!!

突发:王石被抓!!!

大嘴説
2026-04-12 18:30:38
百万豪车陪葬后续:死者身份披露,官方介入处置,目击者透露更多

百万豪车陪葬后续:死者身份披露,官方介入处置,目击者透露更多

离离言几许
2026-04-11 16:34:13
过气艳星艳照风波后,二婚嫁山东农村小伙,43岁已当妈

过气艳星艳照风波后,二婚嫁山东农村小伙,43岁已当妈

君笙的拂兮
2026-04-11 19:38:43
美国记者直言:以色列是种族灭绝、满嘴谎言的法西斯国家

美国记者直言:以色列是种族灭绝、满嘴谎言的法西斯国家

不掉线电波
2026-04-12 08:37:37
赌王女儿何超蕸病逝,常年和乳癌斗争,120多亿遗产由姐弟继承

赌王女儿何超蕸病逝,常年和乳癌斗争,120多亿遗产由姐弟继承

素素娱乐
2026-04-12 16:24:23
网盘禁止分享美剧?天塌了

网盘禁止分享美剧?天塌了

来看美剧
2026-04-12 16:08:02
郑丽文现身小米汽车工厂参访,分享体验:只有一个字,赞!雷军亲自接见,并赠送郑丽文一部小米手机

郑丽文现身小米汽车工厂参访,分享体验:只有一个字,赞!雷军亲自接见,并赠送郑丽文一部小米手机

大风新闻
2026-04-12 19:45:02
女子独自带5岁女儿和未满1岁儿子到餐厅用餐,女儿不幸从包间窗户坠亡……法院判了:餐厅赔近74万元,母亲担责三成

女子独自带5岁女儿和未满1岁儿子到餐厅用餐,女儿不幸从包间窗户坠亡……法院判了:餐厅赔近74万元,母亲担责三成

极目新闻
2026-04-12 18:00:56
伊朗官员说美国比伊朗更需要协议达成

伊朗官员说美国比伊朗更需要协议达成

界面新闻
2026-04-12 19:33:56
西班牙小镇炸毁内塔尼亚胡塑像 之前还炸过特朗普的

西班牙小镇炸毁内塔尼亚胡塑像 之前还炸过特朗普的

新京报
2026-04-12 19:05:16
一张折线图揭露人类寿命暴增的真正秘密!是儿童死亡率从50%跌到4.3%

一张折线图揭露人类寿命暴增的真正秘密!是儿童死亡率从50%跌到4.3%

三言四拍
2026-04-12 10:37:11
穿衣不自由!女解说被批裙子太短 全身涂黑上镜回击

穿衣不自由!女解说被批裙子太短 全身涂黑上镜回击

游民星空
2026-04-12 12:56:12
新娘确实漂亮,但我更喜欢戴眼镜那个。

新娘确实漂亮,但我更喜欢戴眼镜那个。

动物奇奇怪怪
2026-04-12 12:44:36
不打了!大规模轮休!俯冲西部第4挑选火箭

不打了!大规模轮休!俯冲西部第4挑选火箭

篮球实战宝典
2026-04-12 19:29:05
2026-04-12 20:52:49
我是一个养虾人
我是一个养虾人
有态度网友ytd
1222文章数 10关注度
往期回顾 全部

科技要闻

理想称遭恶意拉踩,东风日产:尊重同行

头条要闻

上海阿婆被"干儿子"分80次转走95万气瘫 毕生积蓄没了

头条要闻

上海阿婆被"干儿子"分80次转走95万气瘫 毕生积蓄没了

体育要闻

创造历史!五大联赛首位女性主教练诞生

娱乐要闻

赌王女儿何超蕸病逝,常年和乳癌斗争

财经要闻

美伊谈判破裂的三大症结

汽车要闻

焕新极氪007/007GT上市 限时19.39万起

态度原创

旅游
亲子
数码
本地
公开课

旅游要闻

秀美风光汇成“海”,北京密云发布城市新名片

亲子要闻

有些孩子就爱打着和你玩的名义占你便宜

数码要闻

破壁机哪个牌子好?安全无毒材质是重点,揭秘TOP10家用哪种好

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版