4

現在、プロジェクトを symfony2 に移行しています。ウェブサイトは複数のドメインを使用しています:

  • domain.com- メインのウェブサイト
  • help.domain.com- よくある質問
  • profile.domain.com- ユーザーCPの場合

等々

それを機能させるには、ディレクトリ 'sites' を作成し、各サブドメインに対して、フレームワーク ファイル + ルート vendor/* (composer および autoload.php ファイルを除くすべてのディレクトリ) 内のディレクトリへのシンボリック リンクを含む vendor ディレクトリを含む独自のディレクトリを作成します。したがって、構造は次のようになります。

root/
    sites/
        domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
        profile.domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
    vendor/

自動ロードはドメインごとに少し異なる必要があるため、この方法で行う必要がありました (ベンダー/会社のドメイン間で共有されるコードを保存し、各ドメインに固有のコードはドメイン ディレクトリの /src フォルダーに保存されます)。 .

問題は、composer install各ディレクトリで " " を実行する必要があり、独自のディレクトリが作成composer.lockされ、後でいずれかのディレクトリで更新すると、ライブラリは更新されますが、composer.lockファイルは同期されないため、それぞれを再インストールするだけです。時間。

この問題を解決するより良い方法はありますか? (composer をルート ディレクトリにのみ配置することを考えましたが、ドメインごとに異なる autoload.php ファイルをダンプする方法が見つかりませんでした)。

4

1 に答える 1

3

単一の依存関係セットを持つ 1 つのプロジェクトか、個別の依存関係を持つ 2 つのプロジェクトがあります。間にあるものは意味がありません。最初のオプションを使用したいが、オートロードのパフォーマンスに懸念があるようです。

問題は、デフォルトでは、とにかくオートロードが遅くなるということです。したがって、特定のサブプロジェクトの dep のみを含む 2 つの個別の autoload ファイルがあったとしても、おそらくかなり遅くなります。

本当にすべきことは、クラス マップをダンプすることです。これは基本的に、すべてのクラス名をそれらが存在するファイルにマップするオートロード ファイルです。これにより、stat 呼び出しが抑制され、非常に効率的になります。また、両方のサブプロジェクトにクラス マップ全体をロードしても、特に APC が有効になっている場合は、オーバーヘッドが大きくなりません。

次のコマンドを使用して、クラス マップ ファイルをダンプできます。

$ composer dump-autoload --optimize

これで、オートローディングのパフォーマンスが向上するはずです。

composer.jsonTLDR:クラス マップの自動読み込みで単一を使用します。高速です。

于 2012-08-30T23:31:50.543 に答える