小松健作、高橋登史朗、西畑一馬、古籏一浩 / MdN / 2,940円
Ken.Otsukaも書いているとおり、今日のWebサイト制作では、JavaScriptのスキルは必須になってきているかと思います。
そこで少し最適化を意識するということも必須になってきてるのでは?と思い、昔に読んだことはあるのですが、再度JavaScriptコーディング ベストプラクティス 高速かつ堅牢なコードを効率よく書くためにを読み直してみることにしました。
JavaScriptは文字列を括る時にダブルクォート(")とシングルクォート(')が使用可能です。
結構、MONSTERSの中では"のダブルクォートを使用する人が多いかと思いますが、シングルクォートを使った方がいいよ!ってことです。
理由としては、以下のケースではダブルクォートだとエスケープ処理が必要で、シングルクォートだとエスケープ処理の必要がありません。
例:
// ダブルクォート var _str = "\"hello world\""; console.log(_str); //output: "hello world" // シングルクォート var _str = '"hello world"'; console.log(_str); //output: "hello world"
見ての通り、シングルクォートの方が簡単に書けるかと思います。
これは開発の効率化でもあり、余計なバグを出すということを防げます。
実際のプロジェクトでは、DOMの中に文字列で生成したDOMをappendする時に使えますね。
最近のJavaScriptの書き方だと、prototypeを使用してクラスっぽい振る舞いをさせて(JSはObject指向的にちゃんとしたクラスではないので振る舞いという言葉で表現しました)、prototypeに追加したクラス変数やプロパティを作成して、親側からそのクラス変数などにアクセスしていますが、prototypeではなく単純なプロパティとして追加した場合、どちらが速いかを検証してくれています。
ベンチマークの結果としては、prototypeに追加するのではなく単純なプロパティに追加する方が、どのブラウザも処理が早いようです。
オブジェクト自身を動的にたどったりしないなら、後者のプロパティに追加した方がいいですね。
(なんでもかんでもprototypeを使うなって事っすな)
以外と気にしない点なのですが、論理演算子(if)もtrueとfalseで速度が違います。
結果としてはfalseの方が速いので以下の様な書き方が良いかと思います。
例:
var _bool = true; if(!_bool) { console.log('false'); } else { console.log('true'); } // 三項演算子 !_bool ? console.log('false'); : console.log('true');
これもなるべく使うように心がけるだけで最適化につながります。
少ないですが、個人的に参考になった箇所を紹介しました。まだまだ本書には様々な最適化の方法などが記載されています。
自分でベンチマークを計る関数を書いてもいいんですが、この本に載ってることは試す必要がないので、時間の短縮になります。
また、使用されているベンチマークを計るクラスが記載されているので、自分で「この処理って速いっけ?」と思ったら試すのもアリな気がします。