String vs Array concat

JavaScript performance comparison

Revision 13 of this test case created

Info

A test case to see if concatenating an array instead of a string for an inflate library would perform better, based on this post: http://my.opera.com/emoller/blog/2011/05/01/javascript-performance

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var precompiled = 'apple';
    while (precompiled.length < 100) {
      var offs = precompiled.length - 5;
      for (var i = offs; i < offs + 10; ++i) {
        // calling charAt(i) on `precompiled` will
        // flatten the string in most engines
        precompiled += precompiled.charAt(i);
      }
    }
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
String
var dest = 'apple';
while (dest.length < 100) {
  var offs = dest.length - 5;
  for (var i = offs; i < offs + 10; i++) {
    dest += dest.charAt(i);
  }
}
pending…
String w/o flattening
var dest = 'apple';
while (dest.length < 100) {
  var offs = dest.length - 5;
  for (var i = offs; i < offs + 10; i++) {
    dest += precompiled.charAt(i);
  }
}
pending…
String w/o flattening by index (IE > 7)
var dest = 'apple';
while (dest.length < 100) {
  var offs = dest.length - 5;
  for (var i = offs; i < offs + 10; i++) {
    dest += precompiled[i];
  }
}
pending…
Array
var dest = ['a', 'p', 'p', 'l', 'e'];
while (dest.length < 100) {
  var offs = dest.length - 5;
  for (var i = offs; i < offs + 10; i++) {
    dest[dest.length] = dest[i];
  }
}
dest = dest.join('');
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment