斜め読み
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メソッドに引数渡さなかったら、配列のコピーが作れる。