似非静的コンテンツで使用感を変えない方法†
- ページ: BugTrack2
- 投稿者: MCI_Error
- 優先順位: 普通
- 状態: 保留
- カテゴリー: 本体新機能
- 投稿日: 2005-07-09 (土) 04:51:41
- バージョン: 1.4.5_1
メッセージ†
.htaccessとmod_rewriteを使用した静的コンテンツに見せかける方法ですが、擬似コマンドとページ名データベースを作成することでブラケットネームなどをそのまま使用しつつ利用できます。
参考までに私のホームページで見てください。ページ数が莫大な数になるとオーバーヘッドを要しますが、一般的なコンテンツ量でしたらさほどの負担にはならないでしょう。
設置に関して技術的な知識が必要となりますが、SEO的には多少よろしいかと。
ここに書き込むのが初めてなので要領がよくわかりませんがソースが必要なら書きます。
動作概要†
あくまでプラグインを実装するのではなく、プラグインを判別するシステムを用いてページを識別するということです。
mod_rewiteによる書き換え
↓
index.php読み込み
↓
データベース初期化。読み込み
↓
init.php読み込み
↓
$_PUT $_GET など入力クエリの整理
↓
擬似コマンドの判別? readコマンドへの書き換え : 通常処理
↓
通常処理
↓
データベース未登録コンテンツのチェック、追加
↓
index.phpにもどる
↓
データベースソート。保存
↓
終了
流れはこんな感じ。データベースというのはハッシュを使用して各コンテンツのタイトルを記憶するだけです。私のところでは「$page」を使用して自サイト内の作成済ページ名をmake_link.php::make_pagelink等のところでデータベースの登録チェックを行い、必要であれば登録するようにしてます。
読み込むときにはreadコマンドで使用するエンコード済のページ名が整数リテラル(まぁIDといったほうがわかりやすいね)から即変換されるようになっているわけです。
コマンド名を「rename」などとして、
http://hoge.net/123456.html
↓
http://hoge.net/index.php?cmd=rename&value=123456
↓
if ($vars['cmd'] == 'rename'){
{
$vars['cmd'] = 'read' ; $vars['page']= get_pagename_from_id($vars['value']);
}
といった風にリネームし(実際にはもうちょっと複雑なことをしています)、init.phpにおける初期処置中に(通常、クエリがページ名のみとして判別される直前)コマンドが該当する場合はvalueがDBで示すページ名を引き出しreadコマンドに引き充てるということです。
- pgid とかいうプラグインで実現されてる機能ではなかったかと思うのですが。 --
- プラグイン実装じゃありません 擬似プラグインです。 -- MCI
- この方法で有効な点は、現在既にいくらかのコンテンツを作成されているWikiでも改造を行うことで、書き換え不要で全てのコンテンツが静的コンテンツ風に自動書き換えされることです。 -- MCI
- 「書き換え不要」という点が一番の強みでしょうね。上でも書かれているようにほぼ同じ事をpgidプラグインで実現できますが、リンクを全て書き換える必要があるため、ある程度発展したWikiでは実装がかなり困難ですからね。 --
- 問題はどれくらいボトルネックになるかと言うこと。 --
- Wiki全体の処理量からいったら微々たる物だとは思いますが、単純にいうとページの数だけの連想配列が読み込まれ、それから任意のIDを検索するという方法なんで、ある程度推測可能な範囲内だと思います。鬼のようにコンテンツが多ければとんでもなく重くなりますが、それでもWiki内部でのページ読み込みに掛かる時間からすればかなり少ないでしょうねw -- MCI
- なるほど。でしたら是非とも本体に組み込んで欲しい物ですね。 --
- こんにちは :) 試す段階(それをする別の方)や検証する段階(それをする別の方、特にPHPやPukiWikiに詳しい立場の)が発生してもいないのに、話だけで本体に組み込む方向へと引っ張るのは無理がありますよ (^^; -- henoheno
- むむむ、確かにこの段階で「組み込む」まで発言するのには無理がありましたね。ごめんなさい。 --
- ページ内のリンクの実体が自動的に修正されるというのは興味深いです :) 小粋に仕立てるなら、 「データベース」の部分はこの場合テキストベースにしない方が良さそうですね*1。それとそのデータベースをメンテナンスする、コマンドラインベースのツールが欲しくなります。 -- henoheno
- DBというと小難しいことやってるように聞こえますが、現在の段階では単純にインデックス付けを行ってるだけなんですよねw だからメンテナンスとかの機能をつけるとなるとそれに対応するプラグインなどを用意したらかなり便利になるかもしれません。 -- MCI
- あとはおっしゃるようにパーセントエンコーディング済の日本語文字列などをそのまま読み込む状態だとDBが冗長化するので、EncodeDecodeを行って圧縮したほうがスペースパフォーマンスは向上するでしょう -- MC