哪个更快?按 ID 选择,或按索引选择

Which is Faster? Select by ID, or Select by Index?

本文关键字:选择 索引 ID      更新时间:2023-09-26

Backbone 提供了按 ID(分配给每个模型的唯一标识符属性(和索引从集合中选择模型的选项。 以下哪项是从集合中访问项目的最快方法?

打开 Backbone.js,我可以看到collection.get(id)(按 ID 选择函数(使用简单的对象文字查找,collection.at(index)(按索引选择函数(使用简单的数组查找。

来自骨干.js:

collection.get(id(:

// Get a model from the set by id.
get: function(obj) {
    if (obj == null) return void 0;
    return this._byId[obj] || this._byId[obj.id] || this._byId[obj.cid];
}

collection.at(索引(:

// Get the model at the given index.
at: function(index) {
    return this.models[index];
}

因此,这个问题的答案应该直接与哪个更快 - 数组访问或对象文字访问(在这种情况下,假设.get在其第一次迭代中使用,它发送了一个 ID,而不是带有 ID 或 CID 的模型(。

根据

这个JSPerf,按索引选择(使用collection.at(index)(通常比按ID选择(使用collection.get(id)(快,但浏览器的差异很大。 在Chrome和我测试的至少一个Firefox版本上,差异可以忽略不计,但仍然系统地支持按索引选择;但是,在 IE11 中,按索引选择的速度始终(并且几乎完全(快两倍

这里的故事的寓意是尽可能使用按索引选择;散列对象检索快速方便,但缺乏索引查找的原始效率。

要从哈希访问对象,Javascript 引擎必须经过额外的查找步骤,此外,对象的整体复杂性使它们对于任何考虑性能的脚本来说都不太理想。