ああ、古き良き時代。それも私の問題でした。
2007 年から ZF を使用しています。メモリ使用量は常に ZF の問題でした。16-17M は、ZF の単純な MVC の「通常」です。Doctrineを追加すると、あなたが言ったように最大20Mになります。
まず、サーバーに APC をインストールします。デフォルト設定でもすべてが高速化されるため、これは最も重要なことです。ページの読み込み時間を測定します。APC の後、少なくとも 30% のパフォーマンスが得られます。
その後、APC バックエンドで Zend_Cache を使用します。Doctrine では、クエリ、結果、ハイドレーションのキャッシュが可能です。APC でも使用してください。
ZFDebug を使用しているようです。Doctrine クエリをプロファイリングし、それらも最適化します。必要に応じてインデックスを追加します。
私は常に「パフォーマンスよりも管理しやすい」側にいます。はい、ZFは遅いです。はい、Doctrine はそれを遅くします。しかし、私のプロジェクトのサイズでは、フレームワークと ORM、および依存性注入コンテナー ETC を使用する必要があります。これらすべてが、プロジェクトを迅速に開発する能力を与えてくれます。
私はガジ大学のウェブページの開発者です。昨年以来、私は静的な Web ページをすべての教育機関および管理部門の CMS に変換しようとしました。たとえば、iibf.gazi.edu.trとbidb.gazi.edu.trは同じテンプレート、同じ CMS、同じ DB を使用していますが、すべてのサイトには独自のサブドメインがあります。
ああ、サイトが「ライブ」になった日、私は死にかけていました。ページの読み込み時間は 15 秒でした。15秒。Google ウェブマスター ツールによると、インターネット全体よりも遅いと言われました。誰もがタイムアウトしました。VM のすべてのコアは 100% で動作していました。マシンに SSH で接続することさえできませんでした。
ページのすべての部分は、CMS 管理インターフェイスを介して制御できます (管理エリアにログインできる場合:D)。上の青いメニュー?CMS から。ニュース?CMS から。お知らせ?CMS から。クイック リンク エリア? CMS から。アイコン付きのクイックリンク? CMS から。すべての部門のリンクが異なるため、twitter/facebook/youtube のリンクでさえ DB から来ています。
そして、本当の奇妙な部分は?キャッシュを使っていました!前の段落で数えたすべての部分をキャッシュしていました。
今?Google アナリティクスのサイト速度グラフは 1.5 秒で横ばいです。Google ウェブマスター ツールによると、インターネット上の 91% のサイトよりも高速です。また、このサイトには毎日 60,000 人の訪問者がいます。
できることのリストを次に示します。ただし、一度にすべてを実行しないでください。1 つのことを行います。新しいメトリクスを測定して繰り返します:
ページのプロファイルを作成します。どのコードがページの速度を低下させているかを確認します。Xdebug と CacheGrind を使用します。たとえば、Zend View パーシャルを使用している場合は、使用しないでください。$this->render() を使用します。しかし、それを測定するまで、何があなたを遅らせているのかを知ることはできません. プロファイリングを行います!
Opcode キャッシングを使用します。私が言ったように、APC はオペコードのキャッシュに最適です。最適化します。たとえば、apc.stat 設定を無効にすると、さらに高速になります。(stat は、最初のキャッシュ以降にファイルが変更されたかどうかをチェックしますが、ディスク シークが必要であり、速度が低下します。この設定を無効にすると、速度が向上します。ただし、PHP ファイルを変更した後は、PHP を再起動する必要があります)。
データベースも遅いものです。結果セットをキャッシュします。ニュース項目がデータベースに挿入されてから 1 分遅れて表示されても、誰も気にしません。1分のキャッシュでも違いが生じると信じてください。
CDN を使用するか、少なくとも Web サーバーを構成して、静的コンテンツの有効期限を +1 年に設定します。そして、静的コンテンツからセッション ID を削除します。静的コンテンツの場合は +1 年が必要です。やれ。たとえば、620x327 の jpg バナーがあり、ページの総重量の 20% です。
Web スタックの設定を学びます。MySQL、Apache、PHP、PHP-FPM、Apache、Nginx、または使用するものを構成します。ただし、一度に 1 つの設定を変更し、少なくとも 100 回はテストしてください。一部の設定では、最初の更新時に問題が発生しません。
指標をトレースします。strace、top、iostat、vmstat、htop などを使用します。mysql が常に CPU サイクルを使用している場合は、クエリ結果をキャッシュしていないことを意味します。
未使用のモジュールを削除: !#@$ LDAP モジュールを削除します! あなたはそれを使用していません。いつか使用する必要がある場合は、「apt-get」、「yun install」を 1 回実行する必要があります。
ホームページは最も重要なものです。実話: 当社のホームページの月間ビュー数は 200 万です。次にアクセス数の多いページはわずか 420k です。ホームページに「フル ページ キャッシュ」を使用します。ただし、フルページ キャッシュは URL ベースであり、MVC スタックにも影響しないため、無効にできないことを忘れないでください。前に言ったように、1分間キャッシュします。トラフィックの多いサイトでは、1 分でも大きな違いがあります。
できるだけ多くの作業をクライアントのコンピューターにプッシュします。Google は、医学部の研究室の 620x327 ピクセルの jpg を気にしません。私たちの訪問者でさえ気にしません。ページの読み込み後に AJAX で読み込みます。
私の経験から覚えているのはそれだけです。