Blog Cover

postMessage的性能真相:Web Workers通信为何总在关键时刻掉链子

2009年,Web Workers作为HTML5规范的一部分首次引入浏览器。十五年后,尽管多核CPU已成标配,但大多数Web应用依然在单线程的泥潭中挣扎。问题不在于开发者不知道Web Workers的存在——而在于当他们真正尝试使用时,发现数据传输的开销可能比计算本身更令人头疼。 ...

13 min · 6327 words
Blog Cover

为什么setTimeout不是最佳让出方案:从4ms最小延迟到优先级续行的技术突围

2023年9月,土耳其电商平台Trendyol的产品详情页INP指标高达963毫秒,处于"差"评级。用户点击商品后,页面近乎冻结。六个月后,这个数字降到了481毫秒——INP改善50%,点击率提升1%。转折点只改动了了几行代码:用scheduler.yield()替换了setTimeout。 ...

14 min · 6667 words

WebAssembly为何没能取代JavaScript:从沙箱隔离到DOM边界的性能博弈

2017年3月,WebAssembly在所有主流浏览器中落地。一时间,“JavaScript已死"的论调甚嚣尘上。毕竟,一个能让C++代码在浏览器中以接近原生速度运行的二进制格式,听起来像是动态语言的终结者。 ...

13 min · 6284 words

为何你的Vue响应式有时会失效:从Object.defineProperty的先天缺陷到Proxy的优雅突围

你修改了数据,视图却没有更新。这是Vue开发者最常遇到的困惑之一。 打开浏览器控制台,打印那个看似已经变化的对象,值确实变了——但界面纹丝不动。于是你开始怀疑人生:Vue不是自动响应式的吗?为什么还要我手动调用$forceUpdate? ...

10 min · 4552 words

闭包捕获:为什么同一个循环变量在不同语言中行为截然不同

1964年,Peter Landin在一篇题为《The Mechanical Evaluation of Expressions》的论文中首次提出了"闭包"(closure)的概念。他将闭包定义为一个包含λ表达式及其相关环境的"信息束"。六十年后,这个概念几乎出现在所有现代编程语言中——JavaScript、Python、Rust、Go、Swift、C++、Java——但每种语言的实现方式却大相径庭。 ...

9 min · 4494 words