在JS中生成一个非常长的字符串(数十兆字节)的最有效方法

zwo*_*wol 19 javascript

我发现自己需要在JavaScript中合成一个可笑的长字符串(如数十兆字节长).(这是为了将CSS选择器匹配操作减慢到可测量的时间点.)

我发现这样做的最好方法是

var really_long_string = (new Array(10*1024*1024)).join("x");
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种更有效的方法 - 首先不涉及创建数十兆字节的数组.

ale*_*511 20

对于ES6:

'x'.repeat(10*1024*1024)
Run Code Online (Sandbox Code Playgroud)

  • 注意:我不会更改此问题已接受的答案,因为在我提出问题时,ES6 甚至不存在,因此这不是一种选择。很好地证明了为什么接受的答案不再固定在顶部是一件好事。 (2认同)

oli*_*ren 14

所接受的版本使用String.prototype.concat()大大慢比使用优化的串串联操作,+.MDN还建议不要在速度关键代码中使用它.

我已经制作了上述代码的三个版本来显示JsPerf中的速度差异.将其转换为仅使用concat仅仅是使用字符串连接运算符的速度的三分之一(Chrome - 您的里程会有所不同).下面编辑的版本在Chrome中运行速度是原来的两倍

var x = "1234567890";
var iterations = 14;
for (var i = 0; i < iterations; i++) {
  x += x+x;
}
Run Code Online (Sandbox Code Playgroud)