String concatenation (v11)

Revision 11 of this benchmark created by Juan Mendes on


Description

Testing string concatenation methods in straight code and abstracted in a StringBuilder. Using random strings as each of the strings to be concatenated

Preparation HTML

<script>
console.log('setup');
var ITERATIONS = 100; 
var STRINGS = [];
// So that there is already a reference to each of the strings created
// during concatenation
var BUFFERED_STRINGS = [];


// Add random strings
for (var i=0; i < ITERATIONS; i++) {
    STRINGS.push(Math.random().toString(36).slice(-15));
    if (i == 0) {
        BUFFERED_STRINGS.push(STRINGS[i]);
    }  else {
        BUFFERED_STRINGS.push(BUFFERED_STRINGS[i-1] + STRINGS[i]);
    } 
}

console.log(BUFFERED_STRINGS);

function StringBuilderConcat() {
  this._str = "";
}

StringBuilderConcat.prototype.append = function (str) {
    this._str += str;
}

StringBuilderConcat.prototype.toString = function () {
  return this._str;
}

function StringBuilderArrayPush() {
    this._array = [];
}

StringBuilderArrayPush.prototype.append = function (str) {
    this._array.push(str);
}

StringBuilderArrayPush.prototype.toString = function () {
  return this._array.join('');
}

function StringBuilderArrayIndex() {
  this._array = [];
  this._index = 0;
}

StringBuilderArrayIndex.prototype.append = function (str) {
    this._array[this._index] = str;
    this._index++;
}

StringBuilderArrayIndex.prototype.toString = function () {
  return this._array.join('');
}
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Array index - No Abstraction
var build = [];
for (var i=0; i < ITERATIONS; i ++) {
  build[i] = STRINGS[i];
}
var out = build.join('');
ready
Array push - No abstraction
var build = [];
for (var i=0; i < ITERATIONS; i ++) {
  build.push(STRINGS[i]);
}

var out = build.join('');
ready
Straight String Concat - No abstraction
var build = "";
for (var i=0; i < ITERATIONS; i ++) {
  build += STRINGS[i];
}
 
ready
StringBuilder - Array index
var builder = new StringBuilderArrayIndex();
for (var i=0; i < ITERATIONS; i ++) {
  builder.append(STRINGS[i]);
}
var out = builder.toString();
ready
StringBuilder - Array push
var builder = new StringBuilderArrayPush();
for (var i=0; i < ITERATIONS; i ++) {
  builder.append(STRINGS[i]);
}
var out = builder.toString();
ready
StringBuilder - string concat
var builder = new StringBuilderConcat();
for (var i=0; i < ITERATIONS; i ++) {
  builder.append(STRINGS[i]);
}
var out = builder.toString();
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.