私は、読み込みがかなり重いページを持つアプリケーション (Symfony 1.4 / Doctrine) に取り組んでいます。これらのページの 1 つには、多くの関係 (埋め込みフォーム) を持つ非常に複雑なフォームが含まれています。このページは次のようなことを行います: すべてのオブジェクトを取得し、(オブジェクトを使用して) フォームを作成し、フォームをレンダリングします。
これにより、ページあたり約 1.5 秒の読み込み時間が発生します。MySQL はボトルネックではないようです。クエリの実行には約 0.01 秒かかります。ただし、結果の水和にはさらに多くの時間がかかります。約 0.3 秒です。すべてのサブフォームの作成と埋め込みにも多くの時間がかかります (0.5 秒)。残りの時間は通常の Symfony/Doctrine メソッドに費やされます。これらの時間はすべて、Symfony タイマーおよび/または xdebug で検出されました。
オペコードのキャッシュに APC を使用することで、運用サーバーでのプロセスを高速化できることを願っていました。そこで、APC をインストールし、いくつかの構成 (キャッシュ サイズ = 400MB、最大ファイル サイズ = 20MB、念のため) を行い、最後にアプリケーションのベンチマークを行いました。
APC なし:
$ ab -n 100
Requests per second: 0.72 [#/sec] (mean)
Time per request: 1392.142 [ms] (mean)
Time per request: 1392.142 [ms] (mean, across all concurrent requests)
Transfer rate: 130.62 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 5 3.6 4 32
Processing: 1301 1387 258.0 1338 3549
Waiting: 1229 1315 258.2 1267 3475
Total: 1305 1392 258.0 1342 3553
APC の場合:
$ ab -n 100
Requests per second: 0.86 [#/sec] (mean)
Time per request: 1160.666 [ms] (mean)
Time per request: 1160.666 [ms] (mean, across all concurrent requests)
Transfer rate: 156.67 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 4 4 0.7 4 9
Processing: 1071 1156 164.1 1121 2337
Waiting: 1024 1104 164.3 1065 2286
Total: 1075 1161 164.1 1125 2341
多少の改善はありますが、結果はかなり残念です。APC が適切に機能していることを確認するために、同じサーバーで実行されている Drupal Web サイトのベンチマークも行いました。これにより、Drupal Web サイトの 1 秒あたりのリクエスト数がほぼ 2 倍になりました (4 ページ/秒から 8 ページ/秒へ)。明らかに、APC は正しく機能しています。
この高速化の欠如の原因が何であるかを知っている人はいますか? APC の有無にかかわらず、Symfony アプリケーションでベンチマークを行った人はいますか? アプリケーションのインターネットで、1 秒あたりのリクエスト数が 2 倍になるという主張をいくつか見つけることができますが、すべてベンチマークがありません。