投稿日時: 03/09/03 03:49:40
某掲示板のある方の投稿より「閲覧する場合のサーバ負荷(左にあるほど負担が少ない 数値は適当にやったab一秒間にこなせるリクエスト数)ふたば/萌え/菅(400)<<<<<〜<<<<<<レッツ(35)<<<Joyful-PHP(20)<<<<<Joyful-Perl(6)<<<<<<<<<imgboard(2)
ふたば,萌え,菅はログは全てHTMLで排出しているのでリロード時にかかるCGIとしての負荷は全く無い。imgboardと他のを比べるといかにimgboardが重いか改めて感じますな」
コメント
imgboardはアップローダではなく、画像掲示板、つまりフォトコミュニケーションソフトですが、画像掲示板として見ると、実際は他の掲示板よりも表示が高速ですし、それほど重くないです。(^^)
これはつまり、実際にブラウザ上でアクセスして人間が掲示板の画像を見て鑑賞するまでの時間が早いということです。それは使っている人は経験としてわかることなのですが・・・たまにベンチマークソフトの使い方を知らずに見当違いなものを測定し、その「研究成果」をみんなに力説する方がいるので・・迷信が定着する前に誤解を解いておきたいとおもいます。
誤解の元は、Apache Bench(以下ab)で計るものの実体が、一部の運営者の方に正確に理解されていないということにあります。abで掲示板のURLを入れて測定しているのは、テキスト部分に対する1httpリクエストに必要な時間だけであり、つまり、画像ファイルを含まないHTMLのテキストデータに対するレスポンス時間(の逆数)です。
画像掲示板の場合、1ページを構成するデータは一般に、画像をIMGタグで埋め込んでいる非常に小さいHTMLのテキスト部分と、IMGタグで埋め込まれた画像データ郡(サイズは大きい)で画面が構成されるのですが、画像は画像で掲示板のURLとは別にURLを持つので、ブラウザやApacheから見ると別のhttpリクエストになります。ですので、abでは画像部分は測定されません。つまり、abで測定してわかるのはHTMLの骨組みのテキストデータを取得する処理の時間であり、「画像掲示板」の表示に必要な本当の処理時間ではないのです。したがって、これを測定しても、サーバ性能の優劣はわかりますが、画像掲示板の種類による性能差を測る指標にはなりません。(というか、ほとんど無関係ですね)
もう少し、具体的な例で説明しましょう。例えば標準的な1ページあたり7つの100KB画像を埋め込んだ掲示板画面の表示を考えて見ます。
1.HTMLの骨組み・・・5KB程度
2.画像ファイル・・・100x7=700KB
ここで、abで掲示板のURLを叩いて測定しているのは1の5KBのデータを取得し終わるまでの時間に過ぎません。これはわずか5KB程度のテキストデータですので、非常に軽いデータです。この場合、HTML吐き出し型掲示板はテキストのHTMLをリクエストするだけですので、非常に早いレスポンスで処理が終わりますのでabの処理数は多くなります。(記事のabはそれにしても遅いので、かなり古いサーバを使っていると思われますが・・)
一方CGIによる吐き出し型掲示板は毎回CGIがライブラリを読んだり、計算したり、カウンターでカウントしたり、様々な処理をしてから5KBのデータを出すので、前者と比較すると遅くなります(といっても数十から百ms単位の話です)。ですので、先のケースと比較するとabの値はかなり悪くなります。しかし、ここで注意しなければならないのは、1を受け取った時点では、ブラウザは画像を画面に表示できていないということです。つまりユーザはまだ絵が見えていない状態なのです。
実際に画像が表示されるには1のテキストデータをブラウザが受信し、HTMLをパーズ処理して分解し解釈し、HTML中に埋め込まれたIMGタグのURLをブラウザが見つけて解釈し、各画像毎に新たに別のhttpリクエストをブラウザが7回サーバに発行し、その7つのhttpリクエストに対してそれぞれの画像データがある程度ブラウザへ読み込まれて、画像の縦横のサイズをブラウザがヘッダ解析後に解釈できてから初めてレイアウトが完了し、それから初めて「目に見える形」でブラウザ上で画像が埋め込まれた掲示板1ページが見えるようになるわけです。
通常の埋めこみ式やHTML吐き出し式の場合、最初のHTMLテキスト部には、レイアウトに必要な画像の縦横サイズが入っていないため、1の処理が終わり、その後2の処理が進み、合計数百KBの画像を送り出さないとレイアウトは完了せず、これはCGIの初期化とかとは比較にならないほど時間がかかる秒単位の処理なのですが、それが完了するまで掲示板はユーザ表示されません。
一方imgboardの場合は、画像の表示が始まるまえに、サーバ上で画像のサイズを計算した上ですべて縦横サイズが指定完了したHTMLを送り出すので、レイアウトは1を送り終わった段階で完結しており、サーバによるIMGの送り出しと同時に表示は並行して進みます。つまり、最初はわずかに数十ms単位で出遅れますが、本当に時間がかかる部分は秒単位で高速になりますので、結果としては、最終的に表示が格段に速くなるわけです。これがimgboardの体感的な速さの秘密です。
確かに、そうはいってもR6では実際の画像を埋め込んでいますので、管理者がアップロードの許諾サイズを極端に大きくしていると、レイアウトが早くても、実際の画像をすべて表示完了するまでの時間が遅くなりますが、それはR7ではサムネイル画像を作っていますので、その問題は解決します。
また、R6で大きめの画像を埋め込んでいる場合も、掲示板の用途によってはサムネイルがない方がユーザにとって、トータルで高速な場合もあります。ユーザの希望を集計するとそうなっているということです。詳細は過去の記事を参照してください。
【記事番号:242】 プレビュー用の縮小画像を作って、表示を早くしてほしい
http://www.big.or.jp/~talk/t-club/soft/faq01/bbs.cgi?md=fd&parent=242
HTML吐き出し式がいいか、CGI式直接吐き出し式がいいかは諸説あるところだと思いますが、imgboardも初期版はHTML吐き出し型だったのですが、管理の手間やレイアウト変更の自由さ、引越しのしやすさ、データ矛盾の発生の頻度、ワード検索機能の有無、上げ下げ機能、機種別対応のHTML吐き出し、つまり携帯対応の困難さ、FTPによるバックアップに膨大な時間がかかる点など、いろいろ考えた上で、今はCGI吐き出し式になっています。Pentium100MHzみたいな古いパソコンを利活用してLinuxで趣味でサーバを動かしている場合はお薦めしませんが、今の一般的な商用プロバイダサーバの平均的能力を考えれば、閲覧時のCGI処理はたいした負荷ではないので、特に負荷が重いというケースはあまりないと考えています。究極的にはHTML式の方が軽いですが、もうHTML式という選択は現実的でないでしょう。いろいろ考えて、ユーザにとってベストバランスのものを提供しようと思っていますので、迷信に迷うことなく信じてimgboardをご利用いただければと思います。(^^)