gpt4 book ai didi

javascript - "dictionary mode"的优点和缺点

转载 作者:可可西里 更新时间:2023-11-01 02:54:02 24 4
gpt4 key购买 nike

据我所知,使用 Javascript 删除对象上的条目时,至少使用 chrome 会将对象置于“字典模式”或“慢速模式”

例子:

var user = { name: 'connor', sex: 'male' }; 
// user is in "fast mode"

delete user.sex;
// user is in ("slow" or "dictionary") mode

这什么时候有益,什么时候有害?

一个具体的例子是,我有一个对象,当应用程序启动时对象是空的,但是随着代码的运行和应用程序内存的增加,它可能会变得非常大并且对象永远不会减少在应用程序关闭之前它的大小将不存在。

还有关于这种模式的任何语义吗?

最佳答案

It is to my knowledge that with Javascript when you delete an entry on a object, at least with chrome it puts the object into "dictionary mode" or "slow mode"

那不是 JavaScript 的东西;这是 Chrome 中 V8 引擎的实现特征。 This thread on the V8 users's list讨论这个:

[ZenWolf] ...Does using the JavaScript "delete" keyword to delete a property from an object effect (sic) how v8 will optimize the object? ...

[Sven Panne] ...Deleting a property results in going to "slow mode", i.e. using a dictionary for the object's properties. So as a general rule of thumb, using 'delete' makes thing slower...

可以看到这个效果in this JSPerf .请注意使用 V8 的浏览器(Chrome、Opera 20)在使用 delete 时比不使用它时速度更慢。无论哪种方式,Firefox 最新的 SpiderMonkey 都快得令人眼花缭乱,IE10 和 11 轻微受到影响。 (有趣的是,用于 10.5 到 12 [我认为是]Carakan 的引擎 Opera 比 V8 更受 delete 的影响。)

如果您正在编写要在网络浏览器中使用的代码,那么针对特定引擎进行优化往往是浪费时间,除非您在该引擎上面临特定的、真实的性能问题。 (如果你是,一旦你处理了那个,确保这些改变不会弄乱其他引擎!)

如果您正在为 NodeJS、SilkJS 等编写代码,那么当然可以针对 V8 进行优化(尽管过早优化的正常规则仍然适用),因为它们是专门使用 V8 构建的。

Also is there any semantics around this mode?

没有。 JavaScript 的语义由规范定义,如果对象的行为与规范的语义相匹配,该规范并不规定如何实现对象;该规范根本不涉及性能。 V8 通过即时生成动态类并将它们编译为机器代码来实现对象,但是当您从它们中删除属性时会退回到“慢速”(字典)模式。 (如果您添加 属性,如 Sven Panne 在上面的引用中所说的更常见的操作,它会动态创建一个派生类,即 doesn't slow things down。)但是其他引擎可以自由地将它们实现为 HashMap 、属性链接列表或其他任何内容。

关于javascript - "dictionary mode"的优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com