CGI以外の方法で掲示板のプレビュー機能は実現できますか?

[上に] [前に] [次に]
MoW [E-Mail] [HomePage] 2000/01/24(月) 19:30:55
現在、Perlで掲示板のプログラムを書いているのですが、一部のHTMLタグの書き込みを許可するつもりです。
それに伴い、記事をファイルに書き込む前に、ユーザーにプレビューを表示して、「こんな感じになりますよ」と確認をしたいと考えています。

PerlによるCGIで、プレビューを実現するのは、比較的簡単だと思うのですが、出来る限りサーバに負荷をかけないプログラムを書きたいと思っています。そこで、この様なプレビューの機能は、JavaScript等の機能で実現可能なのでしょうか?

Perlにはかなり触れているのですが、JavaScriptは最近始めたばかりで・・・どなたか教えて下さい、よろしくお願いします。

EMI 2000/01/24(月) 19:42:19
JavaScriptで新しいWindowを開いて、そこにdocument.writeなどを
使ってプレビューを書き込めばいいのでは。

MoW [E-Mail] [HomePage] 2000/01/24(月) 20:10:48
書き忘れていましたが、メッセージ中のHTMLタグ(<>)は、Perlでは正規表現を使ってチェックしてから書き込みます。つまり、JavaScriptで入力された文字列のチェックができるのか?ということです。(始めからこう書けば良かったですね。すみません。)

aqua-J 2000/01/24(月) 20:31:45
>JavaScriptで入力された文字列のチェック
とは、何を意味しているのでしょうか?
私も、EMIさんと同じ解釈をしてましたが。

EMI 2000/01/24(月) 20:38:33
つまり、俺が発言した範囲のことは理解しているから、後はHTMLタグの含まれる発言をJavaScriptでどう整形してdocument.writeで書き出すか?‥‥‥という風に理解すればいいのでしょうか?

#ちなみに、この質問には答えられません。JavaScriptには詳しくないので。

B-Cus 2000/01/24(月) 20:49:14
> 出来る限りサーバに負荷をかけないプログラム
別にどうしても Javascript でやりたいのならいいですけど、
ここの結構繁盛している BBS でも、発言は一日に100件程度。
CGI プログラムが100回/day 起動して確認画面を出した
ところで、ほとんど変わらない気がします。

# それに費す労力は、閲覧時の負荷低減にかける方がよいかと。

MoW 2000/01/24(月) 21:03:53
>後はHTMLタグの含まれる発言をJavaScriptでどう整形してdocument.writeで書き出すか?‥‥‥という風に理解すればいいのでしょうか?

そういうことです。分かり難い書き込みをしてしまい、すみません。m(_ _)m

PerlのCGIプログラムの方では、メッセージ中のHTMLタグを検索し、
 ・許可しているタグなのか?
 ・開きと閉じの関係は正しいのか?
などをチェックして、場合によってはタグを修正・削除して、ファイルに書き込みますので、それと同じような事を、クライアント側で出来ないかなと・・・
やっぱり、難しいですかね。

>結構繁盛している BBS でも、発言は一日に100件程度。CGI プログラムが100回/day 起動して確認画面を出したところで、ほとんど変わらない気がします

確かにそうですよね。
ただ、深夜になると他のユーザーのチャットなどの影響で、サーバ側の処理に結構時間が掛かってしまうこともあるので、この様な質問をさせて頂いたしだいです。

すわみつお 2000/01/24(月) 21:40:08
なるべくクライアント側で処理をするようにしたいというお考え、
素晴らしいと思います。
この様に表示されますってページを時間かけて見せられても
面倒なだけと感じることも多々ありますから。
EMIさんのお考えの通り、window.open()で新しく開いたウィンドウに
document.write()でやる方法がベストかと思います。
タグに注意を払いたいとのことでしたが、それも頑張れば JavaScript で
出来るのではないでしょうか?
split() 等の文字列に関するメソッドを工夫すれば
よいと思います。
前々から掲示板に書き込む前にクライアント側で記事が確認できるものが
あればいいのにと思っていました。 頑張って作って下さい。

