Upload
masaaki-komori
View
13.747
Download
0
Embed Size (px)
DESCRIPTION
Webサイト高速化勉強会@タネマキ用資料
Citation preview
We! Site Optimization fo" Begi#e$
2012.09.29. こもりまさあき
Webサイト高速化勉強会@タネマキ
今日のお品書き
•高速化をはじめる前に
•まずはサイトを検証しましょう
•検証結果から原因を見つけましょう
•何をすれば効果が高いか判断しましょう
•HTTPリクエストを減らすためにできること
•CDNを使ってみよう(AWS: CloudFront)
仕組みを知らなきゃ始まらない高速化
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
まずは、コンテンツ配信の仕組みをおさらい
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
アドレス解決、接続、リクエスト、レスポンス
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
1.接続先のドメインをIPアドレスに変換
2.そしてサーバに接続
3.サーバに欲しいファイルをリクエスト
4.サーバはそれにあわせてレスポンス
5.あとは、3と4の繰り返し
アドレス解決、接続、リクエスト、レスポンス
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
ここまでが仕組みのおさらい
計測、そして原因を突き詰める
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
接続からページが表示されるまでを視覚化
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
ツールやサービスを使ってみよう
1.ChromeやSafariのWebインスペクタ
2.FirefoxにFirebugをいれて
3.Webpage Test(http://webpagetest.org)
4.Pingdom Tools(http://tools.pingdom.com/fpt/)
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
では、ちょっと覗いてみましょう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
まず、どこに原因があるかを突き止める
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
いったい何が原因で遅くなっているのか?
1.DNSによる名前解決?
2.最初のHTMLが出てくるまでが遅い?
3.ページの構成要素がいつまでもダウンロードされてる?
4.外部のサービスで止まってるみたい?
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
心当たりはありませんか?
1.制作効率のためにCSSを分割してる
2.そういえば、JavaScriptもいっぱいだー
3.見た目の装飾のために画像も多いな…
4.ソーシャル系のボタンも貼付けてるわ
5.外部の広告とかサービスいっぱいだわ
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
アウト。
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
それぞれがこんな問題を引き起こす
1.ページのレイアウトがなかなかできない
2.リクエストが増えると次に進めない
3.画像が落ちてこなくてページが完成しない
4.途中で一瞬止まったような感じになる
5.反応が悪いと完全にとまることも…
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
にらめっこしましょ、アップップー
できる範囲で何をすれば効果が高いか判断
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
なにができるか、人によって異なります
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
HTMLのロードに時間がかかる場合
•DNSを反応の速いとこに変えてみる
•公開時のHTMLには、極力無駄な改行やコメントをいれない
•HTMLのデータサイズが大きいならGzip
•箱作りの元は早くダウンロードさせる
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CSS、JavaScriptにも目を向けましょう
•バラバラはよくないので極力まとめる
•ファイルから余分な改行やコメントを削除
•面倒くさいならGzipで圧縮する
•ロードする順番は、CSSが先、JavaScriptが後の方がベター
•変更が少ないならブラウザにキャッシュ
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CSSやJavaScriptのMinifyとか結合に
•ProCSSor http://procssor.com/
•excssive http://www.excssive.com/
•Closure Compiler Service http://closure-compiler.appspot.com/home
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
サーバ側でファイルに有効期限をつけるには
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType image/x-icon "access plus 1 years"
ExpiresByType image/vnd.microsoft.icon "access plus 1 years"
ExpiresByType image/jpeg "access plus 2 months"
ExpiresByType image/png "access plus 2 months"
ExpiresByType image/gif "access plus 2 months"
ExpiresByType text/css "access plus 1 years"
ExpiresByType text/javascript "access plus 1 years"
ExpiresByType application/x-javascript "access plus 1 years"
ExpiresByType text/html "access plus 600 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
※Apacheでmod_expiresが有効になっていないといけません
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
テキスト系のファイルをGzipで圧縮する
<IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding env=!dont-vary</IfModule>
※参考: WordPressサイト用の.htaccess例 | dogmap.jp http://dogmap.jp/2010/04/20/wordpress-htaccess/
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Apache 2.2.x系でmod_filterを使う場合<IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html FilterDeclare Compression CONTENT_SET FilterProvider Compression DEFLATE Content-Type $text/plain FilterProvider Compression DEFLATE Content-Type $text/html FilterProvider Compression DEFLATE Content-Type $text/xml FilterProvider Compression DEFLATE Content-Type $text/css FilterProvider Compression DEFLATE Content-Type $application/xhtml FilterProvider Compression DEFLATE Content-Type $application/xml FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml FilterProvider Compression DEFLATE Content-Type $application/rss+xml FilterProvider Compression DEFLATE Content-Type $application/atom+xml FilterProvider Compression DEFLATE Content-Type $application/x-javascript FilterProvider Compression DEFLATE Content-Type $application/x-httpd-php FilterProvider Compression DEFLATE Content-Type $image/svg+xml FilterChain Compression SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding env=!dont-vary</IfModule>
※参考: Apache 2.2 mod_filterを使いこなす http://www.onflow.jp/cyano/archives/137
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
外部サービスへの接続が含まれると、DNSの名前解決が必要になるので遅くなる
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
最近ではソーシャル系のボタンが人気
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
結構いろんなデータを拾いにいく
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
外部サービスのJavaScriptを非同期にする
•コードはできるだけ最新のものに置換
•jQueryとかはCDNから落とすとか
•jsDelivr http://www.jsdelivr.com/
•ソーシャル系のJSも非同期にする、もしくは必要時に読み込むようにする
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Facebook ©
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Webサイトが遅い原因は、HTTPリクエストが多すぎるから
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
減らしましょう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
いまどき、スマフォなどで見ることも多いし
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
そういえば、画像…
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
減らすに減らせない画像…
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
画像に対してもいろいろできる
•PhotoshopやFireworksで書き出し、それをさらにツールで最適化して軽量化
•Yahoo! Smush.it™ 、PunyPNG
•CSSスプライト、Data URIでリクエスト減
•有効期限を設定してブラウザにキャッシュ
•そもそもの配信するサーバを分割する
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
えー、面倒くさい
CDN(CloudFront)を使ってみよう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
確実に効果がでる良い方法がひとつ
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CDNを使いましょう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CDN?
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
コンテンツ・デリバリー・ネットワーク
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CDNってのはこんなもの
•高速にデータを配信する仕組み
•世界中に分散されたサーバにコンテンツデータを格納している
•で、距離的に近いところからクライアントに対してデータを送信する
•最近は安価に使えるサービスも増えている
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Amazon CloudFrontを使ってみよう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Amazon Cloud Front って?
1.世界中のエッジロケーションから配信
2.静的なものだけでなく、ストリーミングも
3.プライベートなファイルも配信可能に
4.設定も簡単、10分もあれば大丈夫
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
詳しくはこちらをご覧ください
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
Create Distribution をクリック
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
静的なファイルなら、Downloadで
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
元データのありかを指定しましょう
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
任意のドメイン名を割り当てることも可能
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
設定が大丈夫なら、Create Distribution
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
詳細はいつでも確認できますのでご安心を
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
ドメインを割り当てたら、CNAMEを登録する
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
これで準備完了。簡単。
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
配信元を Cloud Front 側に変更すればオッケイ
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
たとえば、こういうことです
<img src=”images/example.jpg”>
↓<img src=”http://example.cloudfront.net/images/example.jpg”>
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
あと何もしなくて良いから…
We! Site Optimization fo" Begi#e$
Wordサイト高速化勉強会@タネマキ 2012.09.29.: Komori, Masaaki
CDN、3Gとかに対しても効果抜群だと思う
まとめ
•HTTPリクエストを減らしましょう
•どうしても数を減らせないのなら、サイズを小さくする、配信元をわけるなど
•一番手っ取り早いのはCDNを使うこと