• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHP framework Phalcon
 

PHP framework Phalcon

on

  • 8,407 views

2013/10/23 社内勉強会の資料

2013/10/23 社内勉強会の資料

Statistics

Views

Total Views
8,407
Views on SlideShare
7,351
Embed Views
1,056

Actions

Likes
7
Downloads
8
Comments
0

10 Embeds 1,056

http://doda.jp 487
http://trifort.jp 265
https://trifort.jp 154
http://cms.doda.jp 63
https://cms.doda.jp 38
https://twitter.com 25
http://tsukisamu.wordpress.com 18
http://s.deeeki.com 3
https://www.chatwork.com 2
https://doda.jp 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHP framework Phalcon PHP framework Phalcon Presentation Transcript

    • PHP Framework Phalcon 2013年10月23日(水) 林 正紀 @m_norii http://norii.hatenablog.com/
    • 自己紹介 • • • • • 2000- NSW (SIer) 2004- CYBIRD (ガラケー全盛期) 2008- Bit Shift 2011- WINLIGHT (モバグリ・ソシャゲ全盛期) 2013- Trifort • Live in Fujimino, Saitama • Like • Music, Live (especially Mr.Children, Ikimonogakari) • Swimming
    • Phalcon:特徴 • C拡張での実装→速い/資源効率良い • 豊富な機能と疎結合なクラス群 • 使用する機能の取捨選択ができる • EventManagerとDIコンテナを利用したメインフ ロー • 3種類の構成を選択可能 • Single Module • Multi Module • Micro Framework • ライセンスは New BSD License
    • 動作要件 • PHP5.3以上 • 一部機能はPHP5.4以降で使うとパフォーマンス 面で有利とのこと • PHP5.3系はすでにEOL迎えているので、新規案件で 適用するなら5.4/5.5系を利用すべき
    • リリース履歴 日時 Ver 履歴 2012-07-01 0.4 Memcacheによる結果セットのキャッシュ DBメタデータの永続化 PostgreSQLをサポート 正規表現によるルーティング、多言語対応、 仮想外部キー 2012-09-08 0.5.0 Event Manager/DIコンテナの導入 2012-10-31 0.6 MongoDBサポート 2013-03-20 1.0.0 Formビルダー、Validator 2013-07-08 1.2.0 ModelCriteria 機能強化 ORMで多対多関連サポート 2013-07-25 1.2.1 Config/Json、バグフィックス 2013-08-06 1.2.2 バグフィックス、最適化 2013-08-16 1.2.3 (Change log無し)
    • 導入事例 • RODEO という会社がソーシャルゲーム開発に 使っているらしい • PHPカンファレンス2013でのフレームワークディス カッション中の発表より • http://www.rodeo.jp.net/ • http://www.slideshare.net/dzeyelid/introductionphalconatphpcon
    • パフォーマンス比較 1 (秒間処理リクエスト数) 2535 851 354 489 541 568 860 1059 ・いわゆる「Hello World」アプリ ケーションでの比較 ・ベンチ環境 Mac OS X Lion 10.7.4 Apache2.2.22(mod_rewrite無効) PHP5.3.15 (APC有効) CPU: 2.04GHz Intel Core i5 Memory: 4GB
    • パフォーマンス比較2 (1リクエスト当たり処理時間 [ms]) 2.82 2.05 1.85 1.37 1.17 1.16 0.99 0.39
    • パフォーマンス比較3 (読み込みPHPファイル数) 66 46 46 30 27 23 18 4
    • パフォーマンス比較4 (1Req当たりメモリ使用量 [MB]) 1.75 1.50 1.50 1.25 1.25 1.10 1.00 0.75
    • 爆速なのはわかったが・・・ • 実際に本当に爆速になるか? ・・・は、作るアプリケーションの質にも大き く依る • 投げるSQLがイケてなくて足引っ張ってると か・・・ • PHP標準関数やクラス/Phalconで提供している機能 をわざわざ再実装してるとか・・・ • なので、Phalconの性能を出し切るようなプロ グラムを心がける必要がある
    • 機能一覧 ACL Events Security Annotations Filter Session CLI Flash ※ Tag Cache Forms Text Config Http Translate Crypt Kernel Validation DI Loader Version Db Logger Debug MVC Dispatcher Paginator Escaper Queue ※Flash はAdobe Flashではなく、複数リクエストをまたいでメッセージ を受け渡すもの
    • 機能一覧:MVC Application User/Component Controller User/Module Dispatcher User/Plugin Micro View Model View/Engine/PHP Url View/Engine/Volt
    • 機能:モデル(1) <?php $cards = Card::find();//全件取得 $card = Card::findFirst(5); // ID 5を1件取得 $cards = Card::query() ->where('element = :element:') ->bind(array('element' => 1)) ->order('rarity') ->execute(); // メソッドチェーンによる記法 //複数件帰ってくるメソッドの返値の型は「ResultSet」。Trabarsableなのでforeachで 繰り返し処理ができる foreach($cards as $card){ //do something } //この処理は、Phalconの内部ではDBのカーソルを利用して取得しているのでメモリ をあまり使わない
    • 機能:モデル(2)集約関数 <?php echo Card::count ();// SELECT count(*) echo Card::sum(attack); echo Card::average(defence); echo Card::maximum(rarity); echo Card::minimum(cost); ・その他、Insert/Update/DeleteはDoctrine(SymfonyのORマッパ)とだいた い同じ ・任意のSQLを投げる機能もあるので、ORマッパとしてのモデルは使わな いという選択もできる
    • 機能:Cache • 標準で選択可能なBackend • • • • • File Memcached APC Mongo Xcache • あれ、Redisは・・・(´・ω・`) • https://github.com/phalcon/incubator/blob/master/Libr ary/Phalcon/Cache/Backend/Redis.php
    • 機能:テンプレートエンジン (Volt) • Twigライクな記法、Smartyとはちょっと違う • エンジンは差し替え可能。Pure PHPも選べる • Adapter書けばSmartyにも対応できる • https://github.com/phalcon/incubator/blob/master/Libr ary/Phalcon/Mvc/View/Engine/Smarty.php • でも、テンプレートのParseってコスト高い処理なので、 そこをPHP実装のSmartyでやるのはPhalcon使う意味ある の?な感
    • 機能:テンプレートエンジン (Volt) サンプル コメント書式 {# app/views/products/show.volt #} {% block last_products %} 制御文書式 {% for product in products %} * Name: {{ product.name|e }} {% if product.status == "Active" %} Price: {{ product.price + product.taxes/100 }} {% endif %} {% endfor %} {% endblock %} 変数出力書式
    • EventManager • 「フレームワークがC実装だと、フレームワークの 挙動に関わる部分は全く手が入れられないの?」 • EventManagerを介して、フレームワークの各処理 ステージ中に処理を割りこませることができる • • • • • • • beforeDispatchLoop beforeDispatch beforeExecuteRoute initialize afterExecuteRoute beforeNotFoundAction など http://docs.phalconphp.com/en/latest/reference/dispatching .html • 上記以外、DB関連も細かいイベントが設定されていて、 Listenできる仕掛けになっている
    • Listenerクラスに通知 Controllerクラスに通知 EventManagerとEvent Bootstrap Routing BeforeDispatchLoopイベント BeforeDispatchイベント Dispatch BeforeExecuteRouteイベント Controller/Action AfterExecuteRouteイベント AfterDispatchイベント AfterDispatchLoopイベント Response
    • DIコンテナ/サービスロケータ • 複数クラスで使いまわすオブジェクトを管理 • 例:MVC内のRequest/Responseクラス • 動作環境に依存して処理を変える箇所を、外部 から注入することで、疎結合性、テスト可用性 を確保 • 実行環境用とUnitTest用Requestクラス • 開発/テスト/ステージ/商用環境 • http://docs.phalconphp.com/en/latest/reference/di.htm l
    • 3種類の構成 • Single-Module • FuelPHP、CodeIgniterのような 1プロジェクト1アプ リ構成 • Multi-Module • Zend、Symfonyのような1プロジェクト内に複数アプ リの構成 • Micro Framework • Silexのようなシンプルなアプリケーションを素早く 作るためのコンパクトなフレームワーク
    • Single-Module ディレクトリ構成 single/ app/ controllers/ models/ views/ public/ css/ img/ js/
    • Multi-Module ディレクトリ構成 multiple/ apps/ frontend/ controllers/ models/ views/ Module.php backend/ controllers/ models/ views/ Module.php public/ css/ img/ js/
    • Micro Framework ディレクトリ構成 my-rest-api/ models/ Robots.php index.php .htaccess index.php <?php $app = new PhalconMvcMicro(); $app->get('/api/robots', function() { //Do something }); $app->post('/api/robots', function() { //Do something }); $app->handle();
    • 課題 • 日本語の情報が少ない • 公式サイトも英語のみ • 内部で動作しているか詳細を調べるのが(PHP実 装のフレームワークと比して)難しい • Cソースは公開されているのでそれを読めばいいが • C実装なのでメモリ周りの問題も報告が見受け られる • https://github.com/phalcon/cphalcon/blob/master/CHA NGELOG • 開発自体はそれなりにアクティブなので、patch投 げれば修正してくれるかも
    • 雑感(設計周り) • フルスタックアプリケーションの構成は Zend Framework2に近い • コントローラ名/アクション名の規則やViewファイ ルの拡張子とか特に • マイクロアプリケーションの構成はSilexっぽい • ORマッパはDoctrineっぽい • テンプレートエンジン(Volt)はTwigっぽい • これらをいいとこどりしてCで実装したみたい なところか
    • 雑感(実装周り:1) • Webアプリに必要な機能はひととおり揃ってい る • 各種IDE用の補完用ファイルは有志が作ってる • デバッグ用機能がちょっと弱い? • Symfonyとかにあるデバッグツールバー欲しいよ ね? →「PHP Debug Bar」という汎用的なのがあるのでこ れと連携させれば。 http://phpdebugbar.com/ Phalconと連携させてる人もいた http://sankame.github.io/PHPDebugBar/2013/09/23/ph p_debug_bar_install/
    • 雑感(実装周り:2) • いわゆる「開発/テスト/ステージ/商用」環境 別のアプリケーション構築法がデフォルトでは 提供されていない • おそらくDIで外から注入せよという思想だと思われ るが、他Frameworkでもだいたいある機能なので、 最初の導入時にあってもいいのでは。 • 公式ドキュメントどおりに構築していくと、 index.phpの記述がカオスになりそう • ZendのようにBootstrapクラスをちゃんと作って、 index.phpは薄く保つのがいいのではないか。
    • 雑感(まとめ) • Zend/Symfonyの設計思想を受けている印象なの で、世間的に知られているパターンを適用した アプリケーション構築はしやすそう • DDD(Domain Driven Design) • PofEAA(Patern of Enterprise Application Architecture) • フレームワークの機能をフルに活かして、 KISS(Keep It Simple & Small) DRY(Don't Repeat Yourself) YAGNI(You Aren't Gonna Need It) なアプリケーションを構築すれば、 真に爆速なサービスを提供できる