PowerCMS X ブログ
2024-12-12
PowerCMS Xでは再構築トリガー(またはコンテナ)による関連ファイルの再構築を柔軟に設定することができますが、トリガーの設定をあまり多くしてしまうとオブジェクトの更新後の関連ファイルの再構築処理プロセスが溜まってしまうことがあります(結果、サーバーの負荷が上がる)。
PowerCMS Xでは、オブジェクトの更新が行われると、必要な再構築トリガーが引かれてバックグラウンドで再構築処理が行われます。PowerCMSでは、リダイレクトによって関連するページが再構築されます。この時、複数ユーザーがほぼ同じタイミングで別のオブジェクトを更新した時の処理は、以下のようになります。
このような状態で複数のユーザーが異なる記事やページなどのオブジェクトを更新するような運用をしていると、終了していないPHPのプロセスが重複して起動している状態になり、使用メモリが増えていくことがあります。
解決策の一つとして「Shared Background Publishing」(取得済み特許) を利用する方法があります。
詳細はリンク先をご覧いただくとして、設定を有効化すると動作は以下のように変わります。後に操作したユーザーが前に操作したユーザーのキューを奪う(バトンタッチ)することで同じファイルの再構築を後に操作したユーザーだけがまとめて行う、ということになります。
次のリリースで改良した処理になります。ユーザーBの記事の操作後に、ファイルのタイムスタンプをチェックして別のユーザーによって当該関連ファイルの再構築が行われていた場合、再構築をスキップします。以下のような流れとなります。
これによって、オブジェクト更新後に別のプロセスが当該ファイルを再構築していた場合、処理そのものをスキップできるようになります。オブジェクトの更新後、トリガーの開始時間で比較しているので、別のプロセスの再構築処理にユーザーBの操作の結果は含まれていることになります。
唯一の例外は、ファイルに更新がなかった時です。「記事本文のみに修正が入っていて、タイトルや日付はそのまま」といった場合、一覧ページの内容には変化がないかもしれません。
この時、PowerCMS X(PowerCMS)は再構築処理そのものは行われますが、ファイルの更新は行われません。これには、ファイルのタイムスタンプが更新されることで、Conditional GET(HTTP 条件付きリクエスト)が効かなくなるのを防ぐ目的があります。要するに、ブラウザキャッシュが使われないのです。
もしも、静的ページへのリクエストを高速に捌ける環境で、ブラウザキャッシュよりもサーバーの再構築負荷を何とかしたいということであれば、ビュー(テンプレート)にタイムスタンプ「 <!--<mt:date format="YmdHis">-->」などのコメントタグを入れておけば、確実にファイル書き出しが行われます。
「Shared Background Publishing」にはこの制限がありません。必要に応じて設定するようにしてください。
カテゴリー:技術情報 | リリース&アップデート情報
投稿者:Junnama Noda