原型链查找一次属性需要遍历多少对象:从 JavaScript 设计哲学到 V8 引擎优化
1995 年 5 月,Brendan Eich 在网景公司的十天内完成了 JavaScript 的设计与实现。他面临一个关键决策:采用传统的类继承模型,还是更灵活的原型继承模型?最终,他选择了后者——受 Self 语言启发的原型继承机制。这个决定深刻影响了此后三十年 JavaScript 的演进轨迹。 ...
1995 年 5 月,Brendan Eich 在网景公司的十天内完成了 JavaScript 的设计与实现。他面临一个关键决策:采用传统的类继承模型,还是更灵活的原型继承模型?最终,他选择了后者——受 Self 语言启发的原型继承机制。这个决定深刻影响了此后三十年 JavaScript 的演进轨迹。 ...
打开任务管理器,你会看到一长串Chrome进程。即使只开了三四个标签页,进程列表里可能已经有十几个"Google Chrome"条目,合计占用超过2GB内存。这个现象让无数用户困惑甚至愤怒:为什么浏览器需要这么多内存? ...
title: “火焰图背后的采样:浏览器性能分析的底层原理” date: “2026-03-06T07:53:58+08:00” description: “深入剖析浏览器DevTools Performance面板的底层实现原理。从V8引擎的CPU profiler采样机制、Chrome Tracing架构、Trace Event Format数据格式,到火焰图的可视化原理与safepoint bias问题,揭示性能分析工具如何从原始栈快照生成开发者日常使用的性能报告。基于V8官方文档、Chrome源码、Brendan Gregg的火焰图原论文以及Google的RAIL性能模型,系统梳理浏览器性能分析的完整技术链路。” draft: false categories: [“浏览器技术”, “性能优化”, “JavaScript引擎”] tags: [“性能分析”, “Chrome DevTools”, “V8引擎”, “火焰图”, “采样profiler”, “RAIL模型”, “JavaScript性能”] 2011年,性能工程师Brendan Gregg在Joyent公共云上调试一个MySQL性能问题时,面对的是一份长达591,622行的DTrace输出。即使只显示唯一栈跟踪,仍有27,053条记录。他把整个输出缩小到屏幕上时,看到的是一个毫无意义的灰色方块。 ...
你打开Chrome的任务管理器,发现一个简单的网页竟然占用了多个进程——浏览器进程、渲染进程、GPU进程、网络服务进程,甚至还有扩展进程。这不是Chrome"吃内存",而是现代浏览器架构的必然结果。 ...