5分で詰め込む フロントエンド最適化

32
最最最最最最最最最最最最最最最最最最

Upload: shohei-tai

Post on 15-Apr-2017

2.846 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 5分で詰め込む フロントエンド最適化

最適化はここまでしないと気が済まない

Page 2: 5分で詰め込む フロントエンド最適化

5分で詰め込むフロントエンド最適化手法

泰昌平 (@stai0823)

Page 3: 5分で詰め込む フロントエンド最適化

自己紹介 泰 昌平

ファンチーム株式会社 Web エンジニアダーツとバイクが好き最近は CakePHP と Phalcon をやっていますフロントの javascript が大好物

Page 4: 5分で詰め込む フロントエンド最適化

今日はフロントエンドを高速化するテクニックについてお話しします。

Page 5: 5分で詰め込む フロントエンド最適化

どうしてフロントエンド?

Page 6: 5分で詰め込む フロントエンド最適化

・サーバのスペックを上げる・高速な言語に変える・高速なフレームワークに変える

高速化する方法はいくらでもある。

Page 7: 5分で詰め込む フロントエンド最適化

案件や環境に依存してしまう!

Page 8: 5分で詰め込む フロントエンド最適化

1.バックエンドの最適化よりも 高速化が期待できる

2.比較的少ない工数で高速化が図れる3.モバイルでの表示速度を大幅に改善できる

フロントエンドの最適化を知っていると

Page 9: 5分で詰め込む フロントエンド最適化

実際にやった事を紹介していきます

Page 10: 5分で詰め込む フロントエンド最適化

・ HTML 5を使用する・省略可能タグは必ず省略・ minify する・レンダリングブロックの回避・リクエストの削減・ dns プリフェッチ機能・ gzip 圧縮・ CDN を利用する

具体的になにをやったか

Page 11: 5分で詰め込む フロントエンド最適化

・ HTML 5を使用する・省略可能タグは必ず省略・ minify する・レンダリングブロックの回避・リクエストの削減・ dns プリフェッチ機能・ gzip 圧縮・ CDN を利用する

具体的になにをやったか

_人人人人人人_ > 5 分の限界 <

 ̄ Y^Y^Y^Y^Y^Y^ ̄

Page 12: 5分で詰め込む フロントエンド最適化

HTML5でマークアップ

Page 13: 5分で詰め込む フロントエンド最適化

もはやド定番ですが、最適化の観点でいうと

・省略可能な属性が追加・以前よりもタグをシンプルに記述できる

HTML5でマークアップ ※ ここは軽く流していきます

Page 14: 5分で詰め込む フロントエンド最適化

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><script type="text/javascript"></script><link rel="stylesheet" type="text/css" href="style.css">

例えば・・

<!DOCTYPE html><script></script><link rel="stylesheet" href="style.css">

Page 15: 5分で詰め込む フロントエンド最適化

省略可能タグを徹底

Page 16: 5分で詰め込む フロントエンド最適化

<html>,</html>,<head>,</head>,<body>,</body>,</li>,</dt>,</dd>,</p>,</option>,</thead>,<tbody>,</tr>,</td>,</th> などなど。。

結構いっぱい省略できる

Page 17: 5分で詰め込む フロントエンド最適化

minify

Page 18: 5分で詰め込む フロントエンド最適化

・無駄なスペース・改行コード・コメントを全て消しておく→Google Closure Compiler→YUI Compressor・プラグイン・ライブラリも必ず minify されたものを使う・フレームワークなどを使用しているのであれば、 View出力の際に処理を加える

minifyをしよう

Page 19: 5分で詰め込む フロントエンド最適化

class AppHelper extends Helper {

public function afterLayout($layoutFile) { parent::afterLayout($layoutFile); if($this->_View) { //出力するソースのタブ・スペース・改行を削除する

$this->_View->output = str_replace(array("\n",  "\t", ' '), '', $this->_View->output); } }}

CakePHPの場合

Page 20: 5分で詰め込む フロントエンド最適化

リクエストを減らす

Page 21: 5分で詰め込む フロントエンド最適化

HTML にインラインで記述する!

JSや CSSへのリクエストを最小限に!

→HTML のファイルサイズが増大→ ソースが混在し、管理が難しくなる→ キャッシュが使えなくなる

Page 22: 5分で詰め込む フロントエンド最適化

・リクエストを減らす?・外部ファイル化してキャッシュする?

どっちがベスト?

Page 23: 5分で詰め込む フロントエンド最適化

疑問に思ったらteratail!

Page 24: 5分で詰め込む フロントエンド最適化

https://teratail.com/questions/15358

Page 25: 5分で詰め込む フロントエンド最適化

・外部ファイル化はキャッシュされるため速くなる

・ただし、初回はガッツリ読み込みに行くので遅くなる

Q.JS の外部ファイル化は本当に速い?

Page 26: 5分で詰め込む フロントエンド最適化

ベストアンサーに選ばれた回答

Page 27: 5分で詰め込む フロントエンド最適化

・一般的にはリクエストは少ないほうが良い・外部ファイル化はケースバイケース。→ 保守性を重視する場合は外部ファイル化→ アクセス数が多いサイトはインラインに記述する場合もある

ベストアンサー

Page 28: 5分で詰め込む フロントエンド最適化

dns-prefetchを使う

Page 29: 5分で詰め込む フロントエンド最適化

DNSプリフェッチ・ DNS の名前解決を事前に行うよう強制できる

・ HEAD タグの上部に prefetch 用のタグを埋め込む

・実質、外部のリソースを読みに行っている箇所全てに有効

Page 30: 5分で詰め込む フロントエンド最適化

<head> <meta charset=”UTF-8”> <!-- 出来る限り head の上部に配置する --> <link rel="dns-prefetch" href="//www.google-analytics.com"> <link rel="dns-prefetch" href="//www.googletagmanager.com"> <title>DNS プリフェッチ </title></head>

書き方

Page 31: 5分で詰め込む フロントエンド最適化

いかがでしたでしょうか

Page 32: 5分で詰め込む フロントエンド最適化

ご清聴ありがとうございました