如何通过d8深入分析对象
323 字
2 分钟
如何通过d8深入分析对象
为了更深入理解JavaScript中的对象,需要安装d8(V8调试工具)
创建文件test.js
obj = { "second":2, 2: "b", 1: "a", "first": 1 };%DebugPrint(obj);执行命令 d8 --allow-natives-syntax test.js
—allow-natives-syntax 的含义是允许调用V8内部调试方法。通过%DebugPrint() 这种方式我们可以看到相对于控制台memory内存快照中更深度的信息。
DebugPrint:0x3c9d0010b481: [JS_OBJECT_TYPE] - map: 0x3c9d0025a4dd <Map[20](HOLEY_ELEMENTS)> [FastProperties] `隐藏类` - prototype: 0x3c9d00244a09 <Object map = 0x3c9d002440c5> - elements: 0x3c9d0010b4b1 <FixedArray[20]> [HOLEY_ELEMENTS] - properties: 0x3c9d000022a9 <FixedArray[0]> - All own properties (excluding elements): { `命名属性` 0x3c9d00007591: [String] in ReadOnlySpace: #second: 2 (const data field 0), location: in-object 0x3c9d00005755: [String] in ReadOnlySpace: #first: 1 (const data field 1), location: in-object } - elements: 0x3c9d0010b4b1 <FixedArray[20]> { `可索引属性` 0: 0x3c9d000022fd <the_hole> 1: 0x3c9d00004a4d <String[1]: #a> 2: 0x3c9d00004a5d <String[1]: #b> 3-19: 0x3c9d000022fd <the_hole> }0x3c9d0025a4dd: [Map] in OldSpace `垃圾回收相关-老生代` - type: JS_OBJECT_TYPE - instance size: 20 - inobject properties: 2 `对象内属性数量` - elements kind: HOLEY_ELEMENTS - enum length: invalid - back pointer: 0x3c9d0025a495 <Map[20](HOLEY_ELEMENTS)> `transition tree上指针` - instance descriptors (own) #2: 0x3c9d0010b509 <DescriptorArray[2]> `描述符数组` - prototype: 0x3c9d00244a09 <Object map = 0x3c9d002440c5> `原型` - constructor: 0x3c9d002445cd <JSFunction Object (sfi = 0x3c9d00217d3d)> `构造者` - dependent code: 0x3c9d000022b9 <Other `heap` object (WEAK_ARRAY_LIST_TYPE)> `存放位置`可以看到通过d8我们可以看到隐藏类、命名属性、可索引属性、垃圾回收相关内容。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
V8如何执行JavaScript代码的
前端基础V8 是什么,以及它如何把 JavaScript 编译成机器码并执行。
2
JavaScript的快慢属性
前端基础V8 中对象由隐藏类、Properties 和 Elements 构成,快属性和慢属性分别是怎么存储的。
3
V8-隐藏类和内联缓存IC
前端基础对于以上的代码,底层是如何实现的呢?
4
重绘、重排、合成
前端基础三个和渲染流水线相关的概念——“重排”“重绘”和“合成”。理解了这三个概念对于你后续 Web 的性能优化会有很大帮助。
5
浏览器从输入 URL 到页面展示发生了什么
前端基础从浏览器输入 URL 到页面展示到底经历了什么?本文通过两个阶段来解释,第一个阶段是导航阶段,也就是在页面真正开始渲染之前浏览器所做的工作,第二个阶段是渲染阶段…
随机文章随机推荐














