JavaScript';s声明性能问题
你们能帮我确定每一个的性能差异吗 声明?你会用哪一个JavaScript';s声明性能问题,javascript,performance,Javascript,Performance,你们能帮我确定每一个的性能差异吗 声明?你会用哪一个 使用 - var new_list = new Array(); //or - var new_list = []; 使用 - push('a') - new_list[i]; (if i know the length) 三元运算符或if(){}else(){} 正在尝试使isodd函数更快 (! (is_even)) or (x%2!=0) forEach()或正常迭代 再来一次 a=b=3或b=3;a=b [编辑:我正
- var new_list = new Array(); //or
- var new_list = [];
- push('a')
- new_list[i]; (if i know the length)
if(){}else(){}
(! (is_even)) or (x%2!=0)
forEach()
或正常迭代
a=b=3代码>或b=3;a=b代码>
谢谢您的帮助。我建议您编写一个简单的脚本,如:
for(var i = 0; i < 1000; i++){
// Test your code here.
}
for(变量i=0;i<1000;i++){
//在这里测试代码。
}
您可以通过这种方式对任何内容进行基准测试,可能会在for
语句之前和之后添加计时函数,以便更加准确
当然,您需要根据操作的性质调整上限(本例中为1000),有些需要更多的迭代,有些需要更少的迭代
for(var i=a.length;i>-1;i--) {
// do whatever
}
上述速度略快于:
for(var i=0;i<a.length;i++) {
// do whatever
}
用于(var i=0;i正如其他海报所建议的那样,我认为做一些粗略的基准测试是你最好的选择……然而,我也要指出,你可能会从不同的浏览器中得到非常不同的结果,因为我相信你问的大多数问题都归结为语言结构的特定内部实现,而不是语言本身。我一直认为,由于(x&1)是一种按位操作,它将是检查偶数/奇数的最快方法,而不是检查数字的其余部分。本页说推送速度较慢。
所有浏览器的性能特征(特别是在单个库函数的级别上)可能会有很大差异,因此很难对这些问题给出有意义的答案
总之,看看快速js引擎(Nitro、TraceMonkey和V8)
[]
将比新阵列
-新阵列
转换为以下逻辑更快
cons
=查找属性“Array”,如果找不到,则引发异常
检查cons
是否可以用作构造函数,如果不能:抛出异常
thisVal
=运行时直接创建一个新对象
res
=调用cons
的结果将thisVal
传递为this
的值——这需要逻辑来区分JS函数和标准运行时函数(假设标准运行时函数没有在JS中实现,这是正常情况)。在本例中,Array
是一个本机构造函数,它将创建并返回一个新的运行时数组对象
如果res
未定义或为空,则最终结果为thisVal
,否则最终结果为res
。在调用Array
的情况下,将返回一个新的数组对象,并丢弃thisVal
[]
只是告诉JS引擎立即直接创建一个新的运行时数组对象,而不需要额外的逻辑。这意味着新数组
有大量额外的(不是很便宜的)逻辑,并执行额外的和不必要的对象分配
newlist[newlist.length]=…
更快(特别是在newlist不是稀疏数组的情况下),但是push对于我来说非常常见,我希望引擎开发人员投入相当多的精力来提高性能,以便及时改变
如果你有一个足够紧密的循环,三元操作符可能会有一个非常微小的胜利,但可以说这是一个引擎缺陷,在a=b?c:d
vsIf(b)a=c;else a=d
仅函数调用开销就足以使任何JS操作符的成本相形见绌,至少在正常情况下是如此(例如,您正在对数字而不是对象执行算术)
foreach
语法尚未标准化,但其最终性能将取决于大量细节;通常JS语义会导致看起来效率较低的语句——例如,for(vari in array).
比for(vari=0;i
因为JS语义要求
枚举中的建立对象(包括原型链)上所有属性的列表,然后检查以确保每个属性在通过循环发送之前仍在对象上。哦,属性需要从整数转换(无论如何在数组中)转换为字符串,这需要花费时间和内存
我以前做过,我有一些技巧。首先,在多个浏览器中测试,因为它们有不同的JS引擎。其次,你需要1000多次迭代才能看到任何结果。第三,你必须在IE等浏览器上禁用脚本警告。此外,每个浏览器跟踪时间的方式也不同(错误地).比如,我听说有些情况下IE会忽略小于15毫秒的时间。我更喜欢使用'var myArray=[];',因为它更简单…你一定像这个javascript忍者。第5个是最令人震惊的。有吗