- 2007-01-04 (木) 00:45
- MovableType


- どうしたら、早くなる?
やっぱり、遅いですよね。このブログ。
表示はなるべくストレスが無いように、色々やってるんだけど、コメントするとかなり待たされます。
ほんとにちゃんと終わるのか?と思うぐらい待たされますよね。
それで、色々調べた上で実験君やってみました。
新規エントリーを投稿した際に、自動的に再構築されるアーカイブがよく分からなかったので調べた。
- インデックステンプレートで「このテンプレートを自動的に再構築する 」にチェックが入っているもの
- 「一つ前のエントリーアーカイブだけが再構築される」となっているが、それは通常新規投稿されるエントリーよりも新しいエントリーが存在するはずが無いからで、正しくは「前後のエントリーアーカイブ」を含むの3つであろう。
- カテゴリーアーカイブは、これも同様に「前後を合わせた3つのエントリーが属するカテゴリー」が再構築対象だと思われる。
- 日付アーカイブは当日を含む各日付アーカイブ+それぞれの前後になるので、週別や日別も使用している場合はかなりの数に上る事になる。
- また、アーカイブには複数のテンプレートを割り当てることもできるので、その場合にはさらに増える事になる。
そもそもこれだけのテンプレートが再構築されるんだから、時間がかかるのは当たり前なのである。
さらに、気が付いている人がいるかどうかは分かりませんが、MT3では使っているうちに、徐々にRebuildに要する時間が増大するのはもちろんですが、1エントリの追加にかかる時間も増大します。
どうやら、常にデフォルトBasenameを作ろうとして、その処理がエントリー数に比例(この言い方が正しいかは別)して、時間がかかるものになるらしいです。
普通は実感として何かと比較できるわけではないので、あまり気づかないらしいですが。
それで、上はエントリー投稿時の話なんですが、ではコメント投稿時はどうなってるんでしょうかね。
後で試してみようっと。
それで、どうしたら少しでも早くなるか考えてみました。
再構築されるテンプレート数を減らす
インデックステンプレートには、エントリーを投稿しても内容の変わらないものが存在します。またCSSのように、内容が常に固定なものもあります。それで、投稿によって内容が変化しないものの、再構築チェックを外しました。例えばRDFのテンプレートなんかは、ブログの設定いじらなければ常に同じ内容なので外せます。CSSも通常は変化しないし、SiteのJavascriptも通常は変化しないことの方が多いはずです。結局メインページの他に、Feed関係を選択しておけば、たぶん他は必要ないはずです。もっとも、せいぜい数行程度のテンプレートが外れたからって、どの程度早くなるかは疑問ですけど。再構築自体を無くす
前のテンプレート数を減らすのと同じ目的ですが、コンテンツの変更をJavascriptを使いリアルタイム読み込みで実現して、再構築を不要にする方法です。prototype.js を使って、最新記事を表示のように、元データをJavascriptで加工して表示する事で、再構築せずに最新の情報を表示し続けることが可能になります。これは主にサイドバーで使われる、最近のコメントとかなんかが相当すると思います。元データ自身の再構築は必要なので、いかに共通で使えるようなモノを用意するかがポイントになるでしょう。ダイナミック・パブリッシングを使用する
ダイナミック・パブリッシングにする事で、そのテンプレートを再構築の対象から外せます。その実現にも現在は2種類あるようです。確かMT3.1からだと思ったけど、MovableTypeの標準機能としてのダイナミック・パブリッシングと、壱さんのプラグインによる「Perl版ダイナミック・パブリッシング」です。標準のダイナミックパブリッシングの欠点として皆が上げるのが、通常のプラグインが動作せず、ダイナミック・パブリッシング用に作られたプラグインを使用しなくてはならない点です。実際私もかなりの数のプラグインを使用していて、その6割以上が使用できなくなるため、ためらいがあります。
また、ダイナミック・パブリッシング時にテンプレート内にPHPのインクルードを使うと、正常にレンダリングが行われないようです。共通のモジュールを作っておいてPHPでインクルードする方法は使えません。Javascriptで読み込むのは可能なようですが、PHPと違い中身をJavascript用に変更しなくてはならないので、簡単にはいきそうもありません。たぶんJSONデータを読み込んで解決するのが、正解のような気がしています。
それに対して「Perl版ダイナミック・パブリッシング」は、Perlでリアルタイムに再構築を行うため、大半のプラグインを使用することができます。いくつか例外はあるようですが。
ただし、Perlでの再構築のため、若干オリジナルのPHPによるダイナミック・パブリッシングよりも時間がかかるようです。
取りあえず、それぞれを設置して、どういうものか比較しています。
詰め込む要素数が違うので単純に比較できないですけど、体感的にはかなり早く感じます。ただし逆にスタティックじゃないため、ページを表示する動作自体はすこしまたされるようになりますが。
- Newer >: ブログの考え方(+スパム対策)
- < Older: ブクマ数表示プラグイン
ping a Trackback
- TrackBack URL for this entry.(1)
Comments:(4)
-
said
January 4, 2007 2:34 AM
|
ReplyThis!
あけましておめでとうございます_(..)_
ちょうど気になってることに関しての判り易い解説で勉強になりました。先日ちょうど、ダイナミックパブリッシングには失敗したとこでしたし、他のMTサイトさん方に比べてエントリーは少ないにしても、再構築動作について考えてましたので。それもあって、日記部は分離とかやってみてるんですが。
動作を早くするのって、MTの重要なテーマですね。
本年度もどうぞ宜しくお願い致します。-
-
replied for
arata's comment
January 4, 2007 8:35 AM
|
ReplyThis!
あけまして、おめでとうございます。
実はarataさんのエントリーもチェックした上で書いてたんですよ。
そういえば、bzbellさんも目標に挙げてましたんで、今年はダイナミック・パブリッシングの年になるかな?
本当はCGIいじって、再構築対象減らすのもありかなって思ってるんですけど。arataさんのブログ、いい感じですよ。色々参考になる部分が多いと思います。今年も、よろしくお願いいたしますね。
-
-
said
January 4, 2007 2:04 PM
|
ReplyThis!
あけましておめでとうございます。
去年はお世話になりました。ちょうどダイナミック・パブリッシングが話題になっていたので、ダイナミック使いとしても一言。
私が使っているのはMT標準のダイナミック・パブリッシングですが、Perlのプラグインも使えますよ。そこだけ静的生成にして<$MTInclude$>で読み込めばOKですので。私はこの方法でMT標準のダイナミックにも関わらず、Perlのプラグインも多数使っています。
また、ダイナミックにすると<$MTInclude$>タグの動きが静的生成時とは違って動的になります。そのため、<$MTInclude$>でPHPインクルードと全く同じことが出来るんですよ。ですので、「共通のモジュールを作っておいてPHPでインクルードする方法」はPHPの部分を<$MTInclude file="***.php"$>で読み込むようにすれば問題なしで使えますよ。是非お試しあれ。
Smartyと併用すれば<$MTInclude$>内でMTの変数タグも使えますので、応用範囲が広いです。また、httpで始まるファイルをインクルードしたい場合は{{fetch file="○○"}}を使って下さい。これでダイナミック・パブリッシングで他サーバーのファイル読み込みもOKです。頁分割もSmartyでプラグインなしで簡単に実装できますので、MT標準のダイナミック、おすすめです。phpなので動作も軽くて速いですしね。MT標準ダイナミックなら、Perl版と違ってややこしいことする必要なく、管理画面でチェックを入れるだけで簡単に導入できますから、もっと広まっていってほしいものです。
ということで、MT標準ダイナミック派としては少し擁護してみるのでした(笑)。
それでは今年もよろしくお願い致します。-
-
replied for
TAEKO's comment
January 4, 2007 3:42 PM
|
ReplyThis!
TAEKOさん、明けましておめでとうございます。
><$MTInclude file=・・
ですか。いろいろインクルードの方法試してみてたんですが、これは気づいてませんでした。というか、確か以前エントリーで書いてらしたような・・・
テンプレートの構成によって、実現方法が色々あって時間かかりそうですが、せめてコメント待ちを1/3程度に短縮したいと思ってがんばってます。
今年もよろしくお願いいたします。
-




スクリプトの読み込みが完了していません。
メールフォーム(Javascriptを使用していません)や、
Twitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。