Tags
javascriptv8
Created
May 11, 2018 11:49 AM
https://stackoverflow.com/questions/43594092/slow-delete-of-object-properties-in-js-in-v8/44008788
https://v8.js.cn/blog/fast-properties/
隐藏类(HiddenClass)占内存,但加快访问速度
in-object properties 是访问最快了,初始化时就预先确定了
稀疏数组的“空隙”会被标记以提高访问速度,但增加了内存占用
- Dictionary(Slow) Mode:字典模式也称为哈希表模式,V8 使用哈希表来存储对象的属性。
- Stable(Fast) Mode:使用类似数组(C Struct)结构来存储对象的属性并使用 Offset 进行访问。
node --allow-natives-syntax :
> const a = []
> a[100000] = [1]
> const b = [1]
> %DebugPrint(a)
...
- elements: 0x181d1b5513b9 <NumberDictionary[16]>...
> %DebugPrint(b)
...
- elements: 0x181df7e91f31 <FixedArray[1]>新创建的小对象为快速模式(Fast Mode),当执行如下操作时会退化成为字典模式(Dictionary Mode):
- 动态添加过多的属性
- 删除非最后添加的属性(V8 >= 6.0)
在开发调试过程中,可以调用 V8 的 RuntimeCall (开启 --allow-natives-syntax)来判断与优化对象当前的状态:
- %HasFastProperties(Object): 判断对象当前是否处于快速模式下。
- %ToFastProperties(Object):强制优化对象到快速模式。