javascript-JS:在闭包的父范围内分配变量会提高性能.为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-JS:在闭包的父范围内分配变量会提高性能.为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1347字,纯文字阅读大概需要2分钟。
内容图文
![javascript-JS:在闭包的父范围内分配变量会提高性能.为什么?](/upload/InfoBanner/zyjiaocheng/683/a46a2ec1b2374ae081dd8402e1d62696.jpg)
在研究javascript的闭包时,我想出了下面的小例子,但我并不真正了解发生了什么.
我希望与垃圾收集器一起玩,假设在紧密循环中的函数内部使用var声明变量会导致大量分配释放.我试图通过将var声明放在闭包的父范围中来避免这种情况,并期望闭包函数会更快.不管这个想法多么糟糕,首先我可能会偶然发现这个小问题.
var withClosure = function() {
var a, b, c, d, e, f, g;
return function () {
a = 1;
b = 2;
c = 3;
d = 4;
e = 5;
f = 6;
g = 7;
};
}();
var withoutClosure = function () {
var a = 1;
var b = 2;
var c = 3;
var d = 4;
var e = 5;
var f = 6;
var g = 7;
};
console.time("without");
for (var i = 0; i < 1000000000; i++) {
withoutClosure();
}
console.timeEnd("without");
console.time("withcsr");
for (var i = 0; i < 1000000000; i++) {
withClosure();
}
console.timeEnd("withcsr");
/*
Output on my machine:
without: 1098.329ms
withcsr: 8878.812ms
Tested with node v.6.0.0 and Chrome 50.0.2661.102 (64-bit)
*/
我在父作用域中分配变量的事实使闭包运行的速度比我的计算机上正常版本慢8倍.使用更多变量会使情况变得更糟.如果我只是读取变量而不是分配给变量,那么问题就不存在了.
是什么原因造成的?有人可以解释吗?
解决方法:
在没有闭包的示例中,任何不错的Javascript引擎都将意识到该函数内的变量已初始化,但在超出范围之前从未读取过,因此可以在不影响函数输出的情况下将其删除.
在带有闭包的示例中,变量保留在范围内,因此无法进行优化.
该演讲深入解释了JIT Javascript编译器进行的一些优化:https://www.youtube.com/watch?v=65-RbBwZQdU
内容总结
以上是互联网集市为您收集整理的javascript-JS:在闭包的父范围内分配变量会提高性能.为什么?全部内容,希望文章能够帮你解决javascript-JS:在闭包的父范围内分配变量会提高性能.为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。