再構築うぜぇからやっぱWordPressだよねっていうWeb屋は...いや、まぁ何だ、ちゃんと考えようぜ。
公開日 : 2007-07-30 01:07:11
はっきり言おう。タイトルはネタ! (笑)
昨日のWebSigで質問いただいた件の補足。というか元々は別々の質問だったんだけど何かうまく答えられなかったような気がして帰りの新幹線の中で何となく考えていたこと。
静的生成とアクセシビリティは実は良く似たテーマ
「ウェブアクセシビリティの人からMTの人になったのは何故(<ちょっと表現違うけどこういうことだよね。)」「静的生成と動的生成とMTとWPと...Why MT?」という2つの質問。
サイト作成側が楽しようと考え過ぎ
* これはWeb屋の話ね。個人のブログとかは別。好きなもの使えばいいと思うし。
再構築うぜぇからWPだよね、ってのは安易すぎるんじゃねえか、と思うのだ。作り手がユーザーに配慮して苦労するってのはWeb屋なら普通のことじゃね?
アクセシビリティ実装うぜぇから「なんちゃってマークアップ」マンセーってのとどこが違うというのだ。
* 何だか前にも書いた↓気がするな。
従来のサイト制作は制作者が"がしがし"コーディングして作ってたわけだろ? いつからそんなに偉くなったわけ? あんた作成者だぜ? ユーザー気分になってないか? クライアントが再構築重いって? 「御社のお客様のためです。我慢してください」って言えよ。いやマジで。
何と言うかちょっとだけ真面目に書くと、CMSのユーザーとしての自分とサイトを訪問してくれるユーザーのどちらの利益を優先するか、ということ。CMSの普及によってそのあたりがまぁ何だ、勘違いする人が増えたりしてないかな、ってことだ。
動的生成と静的生成で一つ付け加えておくと、「動的生成は常にセキュリティリスク考えなきゃならない運命にある」ってことも忘れないようにしようね。
だから、まぁ何だ、「趣味は再構築」ってのは結構マジで言ってるわけですな。
結論:「静的」対「動的」ってのは全然本質的な議論じゃねぇんだよ。
と、ここまではネタ(長っ!)。
高速化とキャッシュについて真面目に考えてみるかも
小川さんに「真面目に高速化する気ないの?」って言われちゃったので少し考えてみた。考えただけだけど。
このブログのように、右カラム以外再構築が必要ない場合、再構築不要な部分をキャッシュに入れてしまえば良いわけだ。つまり、エントリー自身は更新されていないわけだから、右側のメニュー以外の部分は一旦再構築したらキャッシュしておいて、次回の再構築の際にはそれを使うわけ。そして右側のカラム部分はMTIncludeでも良いけどキャッシュを使っても良いようにする。
ファイルをディスクに書き込むから再構築は負荷、というのは 「ガセ」
良くある誤解だからこれまでにも書いたが念のため。ファイルをディスクに書き込むのが負荷、というのはガセ。こういうこと言う人は信用しないこと。
もちろんディスクに書き込まない方が負担は軽減されるが、節約できる部分って実は知れているのだ。
時間がかかるのは「テンプレートを読み込み、テンプレートタグを解釈し、データベースから必要なデータを読み込み、グローバルフィルター等による処理を行ってHTMLを組み立てる」部分である。ソース読めばわかるしいくつかの実験をしてみれば明らかである。つまりはMTなら$build->compileして$build->buildするところね。
例えばMT::BuiltChacheとか
builtcache_id | int | 一意なID |
---|---|---|
builtcache_object_id | int | オブジェクトのID |
builtcache_object_type | varchar | entryとかcategoryとか |
builtcache_blog_id | int | ブログID |
builtcache_template_name | varchar | モジュール名(IDでもいいかな) |
builtcache_modified_on | timestamp | キャッシュされた日時 |
builtcache_html | text | 構築されたHTML(テキスト) |
<MTIncludefromCache module="hoge" type="Individual">
<MTIncludefromCache module="hage" type="Index">
例えば type=Individual だったらエントリーIDとテンプレートモジュール名「hoge」からキャッシュの有無をチェック。キャッシュが存在すればキャッシュの modified_on とエントリーの modified_on を比較して、キャッシュを使うべきであれば builtcache_html を返す。
キャッシュを使うべきではない場合、テンプレートモジュール「hoge」を再構築してキャッシュに保存すると同時にリプライする。
type=Indexの場合は単純に modified_on を見て一定時間内であればそれを使う。そうでなければ再構築してキャッシュに保存すると同時にリプライする。
問題はモジュールに使えるMTタグが限定されることかなぁ。つまり各エントリーのブロックとかはキャッシュできるけど、カテゴリーのエントリー一覧とかのコンテナタグごとモジュール化しても実質無意味だし。
う〜ん、どんなもんでっしゃろ。むしろやっぱりメモリにキャッシュですかねぇ。