Powered by CakePHP - JIREI NIGHT - “お知らせメール” By Takahiro Fujiwara 2010年10月1日金曜日
Jan 15, 2015
Powered by CakePHP
- JIREI NIGHT -“お知らせメール”
By Takahiro Fujiwara
2010年10月1日金曜日
アジェンダ
お知らせメールとは
技術的課題と工夫
ページ表示速度の改善
メッセージの送信
バッチ・シェルの問題点
2010年10月1日金曜日
Introduce MyselfTakahiro Fujiwara
@tfmagician
1-byte.jp
I’m interesting
2010年10月1日金曜日
お知らせメールとはコンセプト
2010年10月1日金曜日
お知らせメールとは
色々な情報を
新譜
書籍
テレビ番組
天気予報
2010年10月1日金曜日
お知らせメールとは
あなたの好みから
ビートルズの新譜
村上春樹の新刊
バガボンドの新刊
天気は雨の日だけ
2010年10月1日金曜日
お知らせメールとは
色々な場所へ
メール
ツイッター
カレンダー
RSS
2010年10月1日金曜日
必要な情報だけあなたにお届けします。
2010年10月1日金曜日
お知らせメール http://www.oshirase-mail.jp/2010年10月1日金曜日
Live Demo
2010年10月1日金曜日
技術的課題と工夫
ページ表示速度の改善
メッセージの送信
バッチ・シェルの問題点
2010年10月1日金曜日
ページキャッシュ
課題
PHPは遅い
CakePHPはさらに遅い
2010年10月1日金曜日
3種類のキャッシュを用意する
2010年10月1日金曜日
ページキャッシュwebrootキャッシュ
webroot/*.html
tmpキャッシュ
tmp/cache/[domain]/*.html
ビューキャッシュ
$this->element(‘navi’, array(‘cache’ => array(‘key’ => ‘navi’, ‘time’ => ‘+1 hours’));
2010年10月1日金曜日
2010年10月1日金曜日
ページキャッシュ
キャッシュの作成
CakePHPのシェルを活用
シェル内でDispacherクラスを使用
擬似的にCakePHPにアクセスする
URL一覧はRouterクラスから取得
2010年10月1日金曜日
ページキャッシュ
キャッシュの削除
同様にCakePHPのシェルを活用
webrootとtmp/cache以下の*.htmlを全て削除
キャッシュの再作成
キャッシュの削除/作成をcronに設定
2010年10月1日金曜日
0
500
1000
1500
2000
Requests per second [#/sec]
ページキャッシュwebroot tmp/cache/ CakePHP
Bench Mark
Apache Bench
-c 10 -m 100
Server
VMware +Ubuntu 9.10
1761.6
1142.7
14.1
x 124.9x 1.5
2010年10月1日金曜日
補足:
webrootキャッシュ機能は作らなくても大丈夫
2010年10月1日金曜日
ページキャッシュ
webrootキャッシュのプラグイン
Matt Curry’s HTML Cache
http://github.com/mcurry/html_cache
使ったことがないので、紹介だけ
2010年10月1日金曜日
メッセージの送信
課題
情報の配信先が多い
今後、拡張する必要がある
アクセスの度にメッセージを作成すると遅い
2010年10月1日金曜日
メッセージ作成をフレームワーク化 & キャッシュする
2010年10月1日金曜日
2010年10月1日金曜日
メッセージの送信
メッセージクラス
メッセージをキャッシュするモデル
MailMessage, TwitterMessage ...e.t.c
全てMessageModelクラスを継承
2010年10月1日金曜日
メッセージの送信
メッセージ作成クラス
メッセージのテキストを作成するクラス
TwitterComponent, EmailComponent ...e.t.c
独自処理はコンポーネントで解決
メール絵文字の処理, 文字エンコード ...e.t.c
2010年10月1日金曜日
メッセージの送信
拡張するときは
1. メッセージのテーブルとモデルを作成
2. (メッセージ作成コンポーネントを作成)
3. テンプレートを作成
4. 送信/参照用のシェル/コントローラを作成
2010年10月1日金曜日
バッチ・シェル
課題
SQLのリクエストが多い
CakePHPでデフォルトで使用されているSQLキャッシュがコンフリクトする
2010年10月1日金曜日
シェル実行時のみSQLキャッシュをオフにする
2010年10月1日金曜日
バッチ・シェル
SQLキャッシュとは
conditionsパラメータから作成したSQLのWHEREをキャッシュ
DboDatasource::cacheMethodsで制御可能
コンフリクトすると
身に覚えのないSQLが発行され、エラーが発生
2010年10月1日金曜日
class AppShell extends Shell {var $cacheMethods = false;function initialize () {
$db =& ConnectionManager::getDatasource(‘default’);
$db->cacheMethods = $this->cacheMethods;}
}
App::import(‘Shell’, ‘libs/AppShell’);class HogeHogeShell extends AppShell {}
2010年10月1日金曜日
技術的課題とまとめ
ユーザの体感速度を上げるためには
あらゆるデータをキャッシュする
キャッシュしたときに
バッチ処理時間と開発の工数が上がる
予想外の問題が発生する
2010年10月1日金曜日
2010年10月1日金曜日
ご利用は計画的に。
2010年10月1日金曜日
その他にやっていること
フルテキスト検索
CakePHP + MySQL Fulltext Search + MeCab
拡張性の高いお知らせリスト管理
1テーブル + JSON
メッセージキャッシュにおける絵文字対応
MySQL + 携帯絵文字
2010年10月1日金曜日
質問をどうぞ。
2010年10月1日金曜日