unj*_*nj2 6 javascript performance
你能帮我确定一下这些陈述的性能差异吗?你会用哪一个?
使用创建一个新的数组
- var new_list = new Array(); or
- var new_list = []
Run Code Online (Sandbox Code Playgroud)使用附加元素
三元运算符或if(){} else(){}
试图制作isodd函数,它更快
(!(is_even))或(x%2!= 0)
foreach或正常迭代
多一个
[编辑:我正在制作数学图书馆.所以任何表演黑客讨论也欢迎:)]
谢谢你的帮助.
所有浏览器的性能特征(尤其是在各个库函数级别)可能会有很大差异,因此很难对这些问题给出有意义的真正有意义的答案。
Anyhoo,只是看看快速的js 引擎(例如 Nitro、TraceMonkey 和 V8)
[ ]将比new Array--new Array变成以下逻辑更快
cons= 查找属性“Array”,如果找不到,则抛出异常cons可以用作构造函数,如果不能:抛出异常thisVal=运行时直接创建一个新对象res= 调用的结果作为 -- 的值cons传递,这需要逻辑来区分 JS 函数和标准运行时函数(假设标准运行时函数没有在 JS 中实现,这是正常情况)。在本例中是一个本机构造函数,它将创建并返回一个新的运行时数组对象。thisValthisArrayres未定义或为 null,则最终结果为,thisVal否则最终结果为res。在调用的情况下,Array新的数组对象将被返回并被thisVal丢弃[ ]只是告诉 JS 引擎立即直接创建一个新的运行时数组对象,没有额外的逻辑。这意味着new Array有大量额外的(不是很便宜)逻辑,并执行额外不必要的对象分配。
newlist[newlist.length] = ...速度更快(尤其是如果 newlist 不是稀疏数组),但推送对于我来说已经很常见了,我期望引擎开发人员投入相当多的精力来提高性能,这样这可能会及时改变。
如果你有一个足够紧的循环,那么三元运算符可能会稍微获胜,但可以说这是a = b ? c : dvs的简单情况下的引擎缺陷if (b) a = c; else a = d
仅函数调用开销就足以使任何 JS 运算符的成本相形见绌,至少在正常情况下(例如,您正在对数字而不是对象执行算术)
语法foreach尚未标准化,但其最终性能将取决于大量细节;通常,JS 语义会导致看起来高效的语句效率较低——例如。比 JS 语义需要枚举来构建对象上所有属性(包括原型链)的列表for (var i in array) ...要慢得多,然后在通过循环发送之前检查以确保每个属性仍在对象上。哦,属性需要从整数(无论如何在数组情况下)转换为字符串,这会花费时间和内存。for (var i = 0; i < array.length; i++) ...in
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |