2012/6/10 webのパフォーマンスを考える @...

30
Webのパフォーマンスを考える ~WordPressと付き合うために~ @ 【第三回】初心者向けホームページ勉強会 2012/6/10 こばやし たけし / @tama200x

Upload: tama200x-kobayashi

Post on 06-Dec-2014

1.481 views

Category:

Technology


6 download

DESCRIPTION

2012/6/10の勉強会で使用したスライドです。 2012/5/19の内容を一部更新したものになります。

TRANSCRIPT

Page 1: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

Webのパフォーマンスを考える

~WordPressと付き合うために~ @ 【第三回】初心者向けホームページ勉強会 2012/6/10

こばやし たけし / @tama200x

Page 2: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

プロフィール

こばやし たけし プログラマ-から、インフラエンジニア・ネットワークエンジニアを経て、現在はWeb部門・DTP部門のマネージャー

Twitter: tama200xFacebook: http://www.facebook.com/tama200x

Page 3: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

本日のテーマ

Webのフォーマンス改善  (WordPressのパフォーマンス改善も少しだけ...)

● パフォーマンスが悪い原因

● フォーマンスの改善方法

Page 4: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

性能改善...その前に

● サーバが原因?○ 安いレンタルサーバだから?○ 実はサーバが海外?

● WordPressが遅い?○ プラグインが原因?○ テーマが原因?

● それ以外に原因は?○ 回線が遅い?○ 実はPCが古くて遅い?

Page 5: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

原因はどこに?

サーバの性能不足

WPによる遅延

リクエスト数が多い

転送ファイルサイズが多い

ブラウザレンダリングが最適化されていない

Web DB

WP MySQL

Page 6: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

原因を調べるには

<ブラウザで調べる>

● Firebug (Firefox)● Chrome Developer Tools (Chrome)● Yslow (Firefox/Chrome)● PageSpeed (Firefox/Chrome)

<サービスで調べる>

● Pingdom Tools● GTmetrix etc

Page 7: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

原因を調べるには

DEMO

Page 8: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

ダウンロードの流れ①

PC

DNSサーバ

Webサーバ

1. DNSルックアップ

1. DNSルックアップホスト名からIPアドレスを検索

2. 接続Webサーバへ接続

3. 送信CookieやPOSTの内容を送信

4. 待機Webサーバ側の処理待ち

5. 受信サーバからデータを受信

2. 接続

3. 送信

5. 受信  

Page 9: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

ダウンロードの流れ②

Firebugのネットタブ 例:http://php-ninja.com/

Page 10: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

ダウンロードの流れ③

htmlstylesheetstylesheetstylesheet

scriptstylesheet

scriptscriptscriptscriptscript

stylesheetimageimageimageimageimageimageimagescript

image

300msec

http://php-ninja.com/   のウオーターフローの一部

ファイル読みだし完了4.25sec

HTMLファイルのダウンロード時間が全体のダウンロードに占める割合は約7%

複数ファイル同時にダウンロードされる● 1ホストあたり2 (RFC2616 8.1.4)● 1ホストあたり6 (主要なブラウザの

実装)

Page 11: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

解決策

サーバの性能改善

WP固有の対策

リクエスト数削減

転送ファイルサイズ削減

ブラウザレンダリングの最適化

Web DB

WP MySQLCDN/別サイト使用=リクエスト数/  転送ファイルサイズ         の削減

CDN/別サイト

Page 12: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法(フロントエンド)

● ブラウザレンダリングが最適化されていない

     → ブラウザレンダリング最適化● リクエスト数が多い

     → リクエスト数削減     → CDNや別サイト利用     → キャッシュの利用

● 転送ファイルサイズが多い     → 転送ファイルサイズの削減     → CDNや別サイト利用     → キャッシュ利用

● WPによる遅延     → WordPressプラグインによる改善

Page 13: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法(バックエンド)

● サーバの性能不足

     → サーバ側の改善

Page 14: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~ブラウザレンダリング最適化~

● CSSの記述位置は先頭

  → CSSファイルは同時ダウンロードされる  → プログレッシブレンダリング

● HEADタグ内でのJavaScriptの記述位置は最後に

    → レンダリングやダウンロードを止める● CSSの効率化

  → 不要なスタイルを書かない  → CSS記述方法を見直す

● 文字セットの指定● イメージサイズの指定

Page 15: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

● DNSルックアップの抑制

     → 応答時間の削減

● リダイレクトの抑制     → リクエスト数、応答時間の削減

● 誤りのあるリクエストの抑制(ステータスコード404等)

● CSSスプライトによる       画像リクエスト数削減 (後述)

● 重複するリソースを単一URLで提供     → キャッシュ/ステータスコード304を活用し        リクエスト数/転送ファイルを削減する

改善方法 ~リクエスト数削減~

Page 16: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

