20121024 phpstudy

46
Asset Filter と Dispatcher Filters 2012.10.24 (Wed) とと と a.k.a. gusagi

Upload: gusagi

Post on 24-May-2015

1.387 views

Category:

Lifestyle


2 download

TRANSCRIPT

Page 1: 20121024 phpstudy

Asset Filter とDispatcher Filters

2012.10.24 (Wed)橋口 誠 a.k.a. gusagi

Page 2: 20121024 phpstudy

自己紹介

Page 3: 20121024 phpstudy

@gusagi

menue 株式会社 所属• ケータイ / スマートフォンサイトとか作ってます

• 最近は社内勉強会なども色々やってます

『パーフェクト PHP 』書きました 以前は PHP 勉強会 @ 東京の幹事やってました

Page 4: 20121024 phpstudy

今日のお題は

Page 5: 20121024 phpstudy

Asset Filter&

Dispatcher Filters

Page 6: 20121024 phpstudy

はじめに

Asset Filter

Dispatcher Filters

まとめ

アジェンダ

Page 7: 20121024 phpstudy

はじめに

Page 8: 20121024 phpstudy

Asset ?

「資産」「財産」の意↓

css, js, 画像などを指す

Page 9: 20121024 phpstudy

Web サービスではほぼ確実に利用される

Page 10: 20121024 phpstudy

しっかり考えないとここが原因で

画面表示に時間が掛かることも

Page 11: 20121024 phpstudy

こんな場合に遅くなることも css, js, 画像などもプログラム経由で出力

している 更新が滅多に行われないのにキャッシュが

使われない 不要な記述でファイルサイズが大きくなっ

ている ファイル取得に大量のリクエストを送って

いる

Page 12: 20121024 phpstudy

今日の発表内容は

Page 13: 20121024 phpstudy

やりたかったことをCakePHP では

どうやって実現したか

Page 14: 20121024 phpstudy

「やりたかったこと」=

「レスポンス速度向上」

Page 15: 20121024 phpstudy

Web サービス開発で避けては通れない部分

Page 16: 20121024 phpstudy

Asset Filter

Page 17: 20121024 phpstudy

css, js ファイルの出力フィルタ

Page 18: 20121024 phpstudy

こんなときに便利

css, js を gzip 圧縮 304 Not Modified の制御 css, js 内の文字列置換 複数ファイルの一括出力

Page 19: 20121024 phpstudy

利用するためには

app/Config/core.php でフィルタを設定

Page 20: 20121024 phpstudy

app/Config/core.php

Configure::write(

'Asset.filter.css‘,‘asset.php‘);Configure::write(

'Asset.filter.js‘,‘asset.php‘);

Page 21: 20121024 phpstudy

設定すると

HtmlHelper::css(), HtmlHelper::js()

の出力 URL が変化

Page 22: 20121024 phpstudy

css の URL

/css/example.css ↓

/ccss/example.css

Page 23: 20121024 phpstudy

js の URL

/js/example.js↓

/cjs/example.js

Page 24: 20121024 phpstudy

でも

Page 25: 20121024 phpstudy

フィルタは自分で実装が必要

Page 26: 20121024 phpstudy

ということで

Page 27: 20121024 phpstudy

作ってみた

https://github.com/gusagi/WizApp/blob/develop/webroot/asset.php

Page 28: 20121024 phpstudy

自分で作る場合

Page 29: 20121024 phpstudy

使える変数変数名 値$url CakeRequest クラスのオブジェクト ->url

$response CakeResponse クラスのオブジェクト$filters Asset.filter で設定した内容(配列型)$isCss リクエストファイルが css かどうか( boolean )$isJs リクエストファイルが js かどうか( boolean )

Page 30: 20121024 phpstudy

Asset Filter で出力する場合

最後に exit を忘れずに!

Page 31: 20121024 phpstudy

でも

Page 32: 20121024 phpstudy

Asset Filter だとcss, js しか使えない

Page 33: 20121024 phpstudy

そんなときは

Page 34: 20121024 phpstudy

CakePHP 2.2 で実装された

Dispatcher Filters を利用

Page 35: 20121024 phpstudy

Dispatcher Filters

Page 36: 20121024 phpstudy

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

AssetDispatcher を拡張したフィルタならコアコードを変更せず

挙動を変えることが可能

Page 38: 20121024 phpstudy

こんなときに便利

CakePHP が出力するレスポンスヘッダを改ざん

デフォルト以外の Content-Type を追加

Page 39: 20121024 phpstudy

利用するためには

app/Config/bootstrap.php で

フィルタを設定

Page 40: 20121024 phpstudy

app/Config/bootstrap.php

Configure::write('Dispatcher.filters', array(

‘AssetDispatcherEx',‘CacheDispatcher’

));

Page 41: 20121024 phpstudy

作ってみた

https://github.com/gusagi/WizApp/blob/develop/Routing/Filter/AssetDispatcherEx.php

Page 42: 20121024 phpstudy

まとめ

Page 43: 20121024 phpstudy

まとめ

css, js の出力に手を加えたいなら Asset Filter

css, js 以外の出力に手を加えたいなら Dispatcher Filters

Page 44: 20121024 phpstudy

まとめ

フィルタを使ってコアコードに手を加えずにCakePHP を更に美味しく

Page 45: 20121024 phpstudy

質問?

Page 46: 20121024 phpstudy

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