本文へ
Crossbreedクロスブリード

ホーム / ネット文化 / あなたのmovabletype、重たくないですか?

Movable Type

あなたのmovabletype、重たくないですか?(テンプレートモジュール化)

現在ここクロスブリードもエントリ数400を超え、日に日に重たくなってきました。

一番やっかいなのが、ちょっとした変更の際のリビルド。以前テンプレートに変更を加え、indivisual archives(個別記事)のリビルドを行ったとき等の事。

沢山のエントリをリビルド。これがどうやらサーバマシンに負担がかかるようで、リビルドを行いしばらく待っていると、

サーバがダウンした

という経験があります。そしてサーバ管理者にこっぴどく叱られたという苦い苦い思い出が蘇ります。

スポンサードリンク

そこで、まず考えたのが、「少しずつリビルドすればいいじゃねえか」という事。ぐぐってたら、ありました。

■「rebuild支援ツール」

一番重たくなる、Indivisual Archives(個別記事)のリビルドが少しずつできます。これでとりあえず、リビルド時にサーバに負担をかけることがなくなりました。

しかし、フツーにエントリするときには、MainIndex、Date-Based Archive、Category Archives、Indivisual Archivesの4つについてリビルドする為、一件の記事のエントリに

5分も待たなくてはいけないという罠が。

ウチのつくりがどのページも3カラムにしている為にページ毎の構築に時間がかかっているので自業自得といえば自業自得なんです。
しかし、このmovabletypeのデフォルトテンプレートのシンプル過ぎる個別記事ページがどうにも納得いかない。というのも、個別記事についてるのは、「前の記事」「次の記事」「トップ」の3つのリンクのみ。

検索エンジン等で飛んできた方に非常に優しくないつくりになっているのです。
個別ページは軽くする為なんでしょうが、納得いかなかった僕は、個別ページも、カテゴリページも、同じように表示させるように変更した。その結果、重たくなってしまったのです。この辺がmovabletypeって使えねえ、と他のweblogツールから移行して来たヒトが嘆く原因なのかもしれませんね。

で、この問題を解決すべく、調査をしたのが、「ページのモジュール化」だ。

ページ毎の全く同じ部分をひとつづつリビルドするのではなく、再利用しようというもの。

結果、数分かかっていた記事のエントリが数10秒程度で終わるようになった。これには感動した。この感動を皆さんにも味わっていただくべく、解説してみようと、こういうわけだ。

まず、こちらのエントリを参考に各アーカイブファイルをPHP化する必要がある。ページ分割はしてもしなくても良い。

■MTのPHP化とページ分割(当サイト記事)

次に、各テンプレートのバックアップを取っておく。いつでも元に戻せるようにね。テキストエディタかなんかに保存しておくと良い。

バックアップをとったら、Main Indexのテンプレートを眺め、どこがモジュール化できるのかを考える。ウチならまず、「最近頂いたコメント」だ。これは便宜上各ページに配置しているが、どのページも同じものを使っている。

という事はモジュール化のチャーンス!だ。

