Javascript 性能-主干/jQuery为什么复制切片和拼接?
这仅仅是为了缩短查找链吗Javascript 性能-主干/jQuery为什么复制切片和拼接?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,这仅仅是为了缩短查找链吗 var slice = Array.prototype.slice; var splice = Array.prototype.splice; jQuery做了类似的事情: core_push = Array.prototype.push, core_slice = Array.prototype.slice, 对于主干网,这毫无意义。slice和splice都只使用一次,因此var声明带来了不必要的开销 对于jQuery,情况不同。多次引用的某事物的局部
var slice = Array.prototype.slice;
var splice = Array.prototype.splice;
jQuery做了类似的事情:
core_push = Array.prototype.push,
core_slice = Array.prototype.slice,
对于主干网,这毫无意义。
slice
和splice
都只使用一次,因此var
声明带来了不必要的开销
对于jQuery,情况不同。多次引用的某事物的局部引用有助于缩小。因此,生产版本的代码大小减小
是的,这也是一个小的性能提升,但是没有什么值得讨论的。切片、拼接和推送的最有效的方法是使用C代码。由于所有浏览器都是使用Array.splice用C编写的,因此splice将在内部使用C而不是JS处理 如果你真的需要性能,你应该试着找到一种既不使用也不使用的方法。问题是,它们都将创建僵尸对象,这些对象将被放置在垃圾收集器的周围,以供以后使用。从长远来看,GC所做的工作越少,节省的时间就越多。使用同一数组,并使用光标在数组中的不同位置进行编辑。这将避免GC收集它
这里有一个例子:在trackFPS函数的第40行。如果你推/切很多,需要性能,考虑一个静态数组。问得好,我自己也在想。我认为这与缩小有关,但直到彭彭确认了这一点,我才确定实际上是在
var
语句中创建的实际切片
副本的唯一引用。每当你看到带点的.slice
时,那是另一回事:JS引擎通过查找左侧对象的原型链来解析它,实际上它们是数组
实例。。。。一个好的jsperf应该是看看在范围缩减变得有利之前需要使用多少次。。。