簡體   English   中英

JavaScript中的大變量-使它們成為全局變量?

[英]Big variables in JavaScript - make them global?

在Cordova開發的一個相當大的應用程序中,我們不斷地從用戶的LocalStorage中獲取一組變量。 我的意思是,這個集合很大(可以從幾KB到10mb)。 我非常確定,將變量加載到內存中可能不是一個好主意(尤其是在低功耗,低內存的設備中),但是事實證明,從LocalStorage中獲取變量似乎花費了太長時間。 目前,我們的做法是這樣的:

function doSomething() {
    var ourData = JSON.parse(localStorage.getItem('ourData'));

    ourData = processingBackAndForth(ourData);

    localStorage.setItem('ourData', JSON.stringify(ourData));

    syncWithServer(ourData);
}

其中processingBackAndForth(ourData)非常密集,並且整個功能幾乎每10秒使用一次。 現在,我在想,這應該更快嗎?

ourData = JSON.parse(localStorage.getItem('ourData'));

function doSomething() {
    ourData = processingBackAndForth(ourData);

    localStorage.setItem('ourData', JSON.stringify(ourData));
    syncWithServer(ourData);
}

對此進行了一點閱讀之后,它基本上表明將它們保留在本地范圍內更好(我知道這對於封裝來說更好),但是這個過程不是太多了嗎? 只需對其進行描繪,然后從LocalStorage檢索,然后再次保存,然后再使用GC清理變量即可。

我知道指出鏈接的要點之一是,如果需要在整個應用程序中使用某些東西,並且僅在非常特殊的情況下才將其設為全局,但是無論如何,保持服務器和LocalStorage之間的同步版本仍然需要考慮對我來說非常重要,所以實際上我只減輕了回收和垃圾收集的負擔。

JavaScript代碼會使用較大的全局變量而不是較大的局部變量來獲得一些微優化嗎?

您說您的數據可能非常大(最大10MB)。 現在的問題是: 是否最好只檢索一次數據並將其全局保存?

在性能方面,如果您多次獲取或設置數據,這確實會減慢程序運行速度,因此,您的目標是盡可能少請求和設置數據 ,從而不必等待localStorage延遲。每次都檢索它。

現在,給定您的功能:

ourData = JSON.parse(localStorage.getItem('ourData'));

function doSomething() {
    ourData = processingBackAndForth(ourData);

    localStorage.setItem('ourData', JSON.stringify(ourData));
    syncWithServer(ourData);
}

如果您多次調用doSomething()函數上述代碼將是最佳的解決方案 ,因為該數據僅被檢索一次,然后可以根據需要進行多次精加工,然后再次保存。 使用完數據后,只需刪除它( delete ourData; )。

否則, 如果只調用一次doSomething()函數,那么最好的解決方案是在函數本身內部獲取數據 ,因為該數據僅在該函數運行時才存在,並且會自動從該函數中刪除。函數結束后將其存儲在內存中,因此最好的方法是:

function doSomething() {
    var ourData = JSON.parse(localStorage.getItem('ourData'));
    ourData = processingBackAndForth(ourData);

    localStorage.setItem('ourData', JSON.stringify(ourData));
    syncWithServer(ourData);
}

TL; DR,您有兩種選擇:

  1. 如果多次使用doSomething()函數,最好先全局保存數據,然后在完成后將其刪除。
  2. 如果只使用一次 doSomething()函數,則最好使用var關鍵字在函數內部檢索數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM