20121024 phpstudy

Post on 24-May-2015

1.388 Views

Category:

Lifestyle

2 Downloads

Preview:

Click to see full reader

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 を更に美味しく

質問?

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

top related