まず、main index内のコメントの部分のみを別の所にコピーする。テキストエディタ使用の事。
サンプルは下記の通り。ちなみにの部分はコメント行になります。こういうのを入れておくと後で見返すとき便利。タメになるなあ(笑

MTの管理画面からTempleteの編集、

「新しいインデックス・テンプレートを作る」

をクリックする。そして次のように設定する

・テンプレートの名前 : commentlist
・出力ファイル名 : commentlist.php
・自動的に再構築する : チェック外す
・テンプレートにリンクするファイル : 空白
・テンプレートの中身 : 上でコピーしたテキスト

これで保存してリビルドすると新しいファイル、commentlist.phpが完成する。

ここで重要なのが上の「自動的に再構築する」。
リンクリスト等、記事と関係ない項目の場合はチェックを外す事。記事の投稿時にリビルド対象から外れるからだ。

次に、このcommentlist.phpをMain Indexに貼り付けてみる。phpの威力が発揮されるのはここからだ。

Main Indexのコメントの部分を丸ごと削除して変わりに


include("/(username)/public_html/commentlist.php"); ?>

これだけ!

これで上でコピーしたコメント部の記述がたった一行で終わる。
この調子で、MYBLOGLIST、BLOGPEOPLE、はてなアンテナもひとまとめ、カテゴリリストもひとまとめ、上部メニューもひとまとめ、オススメ音楽もひとまとめ。これだけでも充分リビルドは速くなるし、かなりの軽量化になるはず。

軽量化の他にも利点はある。
例えば、先のコメントリストの一部分の修正を行いたい際に、今までは全てリビルドしなくてはいけなかったが、モジュール化を施す事により、「commentlist.php」だけをリビルドするだけでよいのだ。激しく便利。

しかし、まだモジュール化できるところがあることにお気付きだろうか?

究極のモジュール化は、記事の部分のモジュール化だ。

まさか記事部までモジュール化とは気付かなかった。Boycott Street 221Bさんがやっておられました。すごー。

まず「新しいアーカイブテンプレート」を作成。そこに

とだけ入れて作成。テンプレートの名前は仮に「EntryBody」とします。

次に、新しいIndivisual Archivesの設定。

BLOGの設定 → アーカイブの設定 → 「新しく追加」をクリック

アーカイブの種類は「Indivisual」、テンプレートは先程作成した「EntryBody」とします。

次に、アーカイブの設定に戻って、「アーカイブファイルのテンプレート」のところに、先のEntryBodyを書き出すファイル名を設定します。ウチの場合は、

_body.php

とやってます。この辺から少し難しくなってくるかな。後少し。

次に、各ファイル(Main Index、Category Archive、Date-Based Archive、Individual Entry Archive)の

を


include"/(username)/public_html/archives/_body.php";?>

「username」はサーバによって違います。分からないヒトはサーバ管理者に尋ねて下さい。http://からはじまる直接パスでも可です。

これで完了。全てをリビルドしてみましょう。書き出したファイルは以前よりファイルサイズが小さくなっているはずです。

リビルド時間も大幅に短縮することができました。かなり感動します。

こういうカスタマイズって最初からやっておくべきかもですね。

04/07/31追記

Fenrir's BLogさんところで、驚愕の軽量化方法をされているようなので紹介します。

■テンプレート共通化とJavaScriptによる軽量化

javascriptによってモジュール化を構築しています。確かにサーバに負荷が多少なりともかかるphpよりはクライアントサイドに弱冠負荷がかかるjavascriptの方が軽量化に関しては良さそうです。興味のある方は是非。ウチもやってみようかな。

スポンサードリンク

※このサイトはさくらインターネットのサーバを利用しています。

■gi(ギィー)福岡浄水通りの絣(かすり)と手作り雑貨のセレクトショップ
↑サイト内紹介記事
【PR】BTOパソコンの先駆者 FRONTIER

読者のコメント17件

記事が公開された当時に寄せられたものを、そのまま残しています。受付は終了しました。

  1. fenrir

    PHPではなくJavaScriptでインクルードしてみました。よろしければご覧ください。
    http://fenrir.naruoka.org/archives/000306.html

  2. 管理人ayu

    >fenrirさん
    おお!情報ありがとうございます。javascriptの方が軽くて良さそうですよねえ。
    追記で紹介させていただきます。

  3. ted

    /(username)/public_html/archives/
    は
    <$MTBlogSitePath$>archives/
    でいいっすよね?

    これではなく 直で指定しているのも
    リビルド時間対策なんですか??

  4. ted

    ここ
    コメントをPreviewすると投稿できないです(T-T

  5. 管理人ayu

    >tedさん
    この方が少し早いってどこかで読んだような、読まなかったような・・・
    良く解らないっす!

  6. ひま

    はじめまして。
    こちらの記事を参考にさせて頂きました。
    まだエントリが70くらいしかないのですが、日に日に時間がかかるようになってきたので、ちょっとやってみました。
    とりあえずサイドバーを似たような性格のもの同士、部品に分けてみたら、テンプレートもすっきりして分かりやすくなり後からの微調整が簡素化された分楽になったし、部品分けしたお陰で各ページの見た目も統一することが出来ました。
    どうもありがとうございます。
    MTは今年に入って挑戦してみたのですが、ayuさんの記事がとても親切で分かりやすかったので、私にも出来ました!
    今後も参考にさせて頂きたいと思います。よろしくお願いします。

  7. 管理人ayu

    >ひまさん
    やっぱりおっしゃる通り、後からの調整が楽なのが一番いいですね。
    そろそろまたカスタマイズネタ書くとしますよ。

  8. showBOO

    参考になりました!!!
    ありがとうございました!!!

  9. ももぱぱ

    はじめまして。
    MovableTypeっていろんなことができるんですね。
    HTMLを勉強し始めてまだ3ヶ月の僕にはむずかし内容が多いですが...

    カテゴリーページなどは、ページ分割ができるのでPHPに、個別ページはJavascriptでしてみました。

  10. myao

    今日この記事を参考にさせていただいて
    モジュール化出来ましたありがとうございました。

    PS.とってもかわいい赤ちゃんですね。おめでとうございます♪

  11. マオ

    初めまして。
    我楽さん経由でこちらのエントリを参考にさせて頂きました。
    ありがとうございました!
    まだお引越し作業中なので現行のlivedoorの方に
    こちらのエントリをリンクさせて頂きました。
    また参考にさせて頂くこともあると思いますが
    よろしくお願い致します。

  12. 1096

    またもや参考にさせて頂きました。
    スキルのない私にとって有り難いサイトです。
    どうも有り難うございました。
    ではでは。

  13. fukabee

    早速これ見てモジュール化してみました。
    ですが、投稿済みのエントリを更新した場合、タイムスタンプでファイル名をつけているので、古いファイルが残ったままになります。
    過去の記事について更新した場合、その時の日付でファイルが作成され、最新の記事になってしまいました。

    これの回避方法ってありますかね?

  14. 管理人ayu

    >fukabeeさん
    過去の記事について更新しても、日付はそのままになるはずですが・・・
    古いファイルは全て削除してリビルドすることをオススメします。

    php化による、個別記事のURL変更に関する対策は

    https://cross-breed.com/archives/200401251333.php

    こちらを参考にしてみるとよいかもしれません。

  15. fukabee

    早速の返事ありがとうございます。
    更新の件は、使っている「ubicast blogger」が原因のようで、ブラウザで更新したら上書きしていました。

    それと、個別記事をクリックすると、単なるテキストしか表示しません。
    FFFTPで個別のファイルを除くと、投稿した記事のみなので、そういう現象になるのでしょうが、他の方のサイトなどを見ても、普通にレイアウトされた表示なってるのはなぜでしょうか?

  16. すみれかおる

    始めまして。検索経由でやってきました。
    私のサイトでも、このテクニックを応用してAmazonアフィリエイトの部分をモジュール化することが出来ました。本当にありがとうございました。
    なお、私のサイトではPHPを使わずにモジュール化する方法を解説しておりますので、よろしければご覧になってください。
    http://sumin.sakura.ne.jp/archives/2005/12/php.html

    余談ですが、BlogPeopleに追加させていただきました。
    またわからないことがありましたら参考にさせていただくかもしれませんので、今後ともよろしくお願いいたします。

  17. abex

    モジュール化されてこの重さか・・・
    大変だねぇ。