![]() ■■■ 403 Forbidden ■■■
Back 『TOK2com』 http://tok2.com/ |
最終更新:2007.03.18
[サポート掲示板] [デバッグ掲示板]
CGI高速化改造研究 |
このページでは、既存の掲示板CGIの処理速度を向上させるための改造を行っています。
特記事項 |
- 当サイトで公開されているCGIのサポート先はサポート掲示板になります。KENT WEBさんや猫マニアの館さんには問い合わせないでください。
- 既に設置済みのTreeBBS01をこの改造CGIに置き換える場合には、念のため必ず掲示板のログファイルをバックアップしてください。
特にCGIの設定の間違い、つまりログ保存件数や、過去ログ保存設定を変更するのを忘れるなどが原因で、既存のログの一部を失うということは、ありがちなミスですのでくれぐれもご注意ください。
TreeBBS01の高速化 |
TreeBBS01とは、KENT WEBさんのWEB FORUMをベースに猫マニアの館さんが改造したCGIです。
この掲示板CGIは、記事のログが1つのファイルになっている関係上、ログが巨大になるとCGIの処理が重くなってしまいます。
高速化のための改造ポイントとしては、記事のログとは別にインデックスファイル(標準では treebbs01_idx1.cgi と treebbs01_idx2.cgi)を作成し、記事の一覧を表示するときにはそのインデックスファイルを参照するようにすると、記事の一覧表示にかかる処理時間が短縮されます。
改造点はこれだけです。ソースを比較すれば、大幅に改造した部分は無いとわかるでしょう。
(インデックスファイルは、記事の投稿・修正・削除した時に自動的に更新されます。また、インデックスファイルが存在しない、またはインデックスファイルに記録された最新の記事番号と、記事のログに記録されたそれ一致しない場合にもインデックスファイルを更新します)
なお、本改造では記事のログの形式はそのままなので、既存のTreeBBS01のCGIをこのCGIに差し替えるだけで掲示板CGIの高速化が行えます。また、何か不都合があれば、元のCGIにそのまま戻すことができます。
また、下記の動作テストでは、処理時間を測定する機能を追加し、どれだけ処理速度が向上したかを数値で判断できるようにしてあります。
動作テストとダウンロード |
※サーバー負荷を抑えるため、動作テストページは頻繁にリロードしないでください。
・2007.03.18 TreeBBS01 オリジナル版 動作テストページ ダウンロード 測定機能付 通常版 TreeBBS01 Speedy版 動作テストページ ダウンロード 測定機能付 通常版 測定に使用したログ ダウンロード 旧バージョン
- 処理時間測定機能付きバージョンは、サーバーによっては動作しないので注意してください。
- ZIPファイルの中には、置き換えるCGIのファイルしか入っておりません。それ以外の必要なファイルはTreeBBS01からダウンロードしたファイルのものをそのまま使用してください。
- 動作テストページで使用しているCGIは記事の投稿・修正・削除が無効になっています。
- 測定に使用したログは、スクリプトで自動作成したものです。
- 上記のTreeBBS01 オリジナル版は、一番下の補足説明にあるバグ修正を行ったバージョンです。
処理速度の測定条件 |
スレッド数=50 スレッド内の子記事数=20 記事のサイズ=全角38文字×200行
ログサイズ=16.11 Mbyte
測定値はTOK2サーバーでの結果です。何回かリロードして結果が安定してからの値です。なお、時間帯によっても結果は異なると思います。
処理速度の測定結果 |
TreeBBS01 オリジナル版 TreeBBS01 Speedy版 高速化率(倍) 結果 記事の一覧を表示する(子記事非表示) 136ミリ秒 2ミリ秒 68 ☆ 記事の一覧を表示する(子記事表示) 136ミリ秒 28ミリ秒 4.86 ◎ 記事の一覧を新着順で表示する 173ミリ秒 61ミリ秒 2.84 ◎ 新着記事10件を表示 200ミリ秒 26ミリ秒 7.69 ◎ 一番最初の記事1つを表示する 5ミリ秒 5ミリ秒 1 ○ 一番最後の記事1つを表示する 133ミリ秒 133ミリ秒 1 △ 一番最初のスレッドを一括表示する 9ミリ秒 9ミリ秒 1 ○ 一番最後のスレッドを一括表示する 140ミリ秒 140ミリ秒 1 △ ワード検索-最初の10件 101ミリ秒 101ミリ秒 1 △ ワード検索-最後の10件 101ミリ秒 101ミリ秒 1 △
☆著しく高速化された ◎高速化が達成された ○元から処理が高速である △処理が重い ×特に処理が重い
考察 |
予想通りの結果ですが、記事の一覧、記事の一覧を新着順で表示、新着記事10件を表示に関してはかなりの高速化が行われています。表示するものやログの内容にもよりますが、数倍から数十倍の高速化になります。
しかしその他の処理では高速化処理を行っていないので全く変化がありません。また、特に重いのが、「一番最後の記事1つを表示」と「一番最後のスレッドを一括表示」、それと「ワード検索」です。
ただし、一般的な掲示板の使われ方だと、一番閲覧回数が多いのは記事の一覧と、最新の投稿記事であると推測されます。
そして、投稿記事の表示は、一覧の上のほうにある記事、つまり最新に近いものほど処理が高速です。
メリット・デメリットを考えると、普通の用途の場合には高速化処理はこれでも十分だと思います。
なお、意外な結果だったのが、ワード検索が思ったよりも処理が重くないということです(それでも重いですが)。
また、一番最初のスレッドを一括で表示するときは極めて高速だということも意外でした。
利用規定について |
このスクリプトのオリジナルであるWEB FORUMの配布元のKENT WEBさんの利用規定です。必ず目を通しておいて下さい。このスクリプトをダウンロードする場合、無条件にこの「利用規定」に同意したものとみなされます。 また、改造CGIの元となったTreeBBS01 の配布元である猫マニアの館さんの利用規定にも合わせて目を通しておいて下さい。
なお、ここで配布されているスクリプトの利用規定については、すべて上記の利用規定に準ずるものとします。
CGIの設置方法 |
まず最初に猫マニアの館さんのTreeBBS01をダウンロードして、そのCGIが動作するようにしてください。
最初にオリジナルのCGIを設置する理由は、もしCGIが動作しない場合に、設置方法が悪いのか、それとも改造CGIに問題があるのかどうか、原因を切り分けるためです。
また、本ページからダウンロードできるZIPファイルには、置き換え用のファイルしか入っていないため、ここで配布しているファイルのみをサーバーに設置しても全く動作しません。
オリジナルのTreeBBS01が動作するようになったら、今度はこのページのファイルをダウンロードし、必要な設定個所を設定してサーバーにアップロードしてください。
なお、オリジナルのCGIと比較して、設定項目が6つ増えています。# 投稿の最大長 $contentlen = 51200; (投稿できる記事のサイズを指定します) # インデックスファイル名(子記事表示用) $idxfile1 = './treebbs01_idx1.cgi'; (インデックスファイルのファイル名を指定します) # インデックスファイル名(子記事非表示用) $idxfile2 = './treebbs01_idx2.cgi'; (インデックスファイルのファイル名を指定します) # 投稿時のパスワードの設定 # 0 = パスワードの入力は任意 # 1 = パスワードの入力が必須 # 2 = パスワードの入力が必須、さらにレス時はルート記事のものと一致するパスワードが必要 # 3 = パスワードの入力が必須、さらにレス時は同一スレッド内のいずれかの記事と一致するパスワードが必要 # # 補足:2または3に設定すると、スレッド作成者以外の第三者による返信が禁止されます。 # ただし、既に運用中の掲示板に対してパスワードロックを有効にする場合、 # 既存のログの中には同一スレッド内で異なったパスワードが # 設定されている可能性があるので、できれば2より3を推奨します。 $in_pwd = 0; (投稿時、パスワードの入力を必須にするかどうか、そしてパスワードロック機能を指定します) # スパム投稿対策 # → このスイッチを 1 にするとひらがな・カタカナが含まれない投稿が禁止されます。 # 非日本語圏からのスパム投稿の多くはこれで排除できます。 # 0 : no # 1 : yes $deny_nonkana = 0; (スパム投稿のうち、非日本語圏からのスパム投稿の多くはこれで排除できます)
※上記にも書きましたが、インデックスファイルは自動で作成されるファイルです。
インデックスファイルをサーバーにftpで転送する必要はありませんし、仮にそのファイルを削除したとしても、次に掲示板の記事一覧を表示する時に自動で作成されます。
補足説明 |
改造CGIは、オリジナル版に存在したいくつかの問題を修正及び機能の変更を行っております。以下はその一覧です。
- 問題の修正
- Windows+Apache+ActivePerlの環境ではクッキーの値が正しく反映されない問題を修正。
- レス記事を投稿するときに、そのレス元となる記事が存在しなかった場合、ログの内容がおかしくなる問題を修正。
- ツリーの途中の記事を投稿者が削除した後に、その削除した記事の親の記事を削除すると場合によってはログの内容がおかしくなる問題を修正。
- TOK2にCGIを設置した場合、クッキーが記録されなかった問題を修正。
- ツリー表示(子記事非表示)の時、一番下にあるスレッドの返信数が表示されなかった問題を修正。
- 子記事非表示の時、場合によってはNew!マークが正しく表示されなかった問題を修正(Speedy版のみ)。
- 機能の変更・追加
- 管理モードでインデックスの再構築機能を追加した(Speedy版のみ)。これは記事のログとインデックスファイルの整合性が取れなくなった場合のための機能ですが、手作業で記事のログを編集したなどの場合以外は、よほどのことがない限りは必要ないと思います。
- 子記事非表示の時、レスが付いているスレッドには親記事の投稿日ではなくレス記事の最終投稿日を表示するようにした(Speedy版のみ)。
- パスワード入力必須機能を追加した。
- スレッド作成者以外の第三者の投稿を制限する機能を追加した。
- プレビューをONにして投稿した場合、従来は記事一覧の画面に移動していたのを投稿後の確認画面へ移動するようにした。
- 記事閲覧時のHTML文書のヘッダ部のタイトル(<TITLE>〜</TITLE>)を掲示板タイトルではなく記事のタイトルを表示するようにした。
- 記事一覧の画面に記事件数と最大保持件数を表示するようにした。
- スパム対策機能を追加。非日本語圏からのスパム投稿の多くはこれで排除できます。この機能を有効にするためには $deny_nonkana を設定してください。
機知の問題点 |
現在このCGIで発見されている問題点は以下の通りです。
- 投稿の名前、メールアドレス、URL、タイトルにダブルコーテーション( " )を使用した場合、その文字以降が無効になってしまう。
- 記事一覧の子記事非表示モードにおいて、スレッドのルート記事が削除されている場合にNew!マークが表示されない。ただし、実害は無いので修正予定はありません。
その他 |
- スパム対策機能とか入れたほうがいいかも。
- どうも、サーバーの設定でメモリ使用量制限がある場合、TreeBBS01はログが巨大だと一部の機能(投稿とか編集とか削除とか)がCGIエラーになる模様。
対処方法はありますが、それはサーバー上に一時ファイルを作成する必要があるので、今度はサーバーのディスクスペース(ホームページ容量)の空き容量が問題になるかも。
更新履歴 |
- 2006.07.23 Rev.A0
- 初期公開
- 2006.07.27 Rev.A1
- パスワード入力必須機能を追加
- 2006.08.13 Rev.A2
- スレッド作成者以外の第三者の投稿を制限する機能を追加
- プレビューをONにして投稿した場合、従来は投稿後に記事一覧の画面に移動していたのを投稿後の確認画面へ移動するようにした。
- 記事閲覧時のHTML文書のヘッダ部のタイトル(<TITLE>〜</TITLE>)を掲示板タイトルではなく記事のタイトルを表示するようにした。
- 記事一覧の画面に記事件数と最大保持件数を表示するようにした。
- 2007.03.18 Rev.A3
- スパム対策機能を追加 ($deny_nonkana で設定)
![]() ■■■ 403 Forbidden ■■■
Back 『TOK2com』 http://tok2.com/ |