Top Banner
Powered by CakePHP - JIREI NIGHT - お知らせメールBy Takahiro Fujiwara 2010101日金曜日
36

PHP Matsuri JIREI NIGHT お知らせメール

Jan 15, 2015

Download

Technology

PHP MatsuriのJIREI NIGHTの発表資料です。
CakePHPで作った"お知らせメール ( http://www.oshirase-mail.jp )"の発表です。
CakePHPのキャッシュやシェル機能の活用事例を載せてあります。
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PHP Matsuri JIREI NIGHT お知らせメール

Powered by CakePHP

- JIREI NIGHT -“お知らせメール”

By Takahiro Fujiwara

2010年10月1日金曜日

Page 2: PHP Matsuri JIREI NIGHT お知らせメール

アジェンダ

お知らせメールとは

技術的課題と工夫

ページ表示速度の改善

メッセージの送信

バッチ・シェルの問題点

2010年10月1日金曜日

Page 3: PHP Matsuri JIREI NIGHT お知らせメール

Introduce MyselfTakahiro Fujiwara

@tfmagician

1-byte.jp

I’m interesting

2010年10月1日金曜日

Page 4: PHP Matsuri JIREI NIGHT お知らせメール

1-byte.jp http://1-byte.jp/2010年10月1日金曜日

Page 5: PHP Matsuri JIREI NIGHT お知らせメール

お知らせメールとはコンセプト

2010年10月1日金曜日

Page 6: PHP Matsuri JIREI NIGHT お知らせメール

お知らせメールとは

色々な情報を

新譜

書籍

テレビ番組

天気予報

2010年10月1日金曜日

Page 7: PHP Matsuri JIREI NIGHT お知らせメール

お知らせメールとは

あなたの好みから

ビートルズの新譜

村上春樹の新刊

バガボンドの新刊

天気は雨の日だけ

2010年10月1日金曜日

Page 8: PHP Matsuri JIREI NIGHT お知らせメール

お知らせメールとは

色々な場所へ

メール

ツイッター

カレンダー

RSS

2010年10月1日金曜日

Page 9: PHP Matsuri JIREI NIGHT お知らせメール

必要な情報だけあなたにお届けします。

2010年10月1日金曜日

Page 10: PHP Matsuri JIREI NIGHT お知らせメール

お知らせメール http://www.oshirase-mail.jp/2010年10月1日金曜日

Page 11: PHP Matsuri JIREI NIGHT お知らせメール

Live Demo

2010年10月1日金曜日

Page 12: PHP Matsuri JIREI NIGHT お知らせメール

技術的課題と工夫

ページ表示速度の改善

メッセージの送信

バッチ・シェルの問題点

2010年10月1日金曜日

Page 13: PHP Matsuri JIREI NIGHT お知らせメール

ページキャッシュ

課題

PHPは遅い

CakePHPはさらに遅い

2010年10月1日金曜日

Page 14: PHP Matsuri JIREI NIGHT お知らせメール

3種類のキャッシュを用意する

2010年10月1日金曜日

Page 15: PHP Matsuri JIREI NIGHT お知らせメール

ページキャッシュwebrootキャッシュ

