gpt4 book ai didi

即使 block 较小,Javascript 数组性能也会崩溃

转载 作者:行者123 更新时间:2023-12-02 15:16:30 26 4
gpt4 key购买 nike

给定的是一个大(但不是巨大)的字符串数组(数量为 1000-5000 个单个字符串)。我想对这些字符串执行一些计算和其他操作。因为在处理那个大数组时它总是停止工作,所以我重写了我的函数以递归地获取较小的 block (当前为 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
}

最佳答案

根据我的经验,除非您缩小输入值的范围,否则您所做的递归量可能会“超出堆栈”,这就是为什么您能够用更少的资源做更多的事情。请记住,对于每个新函数调用,调用站点的函数状态都会保存在 RAM 中。如果您的计算机内存很小,它就会被堵塞。

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

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

在这里查看 forEach:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

关于即使 block 较小,Javascript 数组性能也会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34433902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com