V8 中使用 delete 删除对象属性的性能损耗原因
在 V8 中,对象的属性可以分为两类:已知属性和隐藏属性。已知属性是在创建对象时就已经确定的属性,可以直接访问。而隐藏属性是在对象被访问时才会被创建的属性,需要进行额外的操作才能访问。
当我们使用 delete 关键字删除一个对象的属性时,V8 需要将该属性的隐藏属性从对象的隐藏类中删除。这个操作会导致对象的隐藏类发生变化,从而影响其它相同隐藏类的对象。这个过程需要重新计算对象的隐藏类,生成新的隐藏类,并且更新相应的缓存。这些操作都会带来额外的性能损耗。
此外,频繁地修改对象的隐藏类也会导致隐藏类的缓存失效,从而降低 V8 的性能。因此,V8 在设计时使用了一些优化策略,比如预先生成隐藏类、缓存隐藏类等,以尽量避免这种情况的发生。但是,如果我们频繁地使用 delete 关键字删除对象的属性,这些优化策略就会失效,从而导致性能下降。
原文地址: https://www.cveoy.top/t/topic/lDOF 著作权归作者所有。请勿转载和采集!