webroot/*.html

tmpキャッシュ

tmp/cache/[domain]/*.html

ビューキャッシュ

$this->element(‘navi’, array(‘cache’ => array(‘key’ => ‘navi’, ‘time’ => ‘+1 hours’));

2010年10月1日金曜日

Page 16: PHP Matsuri JIREI NIGHT お知らせメール

2010年10月1日金曜日

Page 17: PHP Matsuri JIREI NIGHT お知らせメール

ページキャッシュ

キャッシュの作成

CakePHPのシェルを活用

シェル内でDispacherクラスを使用

擬似的にCakePHPにアクセスする

URL一覧はRouterクラスから取得

2010年10月1日金曜日

Page 18: PHP Matsuri JIREI NIGHT お知らせメール

ページキャッシュ

キャッシュの削除

同様にCakePHPのシェルを活用

webrootとtmp/cache以下の*.htmlを全て削除

キャッシュの再作成

キャッシュの削除/作成をcronに設定

2010年10月1日金曜日

Page 19: PHP Matsuri JIREI NIGHT お知らせメール

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

Page 20: PHP Matsuri JIREI NIGHT お知らせメール

補足:

webrootキャッシュ機能は作らなくても大丈夫

2010年10月1日金曜日

Page 21: PHP Matsuri JIREI NIGHT お知らせメール

ページキャッシュ

webrootキャッシュのプラグイン

Matt Curry’s HTML Cache

http://github.com/mcurry/html_cache

使ったことがないので、紹介だけ

2010年10月1日金曜日

Page 22: PHP Matsuri JIREI NIGHT お知らせメール

メッセージの送信

課題

情報の配信先が多い

今後、拡張する必要がある

アクセスの度にメッセージを作成すると遅い

2010年10月1日金曜日

Page 23: PHP Matsuri JIREI NIGHT お知らせメール

メッセージ作成をフレームワーク化 & キャッシュする

2010年10月1日金曜日

Page 24: PHP Matsuri JIREI NIGHT お知らせメール

2010年10月1日金曜日

Page 25: PHP Matsuri JIREI NIGHT お知らせメール

メッセージの送信

メッセージクラス

メッセージをキャッシュするモデル

MailMessage, TwitterMessage ...e.t.c

全てMessageModelクラスを継承

2010年10月1日金曜日

Page 26: PHP Matsuri JIREI NIGHT お知らせメール

メッセージの送信

メッセージ作成クラス

メッセージのテキストを作成するクラス

TwitterComponent, EmailComponent ...e.t.c

独自処理はコンポーネントで解決

メール絵文字の処理, 文字エンコード ...e.t.c

2010年10月1日金曜日

Page 27: PHP Matsuri JIREI NIGHT お知らせメール

メッセージの送信

拡張するときは

1. メッセージのテーブルとモデルを作成

2. (メッセージ作成コンポーネントを作成)

3. テンプレートを作成

4. 送信/参照用のシェル/コントローラを作成

2010年10月1日金曜日

Page 28: PHP Matsuri JIREI NIGHT お知らせメール

バッチ・シェル

課題

SQLのリクエストが多い

CakePHPでデフォルトで使用されているSQLキャッシュがコンフリクトする

2010年10月1日金曜日

Page 29: PHP Matsuri JIREI NIGHT お知らせメール

シェル実行時のみSQLキャッシュをオフにする

2010年10月1日金曜日

Page 30: PHP Matsuri JIREI NIGHT お知らせメール

バッチ・シェル

SQLキャッシュとは

conditionsパラメータから作成したSQLのWHEREをキャッシュ

DboDatasource::cacheMethodsで制御可能

コンフリクトすると

身に覚えのないSQLが発行され、エラーが発生

2010年10月1日金曜日

Page 31: PHP Matsuri JIREI NIGHT お知らせメール

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

Page 32: PHP Matsuri JIREI NIGHT お知らせメール

技術的課題とまとめ

ユーザの体感速度を上げるためには

あらゆるデータをキャッシュする

キャッシュしたときに

バッチ処理時間と開発の工数が上がる

予想外の問題が発生する

2010年10月1日金曜日

Page 33: PHP Matsuri JIREI NIGHT お知らせメール

2010年10月1日金曜日

Page 34: PHP Matsuri JIREI NIGHT お知らせメール

ご利用は計画的に。

2010年10月1日金曜日

Page 35: PHP Matsuri JIREI NIGHT お知らせメール

その他にやっていること

フルテキスト検索

CakePHP + MySQL Fulltext Search + MeCab

拡張性の高いお知らせリスト管理

1テーブル + JSON

メッセージキャッシュにおける絵文字対応

MySQL + 携帯絵文字

2010年10月1日金曜日

Page 36: PHP Matsuri JIREI NIGHT お知らせメール

質問をどうぞ。

2010年10月1日金曜日