以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

斜め読み

Speed up your JavaScript, Part 1

NCZOnlineの連載1つめ。
ループの変わりに、setTimeoutを使って、パフォーマンスアップできるよ、という話。

function chunk(array, process, context){
    setTimeout(function(){
        var item = array.shift();
        process.call(context, item);

        if (array.length > 0){
            setTimeout(arguments.callee, 100);
        }
    }, 100);
}

以下斜め読んだ内容

  • jsが遅くなるときチェックすべきポイントは4つ
    • ループで色々実行させてないか?
      • この記事はこの問題へのTIPS
    • 関数内で実行されてることが多すぎないか?
    • 再帰が多すぎないか
    • DOMの操作が多すぎないか?
  • ループが重くなるときに自問すべきこと2つ
    • このループの処理は同期的に処理しないといけないか?
    • ループで処理されるデータの順序とループとその直後の順序は設計上必要か?
    • 二つとも「No」なら、高速化のために使えるtipsがある。
  • ループの変わりに、setTimeoutを使って再帰にする。
    • 繰り返しのペースは調整可能。サンプルコードでは0.1秒ごと。
    • 再帰に渡す配列を保存しておきたい場合は、配列のコピーをとって実行することもできる

以下思ったこと。

  • ノードリストのループの場合は?
    • このテクニックは、pushとかconcatとか配列のメソッドが必要
    • このテクニックは配列にしか使えない。
    • ノードリストは配列じゃないのでこのテクニックは使えない。
  • 本筋と関係ない所で勉強になったとこ
    • 無名関数で再帰するときに、arguments.calleeで無名関数自身を呼び出せること
    • callの使い方が曖昧だったのをクリアにできた
    • concatメソッドに引数渡さなかったら、配列のコピーが作れる。