● 複数のイメージを一つのファイルに統合し、

各イメージをCSSのbackground-potitionで位置指定して表示する

● 画像のリクエスト数が大幅に削減できる

リクエスト数削減の例:CSSスプライト

http://k.yimg.jp/images/top/sp2/cmn/pic_all-120118.png

Page 17: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

クエスト数削減の例:リダイレクトの影響

htmlstylesheetstylesheetstylesheet

scriptimageimageimageimage

リクエスト数の増大

htmlstylesheetstylesheetstylesheet

scriptimage

redirectredirect

image

redirect

imageimage

転送にかかる時間が増大

Page 18: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~CDNや別サイト利用~

● ホスト毎の同時ダウンロード数上限○ yimg.jpの例

● CDNの利用

● 外部のjQuery、html5.jsを利用するメリット

        リクエスト数削減

jQuery https://ajax.googleapis.com/ajax/libs/jquery/x.x.x/jquery.min.js http://ajax.aspnetcdn.com/ajax/jQuery/jquery-x.x.x.min.js http://code.jquery.com/jquery-x.x.x.min.jsHTML5.js http://html5shiv.googlecode.com/svn/trunk/html5.js

Page 19: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

CDNとは

 大阪      東京         アメリカ西海岸

100ms~150ms10ms~20ms

CDN CDN CDNサーバ サーバサーバ

Page 20: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~転送ファイルサイズ削減~

● 画像ファイルサイズの最適化

○ Smush.It

● テキストファイルのminification(縮小)化

● gzipでファイルサイズを縮小○ mod_deflate (Apache 2.x)○ mod_gzip (Apache 1.x)

Page 21: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~ブラウザキャッシュ利用~

● キャッシュ設定

    → HTTP Cache-Control Header

○ metaタグ内の Expire属性

<meta http-equiv="expires" content="秒数またはGMT" />

○ header set Cache-Control (Apache)

● 有効期限設定

    → HTTP Expires Header

○ metaタグ内の Cache-Control属性

<meta http-equiv="Cache-Control" content="秒数またはGMT" />

○ ExpiresDefalut / ExpiresByType (Apache)

※ Cache-ControlのMax-ageが存在する場合、Expiresを上書きする

Page 22: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

ブラウザキャッシュ利用:キャッシュの流れ

ファイルが要求される ブラウザキャッシュに格納されている?

サーバからファイルを提供(200で応答)

ブラウザキャッシュからファイルを提供

Cache-Control/Expiresを評価

LastModufy/ETagを評価

Yes

No

期限内

サーバから304で応答

期限外/no-cache

※ Cache-ControlのMax-ageが存在する場合、Expiresを上書きする

サーバ側が新しい

同じか、ブラウザ側が新しい

Page 23: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

ブラウザキャッシュ利用:キャッシュ利用の効果

http://php-ninja.com/ (YSlow)

http://php-ninja.com/ (2回目)10リクエスト (+キャッシュから19リクエスト)16.1KB (+キャッシュから295.7KB)

http://php-ninja.com/ (初回)54リクエスト421.4KB

Page 24: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~WordPressプラグイン~

● プラグインの数を最小限にする● Head Cleaner

  → CSS/JSの再配置、統合に効果● WP Smush.It

  → 画像サイズ削減● キャッシュ系プラグイン

○ WP SuperCache○ W3 Total Cache○ Quick Cache○ DB Cache Reloaded Fix

Page 25: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

WordPressの404エラーについて

● 404.phpが存在しない場合には/index.php?error=404が呼び出される

● 404.phpの先頭部分に以下の記述が必要。    → 検索エンジンにコンテンツが                  存在しないことを通知(codex)<?php header("HTTP/1.1 404 Not Found"); ?>

● .htaccessにErrorDocumentを記述し静的ファイルを指定    → 404.phpよりもサーバ側の処理は少ない(codex)

Page 26: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~サーバ側の改善~

● Webサーバソフトウェアの入れ替え

○ nginx

● サーバ側キャッシュ

● php高速化

● MySQL高速化

Page 27: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

改善方法 ~その他~

● ソーシャル連携の課題

● モバイルへの対応

Page 28: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

まとめ

● 自分ができることから手をつける

● 簡単なところから手をつける

Page 29: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

参考書籍

ハイパフォーマンスwebサイト

WordPress高速化&スマート運用ガイド

続・ハイパフォーマンスwebサイト

Page 30: 2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会

参考資料

● Web Performance Best Practices - Make the Web Faster &mdash; Google

Developershttps://developers.google.com/speed/docs/best-practices/rules_intro

● 効率の良いcssを書くための7箇条 | Screw-Axishttp://screw-axis.com/2009/06/15/css-good-7-practices/

● Browserscope (ブラウザ毎の同時ダウンロード数)http://www.browserscope.org/?category=network