Backbone提供了通过ID(分配给每个模型的唯一标识符属性)和索引从集合中选择模型的选项。 其中哪一项是从集合中访问项目的最快方式?
破解Backbone.js,我可以看到collection.get(id)
(select-by-ID函数)使用简单的对象 - 文字查找和collection.at(index)
(select-by-index函数) )使用简单的数组查找。
:
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的模型。)
答案 0 :(得分:1)
根据this JSPerf,按索引选择(使用collection.at(index)
)通常比按ID(使用collection.get(id)
)选择更快,但浏览器的广泛变化。在Chrome和我测试的至少一个Firefox版本中,差异可以忽略不计,但仍然系统地支持按索引选择;但是,在IE11中,按索引选择一致(并且几乎完全)两次一样快。
这里故事的寓意是尽可能使用索引选择;哈希对象检索 快速方便,但缺乏索引查找的原始效率。
要从哈希中访问对象,Javascript引擎必须经过一个额外的查找步骤,in addition the overall complexity of objects使它们成为任何需要考虑性能的脚本的理想选择。