Download - 20121024 phpstudy
![Page 1: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/1.jpg)
Asset Filter とDispatcher Filters
2012.10.24 (Wed)橋口 誠 a.k.a. gusagi
![Page 2: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/2.jpg)
自己紹介
![Page 3: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/3.jpg)
@gusagi
menue 株式会社 所属• ケータイ / スマートフォンサイトとか作ってます
• 最近は社内勉強会なども色々やってます
『パーフェクト PHP 』書きました 以前は PHP 勉強会 @ 東京の幹事やってました
![Page 4: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/4.jpg)
今日のお題は
![Page 5: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/5.jpg)
Asset Filter&
Dispatcher Filters
![Page 6: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/6.jpg)
はじめに
Asset Filter
Dispatcher Filters
まとめ
アジェンダ
![Page 7: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/7.jpg)
はじめに
![Page 8: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/8.jpg)
Asset ?
「資産」「財産」の意↓
css, js, 画像などを指す
![Page 9: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/9.jpg)
Web サービスではほぼ確実に利用される
![Page 10: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/10.jpg)
しっかり考えないとここが原因で
画面表示に時間が掛かることも
![Page 11: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/11.jpg)
こんな場合に遅くなることも css, js, 画像などもプログラム経由で出力
している 更新が滅多に行われないのにキャッシュが
使われない 不要な記述でファイルサイズが大きくなっ
ている ファイル取得に大量のリクエストを送って
いる
![Page 12: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/12.jpg)
今日の発表内容は
![Page 13: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/13.jpg)
やりたかったことをCakePHP では
どうやって実現したか
![Page 14: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/14.jpg)
「やりたかったこと」=
「レスポンス速度向上」
![Page 15: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/15.jpg)
Web サービス開発で避けては通れない部分
![Page 16: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/16.jpg)
Asset Filter
![Page 17: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/17.jpg)
css, js ファイルの出力フィルタ
![Page 18: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/18.jpg)
こんなときに便利
css, js を gzip 圧縮 304 Not Modified の制御 css, js 内の文字列置換 複数ファイルの一括出力
![Page 19: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/19.jpg)
利用するためには
app/Config/core.php でフィルタを設定
![Page 20: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/20.jpg)
app/Config/core.php
Configure::write(
'Asset.filter.css‘,‘asset.php‘);Configure::write(
'Asset.filter.js‘,‘asset.php‘);
![Page 21: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/21.jpg)
設定すると
HtmlHelper::css(), HtmlHelper::js()
の出力 URL が変化
![Page 22: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/22.jpg)
css の URL
/css/example.css ↓
/ccss/example.css
![Page 23: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/23.jpg)
js の URL
/js/example.js↓
/cjs/example.js
![Page 24: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/24.jpg)
でも
![Page 25: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/25.jpg)
フィルタは自分で実装が必要
![Page 26: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/26.jpg)
ということで
![Page 27: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/27.jpg)
作ってみた
https://github.com/gusagi/WizApp/blob/develop/webroot/asset.php
![Page 28: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/28.jpg)
自分で作る場合
![Page 29: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/29.jpg)
使える変数変数名 値$url CakeRequest クラスのオブジェクト ->url
$response CakeResponse クラスのオブジェクト$filters Asset.filter で設定した内容(配列型)$isCss リクエストファイルが css かどうか( boolean )$isJs リクエストファイルが js かどうか( boolean )
![Page 30: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/30.jpg)
Asset Filter で出力する場合
最後に exit を忘れずに!
![Page 31: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/31.jpg)
でも
![Page 32: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/32.jpg)
Asset Filter だとcss, js しか使えない
![Page 33: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/33.jpg)
そんなときは
![Page 34: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/34.jpg)
CakePHP 2.2 で実装された
Dispatcher Filters を利用
![Page 35: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/35.jpg)
Dispatcher Filters
![Page 36: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/36.jpg)
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
![Page 37: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/37.jpg)
AssetDispatcher を拡張したフィルタならコアコードを変更せず
挙動を変えることが可能
![Page 38: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/38.jpg)
こんなときに便利
CakePHP が出力するレスポンスヘッダを改ざん
デフォルト以外の Content-Type を追加
![Page 39: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/39.jpg)
利用するためには
app/Config/bootstrap.php で
フィルタを設定
![Page 40: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/40.jpg)
app/Config/bootstrap.php
Configure::write('Dispatcher.filters', array(
‘AssetDispatcherEx',‘CacheDispatcher’
));
![Page 41: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/41.jpg)
作ってみた
https://github.com/gusagi/WizApp/blob/develop/Routing/Filter/AssetDispatcherEx.php
![Page 42: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/42.jpg)
まとめ
![Page 43: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/43.jpg)
まとめ
css, js の出力に手を加えたいなら Asset Filter
css, js 以外の出力に手を加えたいなら Dispatcher Filters
![Page 44: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/44.jpg)
まとめ
フィルタを使ってコアコードに手を加えずにCakePHP を更に美味しく
![Page 45: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/45.jpg)
質問?
![Page 46: 20121024 phpstudy](https://reader036.vdocuments.mx/reader036/viewer/2022070316/556153d5d8b42adb6b8b547e/html5/thumbnails/46.jpg)
以上、ご清聴ありがとうございました