检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
function count_obj(obj){
var i = 0;
for(var key in obj){
++i;
}
return i;
}
Run Code Online (Sandbox Code Playgroud) 我是一名PHP开发人员,我一直认为微优化不值得花时间.如果你真的需要额外的性能,你可以编写你的软件,使其在架构上更快,或者你编写一个C++扩展来处理慢速任务(或者更好的是,使用HipHop编译代码).然而,今天一位工作伙伴告诉我,这有很大的不同
is_array($array)
Run Code Online (Sandbox Code Playgroud)
和
$array === (array) $array
Run Code Online (Sandbox Code Playgroud)
而且我就像"呃,这真是一个毫无意义的比较",但他不同意我的看法......他是我们公司最好的开发人员,并且负责一个每天大约有5000万次SQL查询的网站 - - 例如.所以,我在这里想知道:他可能是错的还是微优化真的值得花时间和时间?
我不确定它是否或何时对解除引用变量有用(提高性能).
var x = a.b.c.d[some_key].f;
while (loop) {
do_something_with(x);
}
Run Code Online (Sandbox Code Playgroud)
好像比
while (loop) {
do_somthing_with(a.b.c.d[some_key].f);
}
Run Code Online (Sandbox Code Playgroud)
是需要还是由智能JavaScript引擎自动完成?
但我的实际问题是我是否应该这样做,例如,在图书馆.
(function() {
var slice = Array.prototype.slice;
Function.prototype.x = function x() {
var args = slice.call(arguments, 0);
...
};
})();
Run Code Online (Sandbox Code Playgroud)
要不就
Function.prototype.x = function x() {
var args = Array.prototype.slice.call(arguments, 0);
...
};
Run Code Online (Sandbox Code Playgroud)
引擎无法自动改进,因为它不知道Array.prototype.slice在运行时是否可能会发生变化.
那么:创建一个闭包来创建切片函数的本地引用会使脚本更快吗?或者额外的闭包范围是否比访问Array属性"prototype"的属性"slice"慢?