Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Yet another use of Phalcon - 非公式なPhalconの使い方

yuji
August 05, 2014

Yet another use of Phalcon - 非公式なPhalconの使い方

* 導⼊の経緯
* サーバ構成について
* 使いはじめて不不満だったこと
* ソニックムーブでPhalconを使うときの 標準的なアレコレ
- ディレクトリ構成
- PSR-0 準拠でシンプル化
- RoutingをYAMLで定義
- ServiceProviderを実装
* コントローラーで気をつけるべきこと
* モデルで気をつけるべきこと
* 502 Bad Gateway
* 学習コストについて
* 社内への普及について
* 社内向けスケルトンについて

yuji

August 05, 2014
Tweet

Other Decks in Programming

Transcript

  1. 導⼊入後 •  メモリに起因したパフォーマンス劣劣化は発⽣生し てない •  CPUがボトルネックになる(健全) –  もしくは外部リソースがボトルネック •  プロセスあたり30MBになった

    •  EC2: t1.micro/m1.small でもそこそこの性能 が出る、最近は t2 系に移⾏行行中 何よりフレームワークのパフォーマンス改善が必 要なくなった
  2. サーバ構成について App –  Nginx + php-fpm –  PHP v5.4 (Non

    APC) –  Phalcon v1.3.1 –  Memcached –  fluentd Worker –  Upstart –  start-stop-daemon DynamoDB, SQS, SNS, RDS, ElastiCache(Redis)
  3. 使いはじめて不不満だったこと •  設定を  ini じゃなくてYAMLで書きたい •  RoutingもAnnotationじゃなくてYAMLがいい •  Composer使えるかな • 

    Volt が … coredump ↓↓↓↓↓ 社内で普及させるには乗り換えやすくしたい Symfony1.4 → Phalcon レガシー → モダン
  4. ServiceProviderを実装 Laravel や  Silex などで実装されている ServiceProviderをPhalconで実装できるようにした メリット –  ライブラリの導⼊入が簡単になった – 

    だれでも、すぐに使い始められるようになった –  DI Componentの⽣生成プロセスを隠蔽 –  Componentを登録して設定するだけ –  設定の使いまわしができるようになった デメリット –  ⽣生成プロセスがServiceProviderに依存 –  設定の複雑化
  5. ServiceProviderがやたら増えた ServiceProviderの実装は簡単なので、やたら増えた –  database-service-provider –  volt-service-provider –  cache-service-provider –  aws-service-provider

    –  gaufrette-service-provider –  elasticsearch-service-provider などなど… 外部ライブラリを使うときは、まず  ServiceProvider をつくってしまう、⾮非公式だけどオススメ
  6. モデルで気をつけるべきこと •  useDynamicUpdate, keepSnapshots は true にすべし –  Updateクエリに全てのフィールドが⼊入っている • 

    1アクセス内での2回⽬目の save/update は気をつけろ –  snapshot は、SELECTのタイミングでしか⼊入ってない •  save/update/delete の返り値はちゃんと確認すべし –  model->getMessages() もしくは、transaction->getMessages() に エラーが⼊入っている •  データベースからデータ取得は⽂文字列列 –  これはPDOの仕様に基づくもの PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMURATE_PREPARES => false など適切切に 設定する必要がある •  厳密なデータの影響件数は $connection->affectedRows()
  7. 502 Bad Gateway 多くの場合 Volt テンプレート内での問題が原因 •  テンプレートのパースが正常にできなかった – ある程度度はパースエラーが出る • 

    Null⽂文字列列を扱えない関数へNullを渡した – 本来、Fatal Error としてエラーが出るがテンプ レート上で発⽣生すると  Core dump して死ぬ テンプレートへのNullは排除すべし
  8. 学習コストについて •  ドキュメントが英語だから分からん → サンプルコードから読み解くべし •  フレームワークのソースがC⾔言語だから分からん → ⾷食わず嫌いはよくありません、まずは⾒見見てみましょう →

    C⾔言語知らない⾃自分でも、なんとなく意図は読めた → 有志でPHPの実装してる⼈人がいるので⾒見見⽐比べてると 慣れてくる  https://github.com/scento/phalcon-php •  core dumpした!! → 多くの場合において渡している引数やその値に問題が 多いです、実装を読みつつ、呼び出し⽅方法などで 回避できることが多いです