让vs var在nodejs和chrome中的性能
let vs var performance in nodejs and chrome
当我在chrome和nodejs中测试以下代码时,我得到了以下内容:
铬:
对于VAR循环:24.058ms
对于LET:8.402ms的环路
NodeJS:
对于VAR循环:4.329ms
对于LET:8.727ms的环路
根据我的理解,由于块范围,LET在chrome中更快。但是有人能帮我理解为什么在NodeJS中是相反的吗?还是我错过了什么?
"use strict";
console.time("for loop with VAR");
for (var i = 0; i < 1000000; i += 1) {
// Do nothing
}
console.timeEnd("for loop with VAR");
console.time("for loop with LET");
for (let i = 0; i < 1000000; i += 1) {
// Do nothing
}
console.timeEnd("for loop with LET");`
PS:不确定这是否不是测试性能的理想方式。
Chrome使用的是支持它的V8 5.0……但由于vm尚未优化为处理TDZ,因此目前速度较慢是正常的(我记得有人断言用let替换var会使代码慢27%)。
进行时
for (let i = 0; i < 1000000; i += 1) { }
每个循环周期中的i值是一个单独的引用,当在异步回调中使用i值时,这很有用。这是较慢的,但在这种使用情况下可能比替代方案更快。
何时使用
let j;
for (j = 0; j < 1000000; ++j) { }
您将只有一个值引用,并且它将与var.一样快
尝试以下代码
console.time("let i");
for (let i = 0; i < 10000000; ++i) { }
console.timeEnd("let i");
console.time("let j");
let j;
for (j = 0; j < 10000000; ++j) { }
console.timeEnd("let j");
console.time("var k");
for (var k = 0; k < 10000000; ++k) { }
console.timeEnd("var k");
这将给出类似的结果
let i: 91ms
let j: 25ms
var k: 27ms
其中,如果使用正确,clearlet与var的速度相同。
还要了解异步行为的差异,请尝试
for (let i = 0; i < 3; ++i) {
setImmediate(() => { console.log(i) });
}
let j;
for (j = 0; j < 3; ++j) {
setImmediate(() => { console.log(j) });
}
for (var k = 0; k < 3; ++k) {
setImmediate(() => { console.log(k) });
}
将输出
0
1
2
3
3
3
3
3
3
在循环的每个循环中,对于let i,i值是一个唯一的引用,这是导致轻微开销的原因,而对于其他两个循环,它是相同的引用。
我不能告诉你更多,但正如本视频中提到的(非常好),你需要更聪明的代码来测试这一点。https://www.youtube.com/watch?v=65-RbBwZQdU编译器会用magic填充你的代码,如果你不使用i
并且循环是空的
相关文章:
- Chrome WebKitGetUserMedia
- 函数参数中的数据与指定变量之间的任何性能差异
- 让vs var在nodejs和chrome中的性能
- WebGL和Chrome:高分辨率会导致糟糕的性能
- 对象描述符getter/setter在最近的Chrome/V8版本中的性能
- 画布性能在 Chrome 49 中非常慢
- IE10 画布性能优于 Chrome
- 基于 Chrome 的 JavaScript 性能滞后
- css3动画性能差(仅适用于Chrome)
- node-webkit与chrome浏览器中应用程序的性能
- Parallax游戏基础-Chrome(可能还有其他)-性能
- 如何清除chrome性能条目或绕过其数量限制
- focus()或select()方法javascript,在Chrome中性能缓慢
- ammo.js在Google Chrome中的性能
- node.js比客户端Javascript (vs. Chrome/V8)有任何性能优势吗?
- Chrome扩展性能优化
- KineticJS:Firefox与Chrome的动画性能
- 在chrome浏览器运行这个网站的性能很差
- Chrome框架真的是唯一的选择,以提高拉斐尔的性能在IE
- 排除域在Chrome扩展没有exclude_matches/globs或提高Javascript CSS性能