链接与创建新集合 - 效率
Chaining vs creating a new Collection - efficiency
我是 Backbone 的初学者,想知道两者中哪一个更有效以及预期的做事方式。
类型 A : 创建一个新集合,它接受先前操作的结果并从新集合中提取一个键
result = new Backbone.Collection(this.collection.where({"x":y})).pluck("z")
或
类型 B:集合的链接特征 - 来自过滤器和映射的数组。
result = this.collection.chain()
.filter(function(model){model.get("x")===y)
.map(function(model){model.get("z")})
.value()
基准测试是关键:链接轻而易举地胜出1并且更清晰2。
比较见http://jsperf.com/backbone-chaining-vs-new-collection3.
当然,如果你真的很在意速度,你会放弃中间人并使用香草JavaScript(这可以进一步优化,查找数组遍历技术)
var i, l, result = [];
for (i=0, l=this.collection.length; i<l; i++) {
if (this.collection.models[i].get('x') === y)
result.push(this.collection.models[i].get('z'));
}
1以你的准确setup/datasample/speed为准
2 请注意,您的 filter
和 map
函数缺少 return
3 使用的测试:http://jsfiddle.net/nikoshr/cek502wp/
我是 Backbone 的初学者,想知道两者中哪一个更有效以及预期的做事方式。
类型 A : 创建一个新集合,它接受先前操作的结果并从新集合中提取一个键
result = new Backbone.Collection(this.collection.where({"x":y})).pluck("z")
或
类型 B:集合的链接特征 - 来自过滤器和映射的数组。
result = this.collection.chain()
.filter(function(model){model.get("x")===y)
.map(function(model){model.get("z")})
.value()
基准测试是关键:链接轻而易举地胜出1并且更清晰2。 比较见http://jsperf.com/backbone-chaining-vs-new-collection3.
当然,如果你真的很在意速度,你会放弃中间人并使用香草JavaScript(这可以进一步优化,查找数组遍历技术)
var i, l, result = [];
for (i=0, l=this.collection.length; i<l; i++) {
if (this.collection.models[i].get('x') === y)
result.push(this.collection.models[i].get('z'));
}
1以你的准确setup/datasample/speed为准
2 请注意,您的 filter
和 map
函数缺少 return
3 使用的测试:http://jsfiddle.net/nikoshr/cek502wp/