微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在V8内部表示对象?

我一直认为 javascript中的对象是简单的键值对,即哈希表,但在阅读了 this文章之后我很困惑.

作者特别说:

when you use an object as if it was a hash table,it will be turned
into a hash table.

那么,以前到底是怎么回事?特别是整个段落让我困惑.有人能说清楚吗?

解决方法

根据 this answer,在V8中,对象可以有两种模式 – 字典模式和快速模式.

对象最初处于快速模式,其中没有哈希映射 – 无需计算 – 属性访问.它在C中存储像结构一样的对象.只有当你开始使用“对象就好像它是一个哈希表时,它才会变成一个哈希表”–dictionary模式.一旦发生这种情况,您将获得在后台用于属性访问的哈希映射的性能损失.

例如:

// running node with `--allow-natives-Syntax` flag

var obj = { a: true,b: false };
%HasFastProperties(obj); // true (Fast mode)
delete obj.a;
%HasFastProperties(obj); // false (Dictionary mode)

要么:

var obj = { a: true,b: false };
%HasFastProperties(obj); // true (Fast mode)
// add lots of properties
for (var i = 0; i < 100; i++) {
    obj["prop" + i] = i;
}
%HasFastProperties(obj); // false (Dictionary mode)

这样做进入词典模式的原因是性能优化.在字典模式下添加/删除属性快速模式更快,因此V8引擎在检测到此行为时优化了更改结构而不是属性访问(Read more here).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