性能 - 为什么backbone / jQuery复制切片和拼接?

时间:2012-10-12 21:46:52

标签: javascript jquery backbone.js

这只是缩短查找链吗?

  var slice = Array.prototype.slice;
  var splice = Array.prototype.splice;

http://backbonejs.org/docs/backbone.html

jQuery做了类似的事情:

core_push = Array.prototype.push,
core_slice = Array.prototype.slice,

http://code.jquery.com/jquery-1.8.2.js

2 个答案:

答案 0 :(得分:2)

对于Backbone来说,根本没有任何意义。 slicesplice都只使用一次,因此var声明会产生不必要的开销。

对于jQuery,不同的故事。对多次引用的东西的本地引用有助于缩小。因此,生产版本的代码大小会减少。

是的,这也是一个小的性能提升,但没有什么值得讨论的。

答案 1 :(得分:0)

切片,拼接和推送最高效的方法是使用C代码。由于所有浏览器都是使用Array.splice用C语言编写的,因此将在内部使用C而不是JS处理。

如果你真的需要性能,你应该尝试找到一种既不使用它的方法。问题是他们都会创建僵尸对象,这些对象将被垃圾收集器放置以便以后使用。 GC的工作越少,从长远来看,您节省的时间就越多。使用相同的数组并使用游标在数组中的不同位置进行编辑。这将使GC无法收集它。

这里有一个例子:trackFPS函数第40行的https://github.com/puppybits/BackboneJS-PerfView/blob/master/PerfView.js。如果您正在推动/切片很多并且需要考虑静态数组的性能。