1

这仅仅是为了缩短查找链吗?

  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

4

2 回答 2

2

对于 Backbone,这完全没有意义。两者slicesplice都只使用一次,因此var声明会产生不必要的开销。

对于 jQuery,不同的故事。对被多次引用的事物的本地引用有助于缩小。因此生产版本的代码量减少了。

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

于 2012-10-12T21:52:04.370 回答
0

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

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

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

于 2013-10-22T05:31:24.370 回答