网络协议栈:一个数据包的内核之旅

当一个网络数据包抵达服务器的网卡时,它需要在微秒级的时间内穿越数十个内核函数、跨越多个协议层、经过复杂的队列管理,最终才能被应用程序读取。这个过程的效率直接决定了服务器的网络吞吐量和延迟。理解这条路径,是解决网络性能问题、优化系统配置、甚至编写高性能网络程序的基础。 ...

20 min · 9912 words

大模型推理为什么第一个 Token 总是很慢:从 Prefill 到 Decode 的完整技术解析

当你向一个大语言模型发送请求时,可能会注意到一个有趣的现象:第一个字蹦出来总是慢半拍,但随后的字却如流水般涌出。这种"先慢后快"的节奏并非偶然,而是大模型推理机制的根本特性。 ...

10 min · 5000 words
Virtual Scrolling Architecture Diagram

前端虚拟滚动:从DOM瓶颈到视口计算的技术突围

一个包含20,000行数据的简单列表,能让浏览器内存占用飙升超过700MB,DOM检查器甚至无法正常工作。这不是危言耸听,而是前端开发者在处理大数据量列表时真实遇到的困境。 ...

14 min · 6746 words

HTTP/2流优先级为何成为性能优化的隐形战场:从依赖树到服务器缓冲区的完整技术解析

2019年,一个电商平台发现他们的页面在Chrome下加载需要8秒,而换用Firefox只需要4秒——同样网络环境、同样服务器、同样代码。性能团队排查了DNS、TLS握手、服务器响应时间,所有指标都正常。最终发现问题出在一个被大多数人忽略的地方:HTTP/2流优先级。浏览器向服务器发送了优先级信号,但服务器没有正确处理。这不是个案。Andy Davies的测试显示,全球主流CDN中只有不到30%正确实现了HTTP/2优先级。Google Cloud CDN、Amazon CloudFront、Azure CDN——这些巨头的服务都曾在这个问题上栽过跟头。 ...

12 min · 5698 words

CSS选择器为何从右到左匹配从浏览器引擎到性能优化的完整技术解析

一道经典的前端面试题是这样问的:CSS选择器是从左到右匹配,还是从右到左匹配?标准答案是"从右到左"。但如果追问一句"为什么",大多数面试者只能给出模糊的解释——“因为这样更快”。至于快多少、快在什么地方、有没有例外,则往往语焉不详。 ...

11 min · 5223 words

为什么Tree Shaking总是不生效:从ES Module静态分析到sideEffects标记的完整解析

你可能在某个午后兴冲冲地将项目中的import _ from 'lodash'改成了import { debounce } from 'lodash-es',期待着构建产物大幅瘦身。然而,当你打开webpack-bundle-analyzer,却发现那个庞大的lodash依然盘踞在bundle中,仿佛对你的优化努力嗤之以鼻。 ...

12 min · 5908 words
Blog Cover

原型链查找一次属性需要遍历多少对象:从 JavaScript 设计哲学到 V8 引擎优化

1995 年 5 月,Brendan Eich 在网景公司的十天内完成了 JavaScript 的设计与实现。他面临一个关键决策:采用传统的类继承模型,还是更灵活的原型继承模型?最终,他选择了后者——受 Self 语言启发的原型继承机制。这个决定深刻影响了此后三十年 JavaScript 的演进轨迹。 ...

9 min · 4299 words