串联消耗大量内存。如果我们认为该字符占用〜2个字节,则结果代码行应占用约〜20 MB,但是当下面显示的代码工作时,该页面消耗约1GB。试图使用Join或执行操作s + ='q';在功能等方面,没有任何帮助。我该如何优化,例如在“ .net”中有一个StringBuilder?
var i = 0
var s = "q";
while (i <10000000) {
s + = 'q';
i ++;
}
P.S。
let str = Array (10000000) .fill (`g`) .join``;
或
'g'.repeat (10000000)
不合适,需要串联。
答案 0 :(得分:1)
您仍然可以使用join
-您不需要一次fill
一次创建整个数组:
var i = 0;
var a = [];
while (i <10000000) {
a[i] = 'q';
i++;
}
var s = a.join('');
这样,您可以将所需的任何字符(或较大的字符串)“连接”到数组的元素中,然后最后一次完成所有操作的结合。
答案 1 :(得分:0)
尝试向Web服务器发出Http请求,该服务器可以执行此操作,并且仅返回结果。我也会尝试使用网络工作者(新的浏览器支持它),但是我不确定内存消耗。但它不会使用UI线程。
然后我将使用setTimeout将此操作分解为一组较小的操作,例如制作100 100000个字符串,然后对其进行合并,而不是合并10000000个char字符串。