Upgrade to Pro — share decks privately, control downloads, hide ads and more …

フロントエンドパフォーマンス向上ルール

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 フロントエンドパフォーマンス向上ルール

社内勉強会の資料です。

Avatar for itosho

itosho

June 05, 2014
Tweet

More Decks by itosho

Other Decks in Programming

Transcript

  1. はじめに ▪Webサイト⾼高速化  /  パフォーマンス改善の重要性 【Aberdeen  Group  Report】 ・Amazonはページの反応が0.1秒遅くなると、売り上げが1%ダウンする。 ・Googleのページ反応が0.5秒遅くなると、アクセス数が20%ダウンする。 ・⼀一般的に表⽰示スピードが1秒遅くなると、

      PVは11%、コンバージョンは7%、顧客満⾜足度度は16%ダウンする。 【Jakob  Nielsen】   3つの重要限界   ・⼼心理理的・感情的な違和感を感じないのは0.1秒まで   ・思考の流流れが妨げられないのは1秒まで   ・注意⼒力力を維持する限界の時間は10秒まで
  2. ルール① ▪重複スクリプト&不不必要なリダイレクト撲滅 S R W 【基本】 ・重複ファイル(ロジック)をなくすことで、ファイルサイズ削減及び、   外部ファイルの読み込み回数を減らす。 ・また、不不必要なリダイレクトをなくことで、HTTPリクエスト回数を減らす。 【⽅方法】

    ・基本的にコードレビューを⾏行行うことを第⼀一とするが、   JSLint等の解析ツールの導⼊入やビルドプロセスの改善を検討する。 【効果】 ・重複を排除した分だけ⾼高速化が⾒見見込まれる。   特にリダイレクトに関しては、リダイレクト中は視覚的なフィードバックがないため、   リダイレクトをなくすことで、ユーザーの⼼心理理的な負担も減少する。 【発展】 ・末尾スラッシュが⽋欠けている際に発⽣生するリダイレクトも排除する。
  3. ▪JavaScriptを縮⼩小化する 【基本】 ・コードから不不要な⽂文字を除去することで、ファイルサイズを削減する。   ひいては、ダウンロード時間の短縮に繋がる。jquery.min.js等が有名。 【⽅方法】 ・縮⼩小化ツールを利利⽤用する。 例例)JSMin,  YUI  Compressor  

    【発展】 ・難読化については、バグのリスクや保守コストの増加が考えられるため、基本的には推奨しない。 ・CSSの縮⼩小化については、JavaScriptよりも効果が⼤大きくない。(コメントや空⽩白⽂文字が少ないため) 【効果】 ・20%〜~30%程度度の⾼高速化が⾒見見込まれる。 ルール② S R W
  4. ▪画像  /  CSS  /  JavaScriptを結合する 【基本】 ・画像、CSS、JavaScriptをそれぞれ1つ(ないしは最低限の数)のファイルにまとめる。   これにより、HTTPリクエストを減らすことが出来る。 【⽅方法】 ・画像…CSSスプライトを利利⽤用する。

    ・CSS  /  JavaScript…ひとつのファイルにまとめる。 【発展】 ・ファイルの結合については、ビルドプロセスを整備することも検討する。 【効果】 ・画像(CSSスプライト)…50%程度度の⾼高速化が⾒見見込まれる。 ・CSS  /  JavaScript(ファイル結合)…30%〜~40%程度度の⾼高速化⾒見見込まれる。 ルール③ S R W
  5. ▪CSSは先頭に置く 【基本】 ・CSSを先頭に置くことで、プログレッシブにレンダリングされる。   これにより、真っ⽩白な画⾯面が表⽰示されるの防⽌止し、描画されているという視覚的なフィードバックを、   与えることで、ユーザーのストレスを低減する。 【⽅方法】 ・CSSはlinkタグを使⽤用して、ドキュメントのheadタグ内に置く。 【発展】 ・@import規則は記述しない。 【効果】

    ・全てのダウンロードが完了了するのは、CSSを最後に置いたほうが早いが、   視覚的なフィードバックがあるため、体感速度度は先頭に置いたほうが早い。   ※最後にCSSを置くと、ブラウザはスタイルシートが変化した際にページ上の部品を再描画しなければいけないため、     レンダリングを停⽌止してしまう。 ルール⑤ S R W
  6. ▪JavaScriptは最後に置く 【基本】 ・JavaScriptを最後に置くことで、プログレッシブにレンダリングされる。 【⽅方法】 ・JavaScriptはドキュメントの最後に置く。   (document.writeが含まれているスクリプト等⼀一番下で指定するのが難しい場合は先頭に置く。) 【発展】 ・DEFER属性を指定する。 【効果】 ・プログレッシブにレンダリングされるため、体感速度度が早い。

      また、並列列ダウンロード可能なコンポーネント数が増えるため、読み込みの速度度が向上する。   ※ひとつのホスト名に対する並列列ダウンロード数は2がデフォルトであり、最適であることが多いが、     JavaScript読み込み時は並列列ダウンロードが中⽌止されてしまう。 S R W ルール⑥
  7. ▪CSSとJavaScriptは外部ファイル化する 【基本】 ・CSSとJavaScriptを外部ファイルにすることで、キャッシュさせることが出来る。 【⽅方法】 ・CSSとJavaScriptを外部ファイルにまとめる。(=インラインでHTMLドキュメントに記述しない) 【発展】 ・ホーム(インデックス)ページでは、インラインでCSSやJavaScriptを埋め込み、onloadイベントで ホームページが完全にロードされた後で、外部コンポーネントを動的にダウンロードすることで、インラ インと外部ファイルのキャッシュもメリットを享受させることも可能。 【効果】

    ・単純な⽐比較ではインラインの⽅方がHTTPリクエストによるオーバーヘッドがないため、⾼高速だが、   外部ファイル化することで、キャッシュを最⼤大限に活かすことが出来る。   (キャッシュされた状態でのページビューが多ければ多いほど有効)   ※全て外部ファイル化している⽅方が保守しやすいという副次効果もある。 S R W ルール⑦
  8. ▪分析ツール  /  参考⽂文献 【分析ツール】 ・YSlow(Chrome  /  Firefoxアドオン)…Webサイトパフォーマンス測定ツール ・Google  Developer  Console

     /  Firebug…Webアプリケーションデバッグツール 【参考⽂文献】 ・『ハイパフォーマンスWebサイト  ―⾼高速サイトを実現する14のルール』   (Steve  Souders  /オライリージャパン)   ・『ウェブ・ユーザビリティ―顧客を逃がさないサイトづくりの秘訣』   (Jakob  Nielsen  /  エムディエヌコーポレーション) おわりに