1

我需要像这样连接数百个 Javascript 字符串:

var result = '';
for (var i = 0; i < 300; i ++ ) {
    result += DATA[i] + 'Some Dynamic Text';
}

DATA[i]相当大(像 300KB 或更多,它的图像的 base64 表示)。

当我执行这段代码时,浏览器弹出内存溢出错误。(断点是result += DATA[i]

如何优化此代码以避免这种内存问题?

==== 编辑 ====
我之前没有说清楚,所以你可以认为DATA[i]它很大,我不能改变它。每个 concat 还附加一些动态文本。

4

3 回答 3

0

请看这里..这应该对你有帮助

Javascript 和非常长的字符串

另请查看 Javascript StringBuilder -

http://www.codeproject.com/Articles/12375/JavaScript-StringBuilder

于 2013-08-12T11:28:50.417 回答
0

您可以使用以下命令进行调试try {} catch

var result = '';
for (var i = 0; i < 300; i ++ ) {
    try {
      result += DATA[i];
    }
    catch ( e ) {
        console.log('An error occured on DATA[' + i + ']');
        console.log('Value:' + DATA[i]);
        console.log(e);
    }
}

为什么要将图像存储在base64中并将其发送到前端,因为您想离线存储它?这不是缓存控制的用途吗?

如果没有更多信息,我不能建议您使用这种方法:(

但是评估者会研究如何在图像本身上设置持久的缓存。


顺便说一句,您可以使用Array.joinifDATA是本机数组:

var result = DATA.join('');

如果是像对象 ( , )DATA这样的数组,您可以使用:arguments{'0': 1, '1': 2, length: 2}

var result = [].join.call(DATA, '');

这想解决你的内存溢出,但会更快。

于 2013-08-12T10:46:15.293 回答
-1

如果你使用

result = DATA.join("");
于 2013-08-12T10:38:32.780 回答