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

时间:2015-04-01 17:10:45

标签: javascript performance select backbone.js

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

破解Backbone.js,我可以看到collection.get(id)(select-by-ID函数)使用简单的对象 - 文字查找和collection.at(index)(select-by-index函数) )使用简单的数组查找。

来自Backbone.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的模型。)

1 个答案:

答案 0 :(得分:1)

根据this JSPerf,按索引选择(使用collection.at(index))通常比按ID(使用collection.get(id)选择更快,但浏览器的广泛变化。在Chrome和我测试的至少一个Firefox版本中,差异可以忽略不计,但仍然系统地支持按索引选择;但是,在IE11中,按索引选择一致(并且几乎完全)两次一样快。

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

要从哈希中访问对象,Javascript引擎必须经过一个额外的查找步骤,in addition the overall complexity of objects使它们成为任何需要考虑性能的脚本的理想选择。