簡體   English   中英

由於數組大小,JavaScript用盡了主要瀏覽器的內存

[英]Javascript runs out of memory major browsers due to array size

我正在嘗試創建一個數組,它將是MAASSSIVVEE ...我讀過某個地方,javascript可以創建最多4.xx十億左右的數組。 我嘗試創建的數組可能在四千萬或更高。 我什至不知道從這里去哪里。 我將假定JS不是解決此問題的合適方法,但我想嘗試一下...它是針對客戶端的,如果有多個,我不希望為此而停頓我的服務器人們一次使用它。 另外,不要像我剛接觸JS和一般代碼那樣學習新的語言。

我可以在totalcombos函數中使用setTimeout(),0中斷嗎? 時間並不是真正的問題,我不介意是否花了幾分鍾來計算,但是現在它崩潰了。

我已經使用專用的工作人員嘗試了此操作,但仍然使主機崩潰。 工作者代碼就是我要發布的內容,因為宿主代碼與該問題無關(它僅編譯原始對象並將其發布,然后接收回消息)。

代碼 :(很抱歉,我正在編碼noob,只是一個發燒友)

onmessage = function(event){
//this has been tested on the very small sample size below, and still runs out of memory
//all the objects in these first arrays are formatted as follows.
// {"pid":"21939","name":"John Smith","position":"QB","salary":"9700","fppg":"23"}
// "PID" is unique to each object, everything else could appear in another object.
// There are no repeated objects.
var qbs = **group of 10 objects like above**
var rbs = **group of 10 objects like above**
var wrs = **group of 10 objects like above**
var tes = **group of 10 objects like above**
var ks = **group of 10 objects like above**
var ds = **group of 10 objects like above**

//This code works great and fast with small sets. ie (qbs, rbs, wrs)
function totalcombos() {
    var r = [], arg = arguments, max = arg.length-1;
    function helper(arr, i) {
        for (var j=0; j<arg[i].length; j++) {
            var a = arr.slice(0); // clone arr
            if(a.indexOf(arg[i][j]) != -1){
                j++;
            } else
                a.push(arg[i][j]);              
            if (i==max) {
                r.push(a);
            } else
                helper(a, i+1);
        }
    }
    helper([], 0);
    return r;
};
//WAY TOO BIG...commented out so as not to crash when run
//var tCom = totalcombos(qbs, rbs, wrs, tes, ks, ds);
//postMessage(tCom.length);
}

當集合變得更大(每個集合中有50個對象)時,它由於內存不足而崩潰。 我用其他代碼減少了集合,但它仍然很大。 我該如何解決? 我正在嘗試創建所有可能的組合,然后根據每個組的總薪水從中減少薪水。

在處理數據時,無論使用哪種語言或平台,通常最好的做法是僅加載數據,否則將遇到錯誤或瓶頸等。

如果您的數據存儲在數據庫,JSON文件,Web服務或API等之類的地方(基本上所有內容),則最好搜索該組數據以僅檢索所需的數據,或者至少減少您要遍歷的Array數據的大小。

打個比方,如果您試圖將整個Internet加載到只有2GB RAM的PC上的內存中,那將是一段非常糟糕的時光。 :)

暫無
暫無

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

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