Javascript数组性能崩溃,即使块较小

Javascript数组性能崩溃,即使块较小,javascript,arrays,Javascript,Arrays,给定的是一个很大(但不是很大)的字符串数组(数字为1000-5000个单个字符串)。我想对这些字符串执行一些计算和其他操作。因为它在处理一个大数组时总是停止工作,所以我重写了我的函数,以递归方式获取较小的块(目前为50个元素)——我使用splice实现了这一点,因为我认为逐步减小大数组的大小是一个好主意 在实现了“chunk”版本之后,我现在能够计算多达2000个字符串元素(超过这个数字,我的笔记本电脑变得非常慢,过了一段时间就会崩溃) 问题是:为什么它仍然崩溃,即使我没有处理那个巨大的数组,只

给定的是一个很大(但不是很大)的字符串数组(数字为1000-5000个单个字符串)。我想对这些字符串执行一些计算和其他操作。因为它在处理一个大数组时总是停止工作,所以我重写了我的函数,以递归方式获取较小的块(目前为50个元素)——我使用splice实现了这一点,因为我认为逐步减小大数组的大小是一个好主意

在实现了“chunk”版本之后,我现在能够计算多达2000个字符串元素(超过这个数字,我的笔记本电脑变得非常慢,过了一段时间就会崩溃)

问题是:为什么它仍然崩溃,即使我没有处理那个巨大的数组,只是连续地处理小块

提前谢谢

var file = {some-array} // the array of lines
var portionSize = 50; // the size of the chunks

// this function is called recursively 
function convertStart(i) {
   var size = file.length;
   chunk = file.splice(0,portionSize);
   portionConvert(chunk,i);
}

// this function is used for calculating things with the strings
function portionConvert(chunk,istart) {
   for(var i=0;i<portionSize;i++) {
        // doing some string calculation with the smaller chunk here
   }
   istart += 1;
   convertStart(istart);    // recall the function with the next chunk
}
var file={some array}//行数组
变量portionSize=50;//块的大小
//这个函数是递归调用的
功能转换启动(一){
var size=file.length;
chunk=file.splice(0,portionSize);
portionConvert(块,i);
}
//此函数用于使用字符串计算内容
函数portionConvert(块,istart){

对于(var i=0;i,根据我的经验,您正在执行的递归量可能“超过堆栈,”除非你缩小输入值的范围,这就是为什么你可以用更少的资源做更多的事情。记住,对于每一次新的函数调用,调用站点上函数的状态都会保存在你的RAM中。如果你的计算机内存很小,它会被阻塞

如果您遇到处理问题,您应该切换到循环版本。循环不会逐步保存函数的状态,只保存值。通常,我会将递归留给较小的工作,如处理树状/对象结构或解析表达式;在某些情况下,它需要处理“直观地深入”如果您只有一个长数组,我将使用forEach处理每个元素,forEach是一个方便的包装器中的for循环:

file.forEach(function(arrayElement) {
  //  doing some string calculation with the chunk (arrayElement) here
});

查看forEach此处:

谢谢您提供的信息!我将尝试使用循环版本实现快速测试。如果有帮助,请告诉我。我做了一些快速测试,帮助我发现递归本身不是主要问题。这是函数内部发生的计算。我删除了图形数据的部分处理了一个循环并将其置于递归函数之外。由于一次的数据量较大,循环更容易使系统崩溃。