アルファサード株式会社 代表取締役 野田 純生のブログ


DynamicMTMLの初期化を軽量化する。


公開日 : 2012-02-03 15:50:26


藤本さんが書かれていたのでDynamicMTMLに絞って初期化の軽量化について書きます。

真新しいMacBook Air(13インチモデル 1.8GHz Intel Core i7 メモリ4GB 1333 MHz DDR3)上のMAMP2.0.5、PHP Version 5.3.6+MySQL5.5.9で計測しました。

計測はDynamicMTML、PowerCMSを突っ込んだ状態でSmart Blogテーマのトプページで計測します。まずは素の状態で計測(単なるPHPファイル)。

...数字に差がない...ときどき0.0001くらいの数値が出ます。ということで仮に0.0001秒としましょう(速いよMBA)。

前提条件

さてここからいよいよ計測していくわけですが、まず、DynamicMTMLはファイルキャッシュのしくみを持っていて、キャッシュが使える状況であればそれを使えということになります(管理画面でチェックボックスにチェック入れるだけです)。今回は当然ですが、それが使えない場合の軽量化、がテーマです。尚、条件付きGETの有効チェックボックスは必要に応じて入れると良いと思います。

条件付きGETってなに?という方はこちらを。

DynamicMTMLの初期化の流れ

DynamicMTML及びMTのダイナミックの初期化の流れを以下におおまかに書きます。

  • mt-config.cgiの設定値などを読み込む
  • ダイナミックパブリッシングのライブラリ(mt/php以下のファイル群)、プラグイン、addons以下のphpライブラリをスキャンする。
  • この時、グローバルモディファイア等を登録する
  • 各プラグインのphpディレクトリ以下の init.foo.php があればこれを実行する。
  • DB接続して、設定値等を読み込み、ブログをロードする
  • ファイルパスからmt_fileinfoレコードを取得して、どのアーカイブかを判断、エントリー等をロードしてコンテクストをセットする
  • テンプレートをビルドする

正確には上記の処理の各所でコールバックが呼ばれ、コールバックプラグインが登録されていればそいつが処理されます。

さて、「ダイナミックパブリッシングのライブラリ(mt/php以下のファイル群)、プラグイン、addons以下のphpライブラリをスキャンする。」ってさりげなく書きましたけど、mt_dir_以下のphp/libディレクト以下のphpファイルいくつありますか? 500以上ありますね。PowerCMSやプラグインやDynamicMTMLも...あわせると1000超えますよね。つまり、初期化の際にこれらすべてスキャンして、init.foo.phpがないか、modifier.foo.phpがないか調べてます。実際は微々たる時間ですけどね。ただ、この辺はeAcceleratorなんかを使うことで多少は改善されます。

また、init.foo.phpの件については、例えば Commercial.pack/php/init.CustomFields.php は何をしているかというと、DBに登録されているカスタムフィールドをロードして、タグ名をsmartyに動的に登録しています(つまりSQLのクエリが投げられてんですね)。カスタムフィールドのタグからの出力をダイナミックに行わない場合、こいつは要らないことになります。他にMultiBlog/php/init.MultiBlog.phpなんかもタグ登録系です。

また「ブログのロード」「mt_fileinfoレコードを取得」ってありますが、例えば携帯、スマホ分岐のみにDynamicMTMLを使っている場合、DB要らないですよね。これ、実はDB接続なしでDynamicMTMLを実行する方法があります。ドキュメントルート以下に生成されている .mtview.phpの先頭付近

    $blog_id      = 1; // 1はブログ/ウェブサイトのID

こいつをコメントアウトすると、DBの初期化をスキップして処理を続行するんですね。

ここら辺から、以下の施策によって初期化の軽量化を図ることにします。

  • eAcceleratorやXcacheを有効にする
  • プラグインの数を減らす
  • DB接続しない

以下、DynamicMTML利用時の各計測結果(10回計測した平均値です)。実際の効果についてはサーバーやDBの状態、運用しているサイトによって違うと思いますし、必要に応じてこういうアプローチがとれる、という程度の参考にしてください。

デフォルトの状態

    0.001767516

※気になるってほどの時間じゃないですけどね...続けます。

Xcacheを有効にした状態で計測

    0.001712704

Xcacheの代わりにeAccelerator(以下、eAccelerator有効で継続)

追記:あまり効果が出ていないように見えるのはSSDのため。HDD環境では高速化が期待できます

    0.001612711

標準以外のプラグインなし

    0.000941825

各プラグインディレクトリ以下のphp/init.foo.phpのみ削除

    0.000869989

プラグイン(addon)なし

    0.000636888

blog_id指定なし

    0.000617242
カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