繁体   English   中英

JavaScript性能:调用vs Apply

[英]JavaScript performance: Call vs Apply

params为空数组或nullfunc.apply(obj, params)func.apply(obj, params)切换到func.call(obj)是否有性能优势?

我的意思是,调用func.call(obj)比调用func.apply(obj, null)更快?

我最感兴趣的是NodeJS 4.x下的性能。

这适用于必须进行大量此类调用的算法。

在这个页面上有一个比较。 https://jsperf.com/call-apply-segu我的机器上的呼叫速度更快。

哈,有意思:看起来applycall慢。 8-)

    ~/tmp ω  cat test.js                                                                                                   
function work(a, b, c) {
  // do some work
}

var a = [1, 2, 3];

for (var j = 0; j < 4; j++) {
  console.time('apply-ing');
  for (var i = 0; i < 1000000; i++) {
    work.apply(this, a);
  }
  console.timeEnd('apply-ing');

  console.time('call-ing');
  for (var i = 0; i < 1000000; i++) {
    work.call(this, 1, 2, 3);
  }
  console.timeEnd('call-ing');
}
    ~/tmp ω  node test.js
apply-ing: 42ms
call-ing: 5ms
apply-ing: 40ms
call-ing: 5ms
apply-ing: 42ms
call-ing: 5ms
apply-ing: 39ms
call-ing: 6ms
    ~/tmp ω  node --version
v4.1.2
    ~/tmp ω

基本上,他们将采取相同的步骤:

Function.prototype.apply( thisArgargArray

  1. 如果IsCallablefunc )为false,则抛出TypeError异常。
  2. 如果argArraynull未定义 ,那么
    1. 返回调用func的[[Call]]内部方法的结果,提供thisArg作为值和一个空的参数列表。

Function.prototype.call( thisArg [, arg1 [, arg2 ,...]])

  1. 如果IsCallablefunc )为false ,则抛出TypeError异常。
  2. argList为空List
  3. 如果使用多个参数调用此方法, 则从 arg1开始以从左到右的顺序将每个参数附加为argList的最后一个元素
  4. 返回调用func的[[Call]]内部方法的结果,提供thisArg作为值,并将argList作为参数列表。

因此差异(如果有的话)应该依赖于实现,并且可以忽略不计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM