Movable Typeで記事が増えてきたりすると、管理画面が重い、再構築に時間がかかるというハナシがでてきたりします。
これらの原因はいくつかあるのですが、今回はテンプレートの記述の仕方に注目してみたいと思います。
記事を更新すると、その時点でいくつかのテンプレートに再構築が実行されます。
再構築の時間が短いほど体感的に早くなったと感じることができるでしょう。
なので、テンプレートの記述の仕方でどれくらい再構築に時間がかかるかを調べてみます。
計測には「MTSpeedMeter」プラグインを使用しました。
まずは、記事数が約1500件ほどのブログで、<mt:Entries>を3回出力してみます。
1:9.63901400566101
2:9.55511212348938
3:9.67439603805542
平均:9.622840722401937
再構築にかかった時間は、平均で「9.622840722401937」秒でした。
ちなみに、<mt:Entries>が1回だと平均「3.948484659194947」秒でした。
<mt:Entries>の回数を増やすと、比例的に処理時間も増えました。
<mt:SpeedMeter name="ブログ記事の一覧" prefix='<div class="debug">' suffix='</div>'> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>] </mt:Entries> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>] </mt:Entries> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>] </mt:Entries> </mt:SpeedMeter>
今度は、<mt:Entries>を1回に変更して、出力されたデータを配列にします。
その配列を<mt:Loop>で3回展開してみました。
1:4.13107514381409
2:4.15068912506104
3:4.14892315864563
平均:4.143562475840253
結果は、平均「4.143562475840253」秒でした。
ちなみに<mt:Loop>の回数を変更しても、ほぼ時間は変わりませんでした。
<mt:SpeedMeter name="ブログ記事の一覧" prefix='<div class="debug">' suffix='</div>'> <mt:Entries lastn="0"> <mt:SetVarBlock name="sample" function="push"> [<$mt:EntryID$>:<$mt:EntryTitle$>]</mt:SetVarBlock> </mt:Entries> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> </mt:SpeedMeter>
今度は、出力する値(記事IDと記事タイトルの2つから、5つ)を増やしてみます。
1:11.1675078868866
2:11.2783050537109
3:11.2834129333496
平均:11.2430752913157
そうすると結果は、「11.2430752913157」となり、
増やす前の「9.62」秒から約「1.62」秒ほど増えました。
データベースとのやり取りが増えると処理も重くなるんですね。
<mt:SpeedMeter name="ブログ記事の一覧" prefix='<div class="debug">' suffix='</div>'> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>:<$mt:EntryLink$>:<$mt:EntryDate$>:<$mt:EntryBody$>] </mt:Entries> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>:<$mt:EntryLink$>:<$mt:EntryDate$>:<$mt:EntryBody$>] </mt:Entries> <mt:Entries lastn="0"> [<$mt:EntryID$>:<$mt:EntryTitle$>:<$mt:EntryLink$>:<$mt:EntryDate$>:<$mt:EntryBody$>] </mt:Entries> </mt:SpeedMeter>
<mt:Loop>版も同様に変更してみました。
結果は、
1:4.89078998565674
2:4.93412303924561
3:4.93477916717529
平均:4.919897397359213
約「4.14」秒 → 約「4.93」秒に増えました。
増えた文は初回の<mt:Entries>の分でしょうね。
<mt:SpeedMeter name="ブログ記事の一覧" prefix='<div class="debug">' suffix='</div>'> <mt:Entries lastn="0"> <mt:SetVarBlock name="sample" function="push">[<$mt:EntryID$>:<$mt:EntryTitle$>:<$mt:EntryLink$>:<$mt:EntryDate$>:<$mt:EntryBody$>]</mt:SetVarBlock> </mt:Entries> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> <mt:Loop name="sample"><mt:Var name="__value__"></mt:Loop> </mt:SpeedMeter>
調査した結果、
ということがわかりました。
再構築の時間を減らすには、データベースからの値の取得は極力少なくするのがカギとなります。