簡體   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