20121024 phpstudy
TRANSCRIPT
Asset Filter とDispatcher Filters
2012.10.24 (Wed)橋口 誠 a.k.a. gusagi
自己紹介
@gusagi
menue 株式会社 所属• ケータイ / スマートフォンサイトとか作ってます
• 最近は社内勉強会なども色々やってます
『パーフェクト PHP 』書きました 以前は PHP 勉強会 @ 東京の幹事やってました
今日のお題は
Asset Filter&
Dispatcher Filters
はじめに
Asset Filter
Dispatcher Filters
まとめ
アジェンダ
はじめに
Asset ?
「資産」「財産」の意↓
css, js, 画像などを指す
Web サービスではほぼ確実に利用される
しっかり考えないとここが原因で
画面表示に時間が掛かることも
こんな場合に遅くなることも css, js, 画像などもプログラム経由で出力
している 更新が滅多に行われないのにキャッシュが
使われない 不要な記述でファイルサイズが大きくなっ
ている ファイル取得に大量のリクエストを送って
いる
今日の発表内容は
やりたかったことをCakePHP では
どうやって実現したか
「やりたかったこと」=
「レスポンス速度向上」
Web サービス開発で避けては通れない部分
Asset Filter
css, js ファイルの出力フィルタ
こんなときに便利
css, js を gzip 圧縮 304 Not Modified の制御 css, js 内の文字列置換 複数ファイルの一括出力
利用するためには
app/Config/core.php でフィルタを設定
app/Config/core.php
Configure::write(
'Asset.filter.css‘,‘asset.php‘);Configure::write(
'Asset.filter.js‘,‘asset.php‘);
設定すると
HtmlHelper::css(), HtmlHelper::js()
の出力 URL が変化
css の URL
/css/example.css ↓
/ccss/example.css
js の URL
/js/example.js↓
/cjs/example.js
でも
フィルタは自分で実装が必要
ということで
作ってみた
https://github.com/gusagi/WizApp/blob/develop/webroot/asset.php
自分で作る場合
使える変数変数名 値$url CakeRequest クラスのオブジェクト ->url
$response CakeResponse クラスのオブジェクト$filters Asset.filter で設定した内容(配列型)$isCss リクエストファイルが css かどうか( boolean )$isJs リクエストファイルが js かどうか( boolean )
Asset Filter で出力する場合
最後に exit を忘れずに!
でも
Asset Filter だとcss, js しか使えない
そんなときは
CakePHP 2.2 で実装された
Dispatcher Filters を利用
Dispatcher Filters
Dispatcher Filters Dispatcher クラスからフィルタ部分を分
離 app/Config/bootstrap.php で設定 CakePHP 本体では 2 つのフィルタを用意
• AssetDispather lib/Cake/Routing/Filter/AssetDispatcher.php
• CacheDispatcher lib/Cake/Routing/Filter/CacheDispatcher.php
http://book.cakephp.org/2.0/en/development/dispatch-filters.htmlhttp://api.cakephp.org/class/dispatcher-filter
AssetDispatcher を拡張したフィルタならコアコードを変更せず
挙動を変えることが可能
こんなときに便利
CakePHP が出力するレスポンスヘッダを改ざん
デフォルト以外の Content-Type を追加
利用するためには
app/Config/bootstrap.php で
フィルタを設定
app/Config/bootstrap.php
Configure::write('Dispatcher.filters', array(
‘AssetDispatcherEx',‘CacheDispatcher’
));
作ってみた
https://github.com/gusagi/WizApp/blob/develop/Routing/Filter/AssetDispatcherEx.php
まとめ
まとめ
css, js の出力に手を加えたいなら Asset Filter
css, js 以外の出力に手を加えたいなら Dispatcher Filters
まとめ
フィルタを使ってコアコードに手を加えずにCakePHP を更に美味しく
質問?
以上、ご清聴ありがとうございました