andi 2000/01/24(月) 21:47:58
JavaScriptでタグを整形する場合は
JavaScriptをオフにしている人や外部からの書き込みの場合を考えて
結局はPerlでタグのチェックをしなければならないと思いますよ。

MoW 2000/01/24(月) 22:16:56
[[解決]]
みなさん、いろいろとありがとうございます。

結局、勉強不足でした。split() とは?などと思い調べてみたら、JavaScriptでも
正規表現検索などが出来るのですね。(最初は、ライブラリ関数みたいな物を用意
しないとダメかな?などと思ってました。)ダグチェックが出来そうなので、これ
から頑張って勉強します。 そういう訳で、 一応「解決」ということにしておきま
す。

次の段階としては、 PerlのCGIプログラムの方にも言えるのですが、そのタグチェ
ックの方式を完璧な物にしないと・・・。JavaScriptでのタグチェックもPerlと同
じ方式にする、 即ちCGIプログラムの一部公開するようなモノですよね。(まぁ、
いたずらされても大して影響がない草の根掲示板だけど)完成度の高いタグチェッ
クのスクリプトを探す or 作らないと。

B-Cus 2000/01/24(月) 23:14:26
この件と離れて、一般論として書いておきます。

BBS なんてのは、1回の書き込みに対して100回以上の閲覧があるのも
めずらしくないわけで、負荷軽減のポイントは閲覧時にいかに
軽くするかにかかってきます。

例えば
 - 出力を HTML に保存して、閲覧時にはそれを書き出すだけにしておく
 - Last-Modified ヘッダを付ける
など。

Last-Modified を出さない場合、例えばサーチエンジンのロボットなどは
HEAD->GET しますが、Last-Modified すれば HEAD だけでやめてくれます。
また、web にアクセスしたとき、(ブラウザの設定にもよりますが)
If-Modified-Since で、
 「何月何日以降に更新されているか?」
と問い合わせます。もし CGI 側で Last-Modified ヘッダを
出力していれば、WWW サーバが日付を判断して、
 「更新されていない」
という短い返事を返します。これにより、ネットワークの負荷を減らせます。

# CGI プログラム側で 環境変数 HTTP_IF_MODIFIED_SINCE を参照し、
# 「更新されていない」ならばすぐに終了するようにすれば、
# マシンの負荷も減らせます。ついでに言っておくと、 REQUEST_METHOD == HEAD の時に
# すぐに処理を終了するのもアリですな。


もちろん書き込み時の負荷軽減も大切ですが、書き込み時に100倍
早くするより、閲覧時に2倍早くする方が ほとんどの場合効果があります。

moci 2000/01/25(火) 03:34:55
> もし CGI 側で Last-Modified ヘッダを
> 出力していれば、WWW サーバが日付を判断して、
>  「更新されていない」
> という短い返事を返します。これにより、ネットワークの負荷を減らせます。

確認した範囲では、Apacheの1.3.9(Win)ではその通りなのですが、
1.2.6(linux)では"Status: 304 Not Modified"は自分で判定して
出力してやらないとダメでした。1.2.xと1.3.Xの違いでしょうか?

B-Cus 2000/01/25(火) 04:22:41
かもしれません。確認したのは apache 1.3.9 です。
1.2.x はもう手元にないので調べてません。一応 apache の
changelog を読んだのですが、よくわかりませんでした。

もしそうなら、
> CGI プログラム側で 環境変数 HTTP_IF_MODIFIED_SINCE を参照し、
> 「更新されていない」ならばすぐに終了するようにすれば、
とするのは apache 1.2.x ではまずいですね。

全然関係ないですが、apache-1.3.11 がリリースされています。

MoW [E-Mail] [HomePage] 2000/01/26(水) 00:20:00
奥が深いですね。

現在、自分の掲示板はHTMLファイルを出力するようにしているので、閲覧に関して
はスムーズにいっています。ただ、ロボット検索に引っ掛かるのが気色悪くて、ど
うしようかと考えています。

とりあえず、今はHTMLのタグチェックのスクリプトを試行錯誤しながら作ってる段
階です。また何か質問するかもしれませんが、その時はよろしくお願いします。

[上に] [前に] [次に]