哪个更快? Select 按 ID,还是 Select 按索引?
Which is Faster? Select by ID, or Select by Index?
Backbone 通过 ID(分配给每个模型的唯一标识符属性)和索引为集合中的 select 模型提供选项。 访问集合中项目的最快方法是什么?
打开 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 的模型)。
根据this JSPerf,按索引(使用collection.at(index)
)select通常比按ID(使用collection.get(id)
)select更快但不同浏览器的差异很大。在 Chrome 和我测试的至少一个 Firefox 版本上,差异可以忽略不计,但仍然系统地支持 select by index;然而,在 IE11 中,select 按索引始终(并且几乎完全)两倍 一样快。
这里故事的寓意是尽可能按索引使用 select;散列对象检索 快速方便,但缺乏索引查找的原始效率。
要从散列访问对象,Javascript 引擎必须经过一个额外的查找步骤,这 in addition the overall complexity of objects 使它们成为任何需要性能的脚本的不太理想的选择考虑。
Backbone 通过 ID(分配给每个模型的唯一标识符属性)和索引为集合中的 select 模型提供选项。 访问集合中项目的最快方法是什么?
打开 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 的模型)。
根据this JSPerf,按索引(使用collection.at(index)
)select通常比按ID(使用collection.get(id)
)select更快但不同浏览器的差异很大。在 Chrome 和我测试的至少一个 Firefox 版本上,差异可以忽略不计,但仍然系统地支持 select by index;然而,在 IE11 中,select 按索引始终(并且几乎完全)两倍 一样快。
这里故事的寓意是尽可能按索引使用 select;散列对象检索 快速方便,但缺乏索引查找的原始效率。
要从散列访问对象,Javascript 引擎必须经过一个额外的查找步骤,这 in addition the overall complexity of objects 使它们成为任何需要性能的脚本的不太理想的选择考虑。