ハイパフォーマンスJavaScript 1章〜6章
- 作者: Nicholas C. Zakas,水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/03/20
- メディア: 大型本
- 購入: 9人 クリック: 1,176回
- この商品を含むブログ (33件) を見る
for文にある初期化部の変数のスコープ
他の言語みたいにfor文に閉じてるのだとばかり思っていたら、関数内のスコープだとか。
function a() { for (var i = 10; false;) { } alert(i); // 10 }
てかパフォーマンスと関係ないことをこの本で知るってどうなの……
innerHTML v.s. createElement(), etc.
innerHTMLとcreateElement()などを使った場合とどちらが速いか。
新しめのWebKit以外はinnerHTMLの方が速いみたい。
for文の最適化
だいたい見かけるfor文の書き方は(最近はあんまり見ないかな?)
for (var i = 0; i < items.length; i++) { // code }
で、パフォーマンスを気にする人たち(なのかな?)が書くのは
for (var i = 0, len = items.length; i < len; i++) { // code }
こんな感じ。ちなみに自分もこれ。
で、これよりも速い
for (var i = items.length; i--;) { // code }
なんて書き方があるそうで。
まあ前からアクセスしても後ろからアクセスしても関係ないときとか、あとは配列に追加するときとか。
配列に追加するのは今までpush()を使ってたところはunshift()使えば同じになるかな。
でもこの書き方でないとものすごく遅い、ってわけじゃなかったら今まで通りに書くかなあ……
メモ化
メモ化って聞いたことあるけど、実際どういうことなのかわからなかったんですが、百聞は一見にしかずというか。
function getHoge() { if (getHoge.memoize) { return getHoge.memoize; } var a = heavyMethod(); getHoge.memoize = a; return a; }
こんな感じ……でいいのかな。
既に実行された結果を残しておいて、再度呼ばれた場合はそれを返すってことかな。
関数名.memoizeってのがギョッとするけど、まあJavaScriptらしいというか。