Symfony2高速化メモ
一人プロジェクトでSymfony2使ってたらこれから部署でもSymfony2使っていくような流れになってきたので自分用にメモを残していってみる。
とりあえずまずは高速化に関連する話題。
APCを有効化する
Symfony2使うならAPCはほぼ必須。
ApcUniversalClassLoaderに置き換えてみる
デフォルトではUniversalClassLoaderが有効になっているが、これはfile_existsを何度も呼ぶため遅い。
クラスの位置をAPCにキャッシュするApcUniversalClassLoaderが同梱されているため、こちらに入れ替える。
ただし、名前空間をいじったりしたときにキャッシュをクリアしないと問題が起きたりするので、開発中はUniversalClassLoaderでいいかも。
app/autoload.phpの上部を以下の様に編集。
<?php //require __DIR__.'/../vendor/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; require __DIR__.'/../vendor/symfony/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php'; use Symfony\Component\ClassLoader\UniversalClassLoader; use Symfony\Component\ClassLoader\ApcUniversalClassLoader; use Doctrine\Common\Annotations\AnnotationRegistry; $loader = new UniversalClassLoader(); //$loader = new ApcUniversalClassLoader('some prefix'); //...
パフォーマンス | Symfony2日本語ドキュメント#キャッシュ Autoloader (ApcUniversalClassLoader など)の利用
DoctrineのCaching Driversを使う
クエリキャッシュ、メタデータキャッシュ、結果キャッシュを使う設定ができるので、これを有効にする。
それぞれarray,apc,xcache,memcacheのいずれかを選択可能。
doctrine: orm: auto_mapping: true metadata_cache_driver: apc query_cache_driver: xcache result_cache_driver: type: memcache host: localhost port: 11211 instance_class: Memcache
Configuration Reference (current) - Symfony#Caching Drivers
クエリキャッシュを使うときはこんな感じ(多分)。
<php //... $em = $this->get('doctrine.orm.entity_manager'); $q = $em->('SELECT i FROM Foo:BarBundle:Item i); $q->useResultCache(true, 3600, 'somecache_id'); $result = $q->getResult(); //...
Native SQL
Doctrine使ってると、プロファイラを見てると、たまにすさまじいSQLが発行されてるときもある。
そんなときに最後の手段として、SQLを直接書いてEntity Classにマッピングする方法。
15. Native SQL — Doctrine 2 ORM 2.1 documentation
マッピングすらしたくなければ、Entity Managerからコネクション取ってそれを使って直接Query投げてしまえばいい。
Assetic管理
AssetにYUI_compressorやClosure Compilerを適用して圧縮したりしたい場合app/config.ymlに以下のような感じで記述。CoffeeScript使いたいときとかもここに設定する。
assetic: debug: %kernel.debug% use_controller: false filters: closure: jar: %kernel.root_dir%/java/compiler.jar yui_css: jar: %kernel.root_dir%/java/yuicompressor.jar yui_js: jar: %kernel.root_dir%/java/yuicompressor.jar
Varnish
使ったことないけどとりあえずメモ。
Varnish を使ってウェブサイトを高速化する方法 | Symfony2日本語ドキュメント