gpt4 book ai didi

javascript - 遍历 javascript HashTable 而不会导致优化损失

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:23 25 4
gpt4 key购买 nike

根据本文5.2.1节:Optimization killers

这样做会关闭 V8 中的优化:

function hashTableIteration() {
var hashTable = {"-": 3};
for(var key in hashTable);
}

作者说:

例如,当您动态添加太多属性(在构造函数之外)、删除属性、使用不能作为有效标识符的属性等时,对象将进入哈希表模式。换句话说,当你使用一个对象时,就好像它是一个散列表,它会变成一个哈希表。将这样的对象传递给 for-in 是不行的。当在 Node.JS 中启用标志 --allow-natives-syntax 时,您可以通过调用 console.log(%HasFastProperties(obj)) 来判断对象是否处于哈希表模式。

我的问题是,在 javascript 中迭代类似哈希表的对象的键的正确方法是什么,这样优化就不会被关闭?

最佳答案

看起来答案就在同一篇文章的底部。

Workaround: Always use Object.keys and iterate over the array with for loop. If you truly need all properties from entire prototype chain, make an isolated helper function:

function inheritedKeys(obj) {
var ret = [];
for(var key in obj) {
ret.push(key);
}
return ret;
}

If you pass a object to for-in that is not a simple enumerable it will punish the entire containing function.

据我了解,隔离功能有助于优化流程的其余部分。在下面的示例中,只有 inheritedkeys 函数不会被优化。

function someFunction(someObj) {
var keys = inheritedKeys(someObj),
i = 0,
len = keys.length;

for (; i < len; i++) {
//some computation
}

}

关于javascript - 遍历 javascript HashTable 而不会导致优化损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414809/

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