MTタグが1000個以上記述してあるテンプレートはそれだけで再構築以前の処理に時間を食う

| コメント(0) | トラックバック(0)

この記事は、「やはりお前らのMTMLは間違っている」シリーズ連載第n回目の連載です。

12303936_1018612871539819_7627081906549621209_o

MTタグが数千、下記の例では7500個書いてあるテンプレートの話しです。

    <mt:SetVar name="master_table" key="12000" value="JR山手線">
    <mt:SetVar name="master_table" key="19200" value="東京メトロ千代田線">
    ....同じような記述が7500個くらい記述が続く

DB接続するようなMTタグが一切無いにも関わらず、再構築に数十秒かかります(手元環境では30秒から45秒)。MTSpeenMeterタグを使うとビルドにかかっているのはたかだか3〜4秒。

であれば、ビルドに入る前段階で時間を食っていると考えるのが自然。

時間がかかっているのは MT::Builder の sub compile{}です。要するに正規表現でMTタグをパースする処理。MTタグが多ければ多いほどここに時間がかかります。

要するに、PHPでも以下紹介した事象がスタティックでも発生するということです。しかもPerl、スタティックのパース結果はキャッシュされない(同一リクエスト内ではキャッシュされる模様)。

対策は、MTSetVars、MTSetHashVarsを使うか、素直にデータベースを使う

MTタグの数が少なければパース時間は短くなるため、MTSetVars、MTSetHashVarsを使って纏めて記載する。

でも、この手のデータだったらカスタムオブジェクトでも何でも良いけど素直にデータベース管理が良いと思います。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/938

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2016年2月17日 17:00に書いたブログ記事です。

ひとつ前のブログ記事は「Re: Movable Type でメンテナンスしやすいテンプレート書き換え系のプラグインを書く」です。

次のブログ記事は「#goodnews の共有が大切な理由」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6