はじめに
サービスの速度改善のために先月読んだハイパフォーマンスWebサイトがとても良かったので、続の方も買って読んでいます。
そのまとめというかメモを。今回は第1章のメモです。
トレードオフ
- コードに手を加えるときはいつでも、バグの混入の危険性の代わりにコード改善の可能性を取っていることを忘れない
→最適化をするときは、実行にあまり時間がかからない部分を高速化しようとはせず、計測した上で、効果が得られないものには手を出さない
最適化の原則
- アルゴリズムがパフォーマンスに大きく影響
- もっとも時間がかかるのはループ部分
- 多重ループの一番内側のループを最適化すると大きな効果あり
- 「欠陥の3軸」という3つの線
- 非効率ライン:ユーザの集中力の低下
- プラスとレーションライン:ユーザが待たされていると感じる
- 欠陥ライン:フリーズしたように見え、ユーザがリロードしたり、離脱したりする
- これらを回避するためには
- ループ一回あたりの時間を減らす
- ループの回数を減らす
- 再設計のアルゴリズムを変える
- ループがネストしている場合は、上の2,3の回避方法しかない
→ループのコストがO(nlogn)やO(n^2)、それ以上の場合、n(=処理)が増えるにつれてかかる時間が大幅に増えるため、ループ一回あたりの時間を減らしても大した効果はない
Ajax
- サーバと(通常JSON形式の)データパケットをやり取りし、取得したデータをJavaScriptで書いたプログラムがブラウザの表示を更新する
→ 送受信するデータ量が大幅に減り、視覚的フィードバックを返す時間を大幅に減らすが、実装するコストがかかる - Ajaxアプリケーションは2つのシステムに完全に分離されている
- Ajax技術を性能向上に生かすには、適切な「分業」が不可欠で、パケットは限りなく小さくする
→ 必要なときに必要な分のデータを送信することで、ブラウザ側の処理を抑え、ループの実行が速くなる - すべてのデータをブラウザに送信するのは間違い
→ ・Ajax化によって回避したはずの応答に遅延がまた出る
・ブラウザが処理するデータが増えるため、パフォーマンスの低下に繋がる - Ajax技術をうまく使えば、アプリケーションの高速化ができる
→ポイントは、サーバとブラウザの間をとること
ブラウザとJavaScript
- ブラウザはJavaScriptの実行にはほとんど時間を使わない
→スクリプトの改善はせず、正しく分かりやすく書くべき - DOMに時間がかかる
※DOMとは、「Document Object Model」の略で、HTMLやXML文書を取り扱うためのAPIである。現在はすべてのブラウザがDOMを扱うことができる