V8是如何提升对象访问速度

常规属性(properties)和排序属性(element)

对象中的字符串属性被称为 properties,是按照创建的顺序;数字属性被称为 element,按照索引值大小排序。
233820717-b4213c8c-2c31-42bb-ba10-9085da32c522

在对象 bar 内部分别使用了两个线性数据结构保存这两种属性,索引顺序 element → properties

对象内属性

为了提升查找效率,V8 实现了对象内属性策略,如果对象属性少于一定数量时,V8 就会把这些属性直接写入对象中。如果多于一定数量时,V8 就会将线性存储模式降级为非线性字典结构,这样虽然降低了查找速度,但是提升了修改速度。

数量少时

233820728-8330db15-a5a8-438f-bbaa-dac619738624

数量多时

233820736-2539bdd1-c741-422f-9227-b51f10515234

隐藏类 Map

描述了对象内的属性布局,包括对象名和偏移量,每次对象的修改都会更新隐藏类。

守护隐藏类

  • 初始化保持顺序一致
  • 一次性初始化完毕
  • 谨慎使用 delete,破坏隐藏类增加额外的查找速度。
posted @ 2025-11-17 18:21  jinzhepro  阅读(4)  评论(0)    收藏  举报