最も簡単で移植性の高い方法は、特定のパターンに一致するすべてのファイルを含めることです(例:/components/component1/header.css)。
これは2つの問題を引き起こします。1つはパフォーマンスです(すべてのコンポーネントのすべてのディレクトリを確認する必要があります)。もう1つは、コンポーネントの分離です。つまり、特定のCSSを別のCSSの前後に含める必要がある場合、そこにある場合とない場合がある場合はどうなりますか?
各コンポーネントに「マニフェスト」を含めることで、両方の問題を解決しようとする場合があります。これにより、最初に、ファイルの場所とファイルを含める場所を指定できます。次に、処理は「components」ディレクトリを調べてすべてのマニフェストをデコードし、これを一連のディレクティブベクトル($ CSSToBeIncludedInThisOrder []など)に「コンパイル」することになります。コンパイルされたオブジェクトをキャッシュされたファイルにシリアル化することもできます。もちろん、コンポーネントへの変更には、コンパイルされたメタマニフェストの削除を含める必要があります。
後で、条件付き優先順位などのマニフェスト命令に含めることができます。
これはすべて、クライアントのブラウザに何かを送信する前に行う必要があります(コンポーネントZZZがob_状態、またはおそらくエンコーディングを変更したい場合、またはダウンロードオーバーライドコンポーネントであり、Content-Typeタイプのアプリケーション/オクテットストリームを送信したい場合はどうなりますか? ?)しかし、「コンパイル」は知覚待ち時間を低く保つことを可能にするはずです。
はっきりさせておきましょう:
1. index.php checks whether a metamanifest.cache file exists.
2. If it does, it runs something like
$__META = unserialize(file_get_contents($METACACHE));
and goes on to #4.
3. If it does not, opendirs/readdirs the components directory,
looks what files are there, decides (but does not do yet) what to do with them,
placing those decisions in $__META, e.g. $__META['HeaderJS'][].
4. Now HTML generation begins: the __META array is walked and everything that
needs doing gets done (headers, inclusion of JS in heads, etc.).
フェーズ3では、重複するチェックやバージョン管理を実行する場合もあります。たとえば、両方に「jQuery.js」を含める必要がある2つのコンポーネントがあるとします。「/components/comp1/js/jQuery.js」と「/components/comp2/js/jQuery.js」を__Meta['HeaderJS']にやみくもに追加する代わりに、システムは競合を宣言するか、次の方法で解決されると判断できます。それらの1つだけを含めることにより、処理時間をさらに短縮します。