動的を静的にしてみる事も考えてみよう
先日の 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のテーマで、ヘッダー部分を静的にしよう!とするのであれば
- http://localhost/include/header_inc.html を読み込み
- ./themes/company1/include/header_txt.html を開いて
- 1のデータをループさせ
- 2にデータを書き込み 5 . 繰り返し
- 2のファイルを閉じて
- 終了!
のような処理をします。場合によっては、トップページを静的に出力するのもいい方法かもしれません。後は、このプログラム内で管理者の時だけ動作するようにするとか、ログインしてる時にボタンを押して実行できるようにする事をして実際には利用する事になるかと思います。
ついでに、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秒かかってしまいます。テンプレート上のモジュールをユーザーの閲覧環境では減らすという事も考えてみてもいいかもしれません。