繁体   English   中英

我是否提高了性能我在 JavaScript 中声明了繁忙的 function 之外的变量?

[英]Am I improving performance I declare a variable outside of busy function in JavaScript?

想象一下,我有一个经常被调用的 function,需要在内部使用一个变量。

function busyFunction() {
    var intermediateResult;
    /* compute something */
    return something;
}

据我了解,在第一个示例中,浏览器将为变量分配 memory,然后安排它在某个时候进行垃圾收集。

var intermediateResult;
function busyFunction() {
    /* compute something */
    return something;
}

我知道第二个例子会污染busyFunction之外的scope。 但是由于变量的 memory 在父 function 之前不会被垃圾收集,这对性能有好处吗? 如果我在这里错了或者效果可以忽略不计,我宁愿使用第一个更干净的例子。

简而言之,是的。 您消耗的资源更少,因为每次执行 function 时,您都不会在 scope 中创建变量,然后在 function 执行结束后将其丢弃。 就我个人而言,我建议创建一个 object 来保存变量和 function 以便变量不只是“浮动”,但这是细节。

然而,另一件事是代码可读性。 我认为问题中的示例是您正在处理的内容的简化版本。 在这里,它基本上归结为可读性和效率之间的平衡。 如果您认为将其放在外面会令人困惑,那么请将其留在 function 中,除非将其放在外面的优势大大超过了代码不那么令人困惑的事实。

除非性能改进非常显着,否则为了清楚起见,我建议将其留在 function 中。

在更高的 scope 中声明变量会使它们的访问速度变慢(在全局范围内非常如此),并且 - 更重要的是 - 更难为编译器优化。 垃圾收集成本可以忽略不计。 我预计这实际上会更慢。 差异应该非常小(几乎无法测量),但与往常一样,请在您的实际代码中使用真实数据自行对其进行基准测试。

性能会提高的唯一情况是,如果您想在调用之间保持一个值,并且通过不重复运行昂贵的初始化代码来获得优势。 特别是如果您可以将变量设置为const ant 在调用 function 之前初始化。

一般来说,以可读和惯用的代码为目标,优化编译器也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM