[JavaScript] 文字列結合の速さ

2015年7月16日木曜日

JavaScript

どんな言語でもよく使う文字列結合。

+演算子を使って結合する方法と、配列に入れてからjoinする方法
どちらが速いのか実験してみました。
var n = 1000000
  , s = 'abc'
  , str = ''
  , arr = []
  , arr2 = []
  , i;

console.log('試行回数 :' + n);

console.time(' + ');
for (i = 0; i < n; i++) {
 // +演算子で文字列結合
  str += s;
}
console.timeEnd(' + ');

console.time(' join ');
for (i = 0; i < n; i++) {
  // 配列に追加(push)
  arr.push(s);
}
// 文字列化
arr.join('');
console.timeEnd(' join ');

console.time(' index ');
for (i = 0; i < n; i++) {
  // 配列に追加(index指定)
  arr[i] = s;
}
// 文字列化
arr.join('');
console.timeEnd(' index ');
結果
(n=1000000)の場合FireFox(38)Chrome(43)IE(11)
+演算子7~140ms80ms400ms
push/join30ms230ms450~500ms
index/join22ms40ms280ms

(n=10)の場合FireFox(38)Chrome(43)IE(11)
+演算子0.40ms0.10ms0.10~0.15ms
push/join0.30ms0.05ms0.10~0.15ms
index/join0.20ms0.03ms0.10ms

どの値も、実行するたびに上下しますが大体こんな感じでした。
この結果を見ると、joinを使ったほうが速そうです。
ただ、pushを使っているとブラウザによっては時間がかかるようなので
index指定を使ったほうが安心ですね。