由于数组大小,Javascript的内存主流浏览器用完了

时间:2015-01-03 13:56:36

标签: javascript arrays loops memory

我正在尝试创建一个数组,这将是MAASSSIVVEE ...我读到某个地方,javascript可以创建一个高达4.xx亿左右的数组。我试图创建的数组可能会达到数十亿或更高。我甚至不知道从哪里开始。我将假设JS不是这个的正确解决方案,但我想尝试一下......它是为了客户端,如果有多个我宁愿不用我的服务器人们一次使用它。此外,我不想学习一门新语言,因为我刚刚进入JS和一般的代码。

我可以在setTimeout(),0函数中使用totalcombos个中断吗?时间不是真正的问题,我不介意花费几分钟来计算,但现在它只是崩溃了。

我使用专门的工作人员尝试了这个,但它仍然使主机崩溃。工作人员代码是我发布的,因为主机代码与此问题无关(它只编译原始对象并发布它们,然后收回消息)。

代码 :(对不起......我编码菜鸟和只是一个发烧友)

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个对象一样大时,它会因为内存不足而崩溃。我用其他代码减少了集合,但它仍然非常大。我该如何解决? 我正在尝试创建所有可能的组合,然后根据每个组的总薪水从那里开始减少。

1 个答案:

答案 0 :(得分:0)

在处理数据时,无论使用何种语言或平台,通常最佳做法是仅加载您遇到的错误或瓶颈等数据。

如果您的数据存储在某个地方,如数据库,JSON文件,Web服务或API等(基本上是什么),您最好搜索该组数据以仅检索您需要的数据,或者至少减少你试图遍历的数组数据的大小。

作为类比,如果你试图在只有2GB内存的PC上将整个互联网加载到内存中,那么你将会遇到非常糟糕的时间。 :)