作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 JavaScript 的工作原理。通过分析一些代码,我发现以“类型化”为导向的声明比非“类型化”的声明要慢。当然,我知道JS不是类型语言。
我在 Firefox、Chrome 和 Opera 上对此进行了测试,结果始终相同。
var repetitions = 10000000;
console.time("a");
for (var i=0; i<repetitions; i++) {
var a = "...";
}
console.timeEnd("a");
console.time("b");
for (var i=0; i<repetitions; i++) {
var b = new String("...");
}
console.timeEnd("b")
最佳答案
特别是在 V8 中,如果您检查生成的字节码 (node --print-bytecode
),您将得到如下内容:
> return "..."
LdaConstant [0]
Return
> return new String("...")
LdaGlobal [0], [0]
Star r0
LdaConstant [1]
Star r1
Ldar r0
Construct r0, r1-r1, [2]
Return
这基本上意味着字符串文字只是从常量池中加载指针,而new String
涉及更多步骤 - 加载全局String
对象,加载常量,调用通用 Construct
方法。我想 FF 或任何其他引擎的情况并没有太大不同。
关于javascript - 为什么 `var a = ".. ."` 比 `var a = new String(".. .")` 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56686437/
我是一名优秀的程序员,十分优秀!