8

私はMagentoで作業しており、CSSとJavascriptを1つの大きなファイルにマージする機能があります。

その長所と短所に関係なく、次の問題があります。

最終的なファイルは、以下を含むがこれらに限定されない複数のレベルでキャッシュされます。

  • アマゾン クラウドフロント
  • プロキシ サーバー
  • クライアントのブラウザ キャッシュ

Magento は、連結された css ファイル名の MD5 合計を使用して、マージされた css ファイルの新しいファイル名を生成します。css ファイルの個別のセットを持つすべてのページが適切にマージされた css ファイルを取得するようにします。

キャッシュの問題を回避するために、css ファイルが変更されるたびに新しいハッシュが生成されるように、ファイル変更のタイムスタンプもそのハッシュに含めました。

したがって、非再検証キャッシュ スコアの利点は十分に発揮されますが、リソース リンクが変更されているため、何かが変更された場合はすぐに表示されます。

ここまでは順調ですね:

唯一の問題は、has の生成に使用されるファイル名が、通常は HTML-Head ブロックで直接参照されるファイルのみであり、それらのファイル内に css インポートが含まれていないことです。

そのため、css ファイル内にインポートされたファイルの変更は、新しいハッシュにはなりません。

いいえ、すべてのインポートを再帰的に解析してスキャンしたり、そのようなことはしたくありません。

むしろ、ディレクトリベースのソリューションについて考えました。ファイルシステム単位で「ディレクトリ内の最後の変更」を効率的に監視するものはありますか?

ext4を使用しています。

それとも、find コマンドを使用して、inode インデックスに基づいてすべての作業を行う別の方法があるのでしょうか。

そんな感じ?

ファイルシステム全体をスキャンせずに変更を即座に「見る」プログラムをたくさん見てきました。Linux で利用できる「ファイル操作監視」デーモンのようなものもあると思います。

問題は、css ディレクトリが非常に大きいことです。

誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

7

依存するphpファイルの1つが変更されたときに、phpに依存しないデーモンを使用して、メインのcssファイルの変更日を変更することをお勧めします。次のような dnotify を使用できます。

dnotify -a -r -b -s /path/to/imported/css/files/ -e touch /path/to/main/css/file;

他のフォルダー内のファイルの 1 つが変更されるたびに、メインの css ファイルで「touch」を実行します (-a -r -b -s = 任意のアクセス/再帰的なディレクトリ検索/バックグラウンドで実行/出力なし)。または、他のアクションを実行して PHP からテストすることもできます。

于 2011-07-22T11:03:16.883 に答える
2

ディレクトリで変更が発生するたびに通知を受けることができる inotify パッケージを調べてみてください。

于 2011-07-22T10:18:29.363 に答える
2

コマンドを使用する場合

ls -ltr `find . -type f `

すべてのファイルの長いリストが表示され、一番下に最新のものがあります。

于 2011-07-22T10:15:46.817 に答える
1

私はそれを使ったことはありませんが、どうやらPHP の inotify サポートがあるようです

(inotify は、Linux で通知を取得する最も効率的な方法です)

于 2011-07-22T10:19:30.973 に答える