コンテンツの読み込みに時間がかかっています

動的を静的にしてみる事も考えてみよう

先日の a-blog cms Power User Training Camp 2010 Spring での私の発表した内容を公開しておきます。普段は静的なサイトを動的にする方法なんて事をよく話をしていますが、その逆の方法についてです。動的サイトの一番の問題は、表示に時間がかかる事です。1つのテンプレートに貼ってあるモジュールの数が少ない場合にはあまり問題になりませんが、キャッシュが利用されない時にモジュールが多くなってくると、どうしても時間がかかる事になります。

そこで、頻繁に変化しない部分については、テンプレートファイルを a-blog cms で生成させて動的部分を静的にしてみてはどうだろうという提案です。

<?php

$url = "http://localhost/include/header_inc.html";
$file = "./themes/company1/include/header_txt.html";

$lines = file($url);
$fp = fopen($file, 'w');

foreach ($lines as $line_num => $line) {
	fwrite($fp, $line);
}
fclose($fp);

print "publish !";

?>

例えば、company1のテーマで、ヘッダー部分を静的にしよう!とするのであれば

  1. http://localhost/include/header_inc.html を読み込み
  2. ./themes/company1/include/header_txt.html を開いて
  3. 1のデータをループさせ
  4. 2にデータを書き込み 5 . 繰り返し
  5. 2のファイルを閉じて
  6. 終了!

のような処理をします。場合によっては、トップページを静的に出力するのもいい方法かもしれません。後は、このプログラム内で管理者の時だけ動作するようにするとか、ログインしてる時にボタンを押して実行できるようにする事をして実際には利用する事になるかと思います。

ついでに、1.3の機能を利用してボタンを作ってみましょう。

<form action="publish.php" method="post" class="js-post_include adminBtn" target="#publish">
<input type="hidden" name="url" value="http://localhost/include/header_inc.html" />
<input type="hidden" name="file" value="./themes/company1/include/header_txt.html" />
<input type="submit" name="ACMS_POST_Publish" value="publish" />
</form>
<div id="publish"></div>

こんな感じに admin/action.html に追記します。ここでポイントになるのは、**class="js-post_include"** というトコロです。これをつける事によってページのリロード無しに部分的にHTMLを書き換える事ができるようになります。今回はこの機能を利用して更新した事を伝えるprint文を表示させています。

hiddenでurlとfileを送ってますので、最初のプログラムも少し修正してその情報を受け取れるようにした方が汎用的に利用できるようになりますね。アイデア次第で a-blog cms をカスタマイズする事が可能です。

こんな感じに、決められたファイルであれば簡単に静的出力のプログラムを用意する事は可能です。1つのモジュールの動作が、例えば0.1秒だったとするのであれば50個モジュールがあると表示に5秒かかってしまいます。テンプレート上のモジュールをユーザーの閲覧環境では減らすという事も考えてみてもいいかもしれません。


関連記事

この記事のハッシュタグ から関連する記事を表示しています。

PhotoCollage.js を a-blog cms のブログテーマに実装してみた

エントリー新規投稿画面で次のエントリーコードっぽいものを placeholder に表示させるカスタマイズ

a-blog cms のユーザーアイコンに Gravatar を反映するカスタマイズ

できるだけ簡単に子ブログにコンフィグセットを設定する方法を考える

コンフィグセットを利用していない時にコンフィグセット管理を表示させないカスタマイズを考えてみる

編集者権限でバナーモジュールをフロント側で編集できるような UI を使えるような実装を考える