当func.apply(obj, params)
为空数组或func.call(obj)
时,从params
切换到null
是否有性能优势?
我的意思是,调用func.call(obj)
比调用func.apply(obj, null)
更快?
我最感兴趣的是NodeJS 4.x下的表现。
这是一种必须进行大量此类调用的算法。
答案 0 :(得分:3)
在此页面上有一个比较。 https://jsperf.com/call-apply-segu 我的机器上的通话速度更快。
答案 1 :(得分:1)
#!/usr/local/bin/php
<?php
$thread = $_SERVER['argv'][1];
for($i=0;$i<1000000;$i++)
{
//Soecket operations
echo $thread."). ".$i.PHP_EOL;
}
比apply
慢。 8 - )
call
答案 2 :(得分:-1)
基本上,他们会采取相同的步骤:
Function.prototype.apply (thisArg, argArray)
- 如果IsCallable( func )为false,则抛出 TypeError 异常。
- 如果 argArray null 或未定义,则
醇>
- 返回调用 func 的[[Call]]内部方法的结果,提供 thisArg 作为 this 值和一个空列表论证。
Function.prototype.call (thisArg [ , arg1 [ , arg2, … ] ] )
- 如果IsCallable( func ) false ,则抛出 TypeError 例外。
- 让 argList 为空List。
- 如果使用多个参数调用此方法,则从 arg1 开始按从左到右的顺序追加每个参数作为最后一个参数 argList
的元素- 返回调用 func 的[[Call]]内部方法的结果,提供 thisArg 作为 this 值和 argList 作为参数列表。
醇>
因此差异(如果有的话)应该依赖于实现,并且可以忽略不计。