PHP Matsuri JIREI NIGHT お知らせメール

Post on 15-Jan-2015

12043 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

PHP MatsuriのJIREI NIGHTの発表資料です。CakePHPで作った"お知らせメール ( http://www.oshirase-mail.jp )"の発表です。CakePHPのキャッシュやシェル機能の活用事例を載せてあります。

Transcript

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日金曜日

1-byte.jp http://1-byte.jp/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日金曜日

top related