2012-12-13 89 views
47

我明白,做这样的事情连接字符串中的NodeJS/JavaScript的快速方法

var a = "hello"; 
a += " world"; 

这是相对很慢,因为浏览器的确,在O(n)。如果没有安装新库,是否有更快的方法?

+4

即使这是真的(字符串连接非常缓慢),您的代码是否依赖于它以至于它甚至很重要? – WTK

回答

8

JavaScript中没有任何其他方式来连接字符串。
理论上你就可以使用.concat(),但这是way slower不仅仅是+

图书馆是更多的往往不是比本地JavaScript的速度较慢,尤其是在像字符串连接,或数值运算的基本操作。

简单地说:+是最快的。

14

的问题已经回答了,但是当我第一次看到它,我以为缓冲的NodeJS的。但它的速度比+慢,所以在字符串猜测中没有什么比速度更快。

测试用下面的代码:

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. 
+1

用这个缓冲区,你正在初始化一个包含字符串的包装器,然后你从这两个包装器构建一个数组,并且使用连接函数循环数组,(可能使用'+ '连接字符串),并返回它。 我认为这解释了缓冲区缓慢的原因。 – Cerbrus

1

你问有关性能。看到这个比较'concat','+'和'join'的perf test - 简而言之,+运算符赢得了胜利。