我明白,做这样的事情连接字符串中的NodeJS/JavaScript的快速方法
var a = "hello";
a += " world";
这是相对很慢,因为浏览器的确,在O(n)
。如果没有安装新库,是否有更快的方法?
我明白,做这样的事情连接字符串中的NodeJS/JavaScript的快速方法
var a = "hello";
a += " world";
这是相对很慢,因为浏览器的确,在O(n)
。如果没有安装新库,是否有更快的方法?
这是已知最快的方式在JavaScript中将字符串连接在一起。
有关详细信息,请参阅:
Why is string concatenation faster than array join?
JavaScript: How to join/combine two arrays to concatenate into one array?
在我的测试中,字符串连接比nodejs v 0.12.2中的array.join快10倍(并且比util.format快100倍)http://edsykes.blogspot.de/2015/08/a-quick-comparison -of-speed-of.html –
JavaScript中没有任何其他方式来连接字符串。
理论上你就可以使用.concat()
,但这是way slower不仅仅是+
图书馆是更多的往往不是比本地JavaScript的速度较慢,尤其是在像字符串连接,或数值运算的基本操作。
简单地说:+
是最快的。
的问题已经回答了,但是当我第一次看到它,我以为缓冲的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.
用这个缓冲区,你正在初始化一个包含字符串的包装器,然后你从这两个包装器构建一个数组,并且使用连接函数循环数组,(可能使用'+ '连接字符串),并返回它。 我认为这解释了缓冲区缓慢的原因。 – Cerbrus
你问有关性能。看到这个比较'concat','+'和'join'的perf test - 简而言之,+运算符赢得了胜利。
即使这是真的(字符串连接非常缓慢),您的代码是否依赖于它以至于它甚至很重要? – WTK