今さらだけどMT3→MT4の移行について(高速化の話とかも)。
公開日 : 2009-08-23 12:00:00
もうMT5がどうとか言っているこの時期にMT4(MTOS4.261)に移行しました。
移行をためらっていたというか放置していた理由は特にないんですが(忙しいし...そもそもブログを書く分にはMT3で困らないし)、大阪オフィスの移転時にオフィスに置いていたサーバーがトラブルがちになってしまい管理者のM君に怒られて移行せざるを得なくなった、ということで良いきっかけなので移転を契機に長らく親しんだMT3.3からMT4系の最新バージョンに移行することにしました。
忙しいし面倒という以外に移行をためらっていた理由があるとすれば、
- Permalinkが変わるのは嫌。
- MT3用に自分のブログ用に作っていたプラグインの検証が面倒。相当カスタマイズしていたし、そのままじゃ動かんだろう。
- CSSをインラインで書いていて美しくないし、デザイン変えたらインラインで書いていたCSS全部書き直すのかよ。
そこで。以下のエントリーの方法でPermalinkを引き継いでエクスポートできるインデックステンプレートを作成し、インラインで書かれたCSSを削除するプラグインを書いてエクスポート。
ドキュメントルート以下のデータはtarに固めて移行、移行先で展開。新規にインストールしたMTOSに「既定のブログ」テンプレート適用し、エクスポートしたデータをインポート。
スタイルは先日公開した STYLE LEAVES の「Gear Module」を選択。
最後にアーカイブマッピングの調整をして再構築して移行完了しました。
テンプレート調整とチューニング
上記の移行を行ったデフォルトの状態での再構築時間は3分30秒前後(550エントリー)。MT3.3の時はだいたい1分45秒程度だったのですがそもそもサーバー(ハード)自体が違うしプラグインやテンプレートのインクルード等でチューニングしまくっていたから単純に比較はできないと思います。
それでも、まぁ、趣味再構築だし当時よりは色々知識も蓄積されていますから、時間の許す範囲でテンプレ調整と高速化を行ってみました。
EntriesPerRebuild 値の変更
これで、400とか指定してテスト。確かに2分台にはなりました。でも劇的って程じゃないな。そもそも一度にどれだけのエントリーを再構築するのか、ってこと何だから値を上げるってことはそれだけ負荷をかけるということ。サーバースペックがそこそこあるからいいけど、どこでも使える対策じゃないですよね(最終的には150程度にしました)。
そこで、負荷軽減と高速化として次のステップへ。
MTRequestCache プラグインのインストールとテンプレ調整
以前書いたRequestCacheプラグインをインストール。共通部分をキャッシュするように変更しました。
サイドバー部分のテンプレートを少し変更(これは高速化と関係なく好みの問題で)して、最近のブログ記事10件を表示するようにした。そしてこの部分やカテゴリーリスト、月別アーカイブリストなど、主に右側のサイドバーの共通部分にMTRequestCacheブロックタグを適用。
例 : アーカイブウィジェットグループ
<MTBlogID setvar="blog_id">
<MTRequestCacheBlock key="ArchiveWidget" blog_id="$blog_id">
<mt:Ignore>
アーカイブの種類に応じて異なる内容を表示するように設定されたウィジェットです。詳細: http://www.Movable Type.org/documentation/designer/widget-sets.html
</mt:Ignore>
<mt:If name="category_archive">
<mt:IfArchiveTypeEnabled archive_type="Category-Monthly">
<$mt:Include widget="カテゴリ月別アーカイブ"$>
</mt:IfArchiveTypeEnabled>
</mt:If>
<mt:IfArchiveTypeEnabled archive_type="Category">
<$mt:Include widget="カテゴリアーカイブ"$>
</mt:IfArchiveTypeEnabled>
<mt:IfArchiveTypeEnabled archive_type="Monthly">
<$mt:Include widget="月別アーカイブ"$>
</mt:IfArchiveTypeEnabled>
</MTRequestCacheBlock>
要するにMTの再構築って1度のcgiへのリクエストで複数のエントリーやアーカイブをファイルに出力するわけですが、その1回のリクエストで処理される複数ページのテンプレート構築処理の際にMTRequestCacheBlockタグ内は最初の1ファイルのみ再構築され、2ファイル以降についてはメモリにキャッシュされたデータが使われるわけです。よって、このブロックを処理する時にSQLによるリクエストやテンプレートに関する処理は行われず、その分負荷軽減と高速化が図られます。
最終的には4カ所をMTRequestCacheBlock化して、全再構築時間1分30秒程度。
3分30秒→1分30秒ですから2倍以上。まずますではないでしょうか。