68

I understand that doing something like

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

It is relatively very slow, as the browser does that in O(n) . Is there a faster way of doing so without installing new libraries?

1
  • 6
    Even if that would be true (that concatenation of strings is very slow), does your code depends on it so heavily that it even matters? Commented Dec 13, 2012 at 12:17

2 Answers 2

32

The question is already answered, however when I first saw it I thought of NodeJS Buffer. But it is way slower than the +, so it is likely that nothing can be faster than + in string concetanation.

Tested with the following code:

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.");

Output:

Normal took: 4 ms.
Buffer took: 458 ms.
Sign up to request clarification or add additional context in comments.

3 Comments

With that buffer, you're initializing a wrapper containing a string, then you're building a array from the 2 wrappers, having the concatenate function loop through the array, (And probably use + to concatenate the strings), and return it. I think that explains why the buffer is slow.
This test does not capture the intent to concatenate a high number of strings together in linear algorithmic time complexity.
You're creating two buffers each time inside the loop. It completely defeats the purpose of the test. You should use a single Buffer and repeatedly call write.
19

There is not really any other way in JavaScript to concatenate strings.
You could theoretically use .concat(), but that's way slower than just +

Libraries are more often than not slower than native JavaScript, especially on basic operations like string concatenation, or numerical operations.

Simply put: + is the fastest.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.