在nodeJS / JavaScript中连接字符串的快速方法[重复]
Posted
技术标签:
【中文标题】在nodeJS / JavaScript中连接字符串的快速方法[重复]【英文标题】:Fast way to concatenate strings in nodeJS/JavaScript [duplicate] 【发布时间】:2012-12-01 07:47:57 【问题描述】:我知道做类似的事情
var a = "hello";
a += " world";
它相对来说非常慢,就像浏览器在 O(n)
中那样。在不安装新库的情况下,有没有更快的方法?
【问题讨论】:
即使这是真的(字符串连接非常慢),您的代码是否严重依赖它以至于它甚至很重要? 【参考方案1】:在 javascript 中实际上没有任何其他方法可以连接字符串。
理论上你可以使用.concat()
,但那是way slower,而不仅仅是+
库通常比原生 JavaScript 慢,尤其是在字符串连接或数值运算等基本操作上。
简单地说:+
是最快的。
【讨论】:
【参考方案2】:这个问题已经有了答案,但是当我第一次看到它时,我想到了 NodeJS Buffer。但它比 + 慢得多,所以在字符串连接中没有什么比 + 更快的了。
使用以下代码测试:
function a()
var s = "hello";
var p = "world";
s = s + p;
return s;
function b()
var s = new Buffer("hello");
var p = new Buffer("world");
s = Buffer.concat([s,p]);
return s;
var times = 100000;
var t1 = new Date();
for( var i = 0; i < times; i++)
a();
var t2 = new Date();
console.log("Normal took: " + (t2-t1) + " ms.");
for ( var i = 0; i < times; i++)
b();
var t3 = new Date();
console.log("Buffer took: " + (t3-t2) + " ms.");
输出:
Normal took: 4 ms.
Buffer took: 458 ms.
【讨论】:
使用该缓冲区,您正在初始化一个包含字符串的包装器,然后您正在从 2 个包装器构建一个数组,让连接函数循环遍历该数组,(并且可能使用+
连接字符串),并返回它。我认为这解释了为什么缓冲区很慢。
此测试未捕获以线性算法时间复杂度将大量字符串连接在一起的意图。以上是关于在nodeJS / JavaScript中连接字符串的快速方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章