Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 性能-主干/jQuery为什么复制切片和拼接?_Javascript_Jquery_Backbone.js - Fatal编程技术网

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应该是看看在范围缩减变得有利之前需要使用多少次。。。