JavaScript覚書き、文字列の方が配列より速かった

Twitterに書いたけど、自分用の覚書としてもちゃんと残したいのでこっちにも書きます。

JavaScriptで盤面データを64文字の文字列で持つ方が、64個の配列データで持つより3割くらい速い(ChromeとFireFoxでテスト)

石を返す処理が、文字列のときはこう
function reverscharAt( board, pos, turn ){
newboard = board.slice( 0, pos )+turn+board.slice( pos+1 );
return( newboard );
}
(↑もっとうまい方法はないものか)

配列のときは、
newboard[pos] = turn;
みたいな感じだが、前者の方が速い。つまり、配列は文字列より遅い(ざっくり)

文字列のときに、関数をやめてベタ書きすると、処理の量が多いときに2%くらい速くなる。40秒に対して1秒以内。処理の量が少ないときは少し遅くる(5秒が6秒になるくらい)。

文字列の方が速いのは、別の所で盤面を丸ごとコピーしているからだと思う。

文字列の場合
newboard = board; (64文字、varないけど動いてる)

配列の場合
var newboard = board.slice(); (64個の配列)

文字列の場合は64バイトコピーだろうけど、配列の場合は不定ですね。1文字しか入れてないので64バイトコピーすることに変わりはないかも知れないけど、1文字ごとに配列の指す先はどこか…なんてやる。コピー元とコピー先でやる。それは遅くなりそうだ。

タイトルとURLをコピーしました