MODXの高速化

MODX Evolutionは動作の軽さを特長とするCMSです。デフォルトでインストールされるコンテンツ構成で確認したところ、ページ出力に用いられるメモリ量は、WordPressは17.5MBに達しますが、MODX Evolutionは1.2MB程度しか使いません。

さらに調整を重ねた結果、キャッシュ処理を改善することで、わずか15KBまでメモリ消費を落とせることが分かりました。標準で備わっているキャッシュ機構と比べると多少制限がありますが、通常のサイト運用なら問題を感じることは少ないと思います。$_POSTで値が渡ってきた場合や、管理者としてログインしている場合は、自動的に標準のキャッシュ機構にスイッチしますので、eFormやQuickManagerを使うぶんには影響ありません。

今回作ったキャッシュ機構は、キャッシュの中身を生成するところまでは標準のキャッシュとほとんど同じです。違うのはキャッシュのファイル名です。ファイル名を工夫し、URIと直接紐づけたので、リクエストを受けると同時に対象キャッシュのファイル名を特定できます。やってることは単純で、URIをmd5関数でハッシュ化した文字列をファイル名にしているだけです。だから処理も軽い。

ただし必要に応じて、ある程度の動的処理ができるようには配慮しました。MODX設置ディレクトリにautoload.phpというファイル名で処理を置いておけば、これを自動的にロードして、キャッシュを読み込んだ直後に処理を実行することができます。任意のトリガー文字列をリアルタイムの時刻で置き換えるくらいは簡単にできます。autoload.phpで値をfalseで返せば、キャッシュの出力をスキップして通常のパース処理に進みます。

MODX Evolutionには、ページ数が増えると負荷が高くなるという問題もあります。これについては半年ほどかけて大幅に改善してきましたが、根本的には変わってません。5000ページくらいなら問題ありませんが、1万ページを超えると35MB近いメモリを消費します。

これを改善するために、Revolutionと同様のアプローチでキャッシュ機構を見直す予定です。具体的には、documentObjectにフィールドをひとつ追加します。SQLクエリの発行回数は少し増えるかもしれませんが、プラスマイナスで見れば、小規模サイトにおいてもマイナスを期待できるレベルで実装できると思います。うまくいけば、100万ページ規模のサイトでも数百KB程度の軽い負荷で駆動できることと思います。

https://github.com/dmi3yy/modx.evo.custom

ロシアチームもキャッシュの改善に積極的に取り組んでいて、ある程度成功しているらしいと聞いています。コードを見たところ、迂回が多い処理のように見えます。コアの変更をできるだけ避けるためと思われます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です