ホーム > HTMLに役立つヒント
> ADSLでMACサーバ・実験室 > AS Tree BBSの設計
非力なマシンでも実用的な速度で動くツリー形式掲示板が欲しい。ってわけでまずは設計。さて、はたして完成まで行くのか(?_?) 名前はとりあえずeasyBBS TR。考え方はeasyBBSが元になっているから。そのtree表示版という意味である。
→2001/12/29 名前について、本家easyBBSの田中求之さんから「easyBBS」の名前を使わないでほしいとのクレームをうけました。そこでAS Tree BBSと改名しました。
以下、最新状況はこちら。
2001/12/19
AppleScriptでCGIを作る基礎から勉強中。おおざっぱなところはわかってきた。Tanaka's OSAXの翻訳も進んでいる。
少しずつスクリプトを書き始めた。
2001/12/17
perlでツリー表示、日付順表示、新規発言は順調に実装できた。問題はコメント発言である。これ、面倒なんだよなぁ。
で、現在までのところで、開発しているG3マシンで0.8秒程度かかっている。このサーバ(PB5300)では4倍から5倍の時間が(もっとかな?)かかる見込みなので、5倍としても4秒という遅さである。コメント発言の処理はさらに時間がかかる。やはりperlでは無理だな。
これ以上perlで開発するのはあきらめてAppleScriptに戻るか。
2001/12/16
データ構造の考察は終わったのでAppleScriptの勉強。最初から躓いてしまった。取り合えずperlでやってみようかな? 遅くなりそうだなぁ。
2001/12/14
まーだどんなものにしようか設計をいじっている状態。考えれば考えるほどeasyBBSってよくできてるなと感心する。あちこち同様の問題にぶつかっているのだ。
2001/12/13
どんな手法が使えるのか研究するために、Tanaka's OSAXの機能を研究しはじめた。ところが、解説ページ「Tanaka's
OSAX 2.0ディクショナリ」が英文で難航中。ちびちび日本語訳をはじめた。公開できないのが残念。
2001/12/12
このページを作り始めた。
・目標はツリー表示のeasyBBS
・スレッドをツリー表示にして、話の流れを把握しやすくする。
・各スレッド(easyBBSでいう発言)の中の発言にはタイトルも付けられるようにする。
・カスタマイズできるようにアップルスクリプトで書く。データ構造からして、perlでは処理が遅くなるはず(perlは1ファイルの中のある部分を取り替えたり付け足したりというのが苦手なのだ。perlでやるならタブ区切りの簡易データベース構造にするか、1発言1ファイルとするほうが楽。それだとフツーのcgiと変わらない)。
・高速化のためにTanaka's OSAXを使う。
・高速化のために、easyBBSシリーズ同様、できるだけHTMLファイルをただ出力するだけ、という仕様にする。本来ツリー式はデータベースを持ち、それを元に各発言ファイルを有機的につなぎ合わせて表示するのがスジ。しかし、その方式ではcgiの負荷が必然的に高くなる。できるだけつなぎ合わせるファイルを少なくしようというのが狙い。
ただし、easyBBSが基本的に書き込み操作以外はHTMLを送り出すだけなのに対し、こちらは必ずファイルの作業をかますことになるので低速化は否めないだろう。
| AS_BBSフォルダ │ ├AS_BBS.cgi │ ├会議室その1 │ ├発言1-A │ ├発言1-B │ ├発言2-A │ ├発言2-B │ ├ … │ ├会議室その2 │ ├発言1-A │ ├発言1-B │ ├発言2-A │ ├発言2-B │ ├ … │ … |
左のように、1つの発言(スレッド)をAとBの2ファイルに分けて記録していく。表示するときには、これらを組み合わせて表示する(画面イメージは「画面表示イメージ」を参照)。 Aブロックはツリーだけを受け持つ。このため、Aブロックだけを連続して表示させると、ツリー一覧画面ができあがる。 Bブロックには発言の内容が蓄積されていく。 ここが問題で、ちょっと検証してみる。 ●単独発言 ●順当な発言 ●発言1、2の後に、発言3が1のコメントとしてつけられた場合 できるだけ挿入位置を探しやすいように、コメント文を挿入しておくのがいいだろう。<!--■発言番号■-->なんて具合。これをさがして、その前に発言一式を挿入する。 スレッドを読み込んだ後、デリミタをにして分解し、<!--■発言番号終わり■-->+発言内容一式をデリミタにセットし直して構成し直し、元のファイルに上書き出力するという手法。 Aブロックの手法も同様だ。 |
コメント時には、どの発言に対するコメントかわかるように、やはりコメントを頼りに対象発言を表示するようにする。コメントする場合の「コメント」ボタンを表示するときには、ちゃんと「○○番にコメントする」として発言番号を出力すればよい。
モードとしては、何も指定がないなら一覧表示、commentならコメントモード、newなら新規発言、発言番号ならその発言ファイルを表示といったところか。
この方式では、Bブロックファイルを無制限の大きさにするわけにはいかないので、easyBBSと同様にファイルの大きさを制限する必要がある。デフォルトで200KB程度にするのが良さそうだ。
あー、メモリ喰いそう。
で、200KBを越す場合には、新しいファイルを自動的につくって、その発言にリンクを貼るようにする。これで一応スレッドを追うことができる。
|
●スレッド一覧画面 ┏━━━━━━━━━━━━━━━━━┓ |
●各スレッド表示画面 ┏━━━━━━━━━━━━━━━━━┓ |
●発言時
ポイントは発言時だ。最初の書き込みなら問題はない。該当の会議室に日付と時間を付けたAとBファイルを出力すればよい。
何かにコメントするときが問題だ。コメント元の発言だけ切り出して表示しなくてはならない。高速にできるか不安。Tanaka's
OSAXを研究しよう。
さらに、200KBを超える場合はそのコメントに「ファイルサイズの制限を越えるので○○番に続きます」と1文を入れ、リンクを貼る必要がある。その上で自動的に新しいファイルをつくってやる。こちらにはどこからの続きなのかわかるようにしなくてはならない。
ホーム > HTMLに役立つヒント
> ADSLでMACサーバ・実験室 > AS_BBSの設計