■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
プログラマが2chを救う!?
- 528 :ナナシサソ :01/08/26 15:47
-  ロックするとマズイんじゃない? 
 ロックする時間を短くする為にBigbufferを使ってるんでは?
 
 
- 529 :デフォルトの名無しさん :01/08/26 15:48
-  もう面倒だからイチから書き直しちゃえば? 
 
 
- 530 :デフォルトの名無しさん :01/08/26 15:50
-  >>520 
 > for(i=0;i<zz_fileSize;i++) {
 > if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ;
 > }
 
 for (i = zz_fileSize; --i >= 0; ) {
 if(BigBuffer[i] == '\0') BigBuffer[i] = '*' ;
 }
 
 これで少し速くならない?(せこいけど…)
 
 
- 531 :デフォルトの名無しさん :01/08/26 15:53
-  >>530 
 C++に書き直してます、なんとなく。
 そこの部分は後続の行数を数える関数とまとめて
 
 env.lineMax = 0;
 // TODO
 char* p = env.BigBuffer;
 char* pline = env.BigBuffer;
 const char* const p1 = env.BigBuffer+env.fileSize;
 for(; p!=p1; ++p0) {
 switch(*p) {
 case '\0':
 *p='*';
 break;
 case '\n':
 if(env.lineMax>RES_RED) {
 goto exit_getenv;
 }
 env.BigLine[env.lineMax++] = pline;
 pline = p+1;
 *p = '\0';
 break;
 }
 }
 exit_getenv:
 return 0;
 
 としたほうが速いと思います。
 
 
- 532 :531 :01/08/26 15:54
-  C++固有コードとミスがあるけど愛嬌ってことで。 
 
 
- 533 :デフォルトの名無しさん :01/08/26 15:57
-  >>526 
 神業では無いと思うけど・・・元の CGI が御タコ過ぎただけ。
 でも、元の CGI が神業レベルで最適化されていたら、2CHは終わっていたな。。
 
 しかし、焼け石に水か、、、あとは営業努力に期待しよう。
 
 
- 534 :名無し :01/08/26 15:58
-  今日モーニング娘の新メンバー決定があるので、 
 負荷テストが出来ると思います。
 
 
- 535 :デフォルトの名無しさん :01/08/26 16:00
-  >>526 
 ただでさえ「転送量が……」って言っているんだから、
 何回も同じ文章を、しかもAA付きでコピペするのは
 止めようや。
 
 
- 536 :デフォルトの名無しさん :01/08/26 16:20
-  Web製作版のほうで、 
 レスの表示数にFORMを使ってはどうかって意見が出てるよ。
 
 
- 537 :デフォルトの名無しさん :01/08/26 16:21
-  >>530 
 本気で高速化を考えているなら、その部分コメントアウトしちゃえ。
 つか、dat_readとdat_outはまとめた方が速くなるような。
 
 
- 538 :デフォルトの名無しさん :01/08/26 16:23
-  43kのファイルの読み込み、内容の全スキャンを20000回ループさせた結果。 
 (gprofだと、カーネルで費やされた時間が出なかったので、bash-builtinのtimeで計測)
 
 fread版:
 real    1m3.433s
 user    0m23.230s
 sys     0m6.480s
 
 mmap版:
 real    0m50.591s
 user    0m23.090s
 sys     0m0.780s
 
 この差を大きいとみるか、小さいとみるか。
 
 
- 539 :デフォルトの名無しさん :01/08/26 16:24
-  つまらない質問だったらごめん。 
 
 >530
 '\0' を'*'に変換する処理って何の意味があるの?
 
 
- 540 :デフォルトの名無しさん :01/08/26 16:27
-  >>539 
 >>520を参照。壊れちゃってる物、仕方ないと思うけどなあ。
 datファイルを直すのは、別スクリプトにしたら?
 
 
- 541 :デフォルトの名無しさん :01/08/26 16:28
-  >>538 
 systemでかなり差が出ているのでmmapを使うべきでしょう
 ただでさえforkにgzipのexecとsystem酷使してますし…
 
 
- 542 :デフォルトの名無しさん :01/08/26 16:28
-  datファイルは\nで行を区切っているけど、 
 これをgetLineMaxで\n→\0に置換して行単位に、
 res_splitで<>→\0\0に置換してフィールド単位に
 ばらして、それぞれ\0終端文字列(いわゆるC形式の文字列)として
 扱ってる。
 なので、壊れたdatファイルで途中に\0が入ってると処理がおかしくなるので、
 最初の段階で\0をつぶしてるらしい。
 
 
- 543 :デフォルトの名無しさん :01/08/26 16:33
-  >540 >542 
 にゃるほど、サンクス。
 
 
- 544 :デフォルトの名無しさん :01/08/26 16:34
-  >541 
 ただ、mmapにすると、バッファを書き換えられなくなるので、
 現在のようにBigBufferを扱いやすいように修正しながら\0終端ベースの
 処理ってのはできず、全体的に行、フィールドの先頭ポインタとその長さを保持して
 それを使いながらの処理になる。
 すろと、コストのかかる部分が移動するかもしれない。
 あと、readの動作中にあぼーんが発生すると、mmapで得たバッファの内容がずれる
 リスクがある(普通の書き込みなら追加なので問題ないと思う)。
 
 
- 545 :デフォルトの名無しさん :01/08/26 16:36
-  >539 
 いや、実はよく分かっていません。
 元ソースのdat_read()にそういう処理があるっていうだけで…
 
 推測ですが、datの読み込み後、何らかの理由でバッファに'\0'が入ってきた場合
 他の関数の処理に不都合をもたらすので、
 とりあえず'*'に変換しとけ、っていうだけかも知れません。
 (実際はあり得ない?)
 
 
- 546 :デフォルトの名無しさん :01/08/26 16:37
-  とりあえずこんなんでもかなり効くよ 
 if (strlen(BigBuffer) != zz_fileSize) {
 for(i=0;i<zz_fileSize;i++)
 {
 if (BigBuffer[i] == '\0') BigBuffer[i] = '*';
 }
 }
 
 標準関数侮れず
 
 
- 547 :datについて知ってること :01/08/26 16:38
-  誰かdatのきちんとした仕様を知ってる人いる? 
 サーバによってあぼーんされた時の挙動が違ったりする。
 一番最後のデミリタがなくなる事がある。
 あぼーんのスクリプトによっても違うみたい。入り混じってる。
 デミリタが減るのは1があぼーんされる時にしか出ない気がする。
 
 あとバイナリ貼り付けたりすると、本文中に<>が出現することもある。
 レス1件にデミリタが10個とかって事もあった。
 
 '\0'はエレメントの頭かケツにしか付かないと思う。
 10000個くらい調べたけど、要素の途中に挟まってるのは見つからんかった。
 
 この手の話は多分みみずんが一番詳しいと思う。
 
 
- 548 :545 :01/08/26 16:38
-  げ、考えてる間に正確なレスが。バカ丸出しで逝ってきます。(w 
 
 
- 549 :デフォルトの名無しさん :01/08/26 16:40
-  >>546 
 結局BigBufferを最後まで一文字ずつ調べるわけで、
 まあ、BigBuffer[i]='*';が無いだけ速いか。
 
 
- 550 :デフォルトの名無しさん :01/08/26 16:42
-  >546 
 すばらしい。strlenみたいな多用されるやつは、アセンブラレベルで、
 カリカリにチューンされてるはずだからね。
 
 
- 551 :デフォルトの名無しさん :01/08/26 16:43
-  あとres_split()内でfindSplitter()も使うのやめちゃって 
 p0 = strstr(s[i-1],"<>");
 の方が速いよ
 
 まあ546の変更とあわせて実時間10.89秒が9.93秒になるくらいなのだけども
 
 
- 552 :549 :01/08/26 16:43
-  >>549 
 自己レス。
 if(BigBuffer[i]=='\0')が成立しなければ一緒だ。逆に遅いか?
 ライブラリ内部がアセンブラででも最適化されてりゃ速い、
 かもしれない。
 
 
- 553 :550 :01/08/26 16:43
-  いや、よく考えたら、strlenの結果使えば、'\0'の位置なんて 
 既にわかっていることに気づいた。
 
 
- 554 :デフォルトの名無しさん :01/08/26 16:45
-  >>553 
 '\0'が複数含まれていた場合を忘れてる。
 
 
- 555 :550 :01/08/26 16:46
-  int pos; 
 while ((pos = strnlen(BigBuffer, zz_fileSize)) != zz_fileSize)
 BigBuffer[pos] = '*';
 か。
 
 
- 556 :554 :01/08/26 16:47
-  >>555 
 失礼、忘れて無かった。
 
 
- 557 :デフォルトの名無しさん :01/08/26 16:49
-  >>553 
 これでいけるってこと?
 
 int BufferLen = strlen(BigBuffer);
 if (BufferLen != zz_fileSize) {
 if (BigBuffer[BufferLen] == '\0') BigBuffer[i] = '*';
 }
 
 
- 558 :デフォルトの名無しさん :01/08/26 16:50
-  int pos; 
 char *p = BigBuffer;
 int rest = zz_fileSize;
 while ((pos = strnlen(p, rest)) != rest)
 {
 p[pos] = '*';
 p += pos + 1;
 rest -= pos + 1;
 }
 
 
- 559 :554 :01/08/26 16:51
-  >>558 
 それなら複数'\0'があったときもコストが高くならなくていいね。
 
 
- 560 :デフォルトの名無しさん :01/08/26 16:51
-  strnlenも早いの? 
 
 
- 561 :デフォルトの名無しさん :01/08/26 16:52
-  >>552 
 少なくともLinuxのglibcの環境においては-O2つけたとしてもライブラリ使ったほうが速いようだ
 
 
- 562 :デフォルトの名無しさん :01/08/26 16:53
-  http://piza2.2ch.net/jisaku/dat/980503747.dat 
 ↑の2001/05/09(水) 12:41のすぐ上のレスみたいなのでも行ける?
 
 
- 563 :デフォルトの名無しさん :01/08/26 16:54
-  みんなで力を合わせれ! 
 
 gzip 圧縮や Last-Modified 対応など
 転送量軽減に関する話題は↓こちらでお願いします。
 2ch閉鎖の危機なんだと @UNIX板
 Part2.1
 http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998754174
 Part3.1
 http://cocoa.2ch.net/test/read.cgi?bbs=unix&key=998764722
 ↑作業がほぼまとまったためプログラム板の
 プログラマが2chを救う!?に移動したようです。
 
 read.cgi の無駄なコードの省略や高速化など
 関数毎の最適化については↓こちらでお願いします。
 プログラマが2chを救う!? @プログラム板
 http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998736516
 2号
 http://natto.2ch.net/test/read.cgi?bbs=hp&key=998774537
 
 無駄なタグの消去やHTMLの修正などは↓こちらでお願いします。
 スキルの高い方知恵を貸してください @web制作管理板
 http://natto.2ch.net/test/read.cgi?bbs=hp&key=998741961
 
 新CGIが導入された板の動作報告は↓こちらにどうぞ。
 2chの動作報告はここで。 @批判要望板
 http://teri.2ch.net/test/read.cgi?bbs=accuse&key=998808733
 
 応援やグチ、今後の2chはどうなるか、
 何故この事態が起こったかなどの議論は↓こちらでどうぞ。
 UNIX板で2chのプログラムを開発中 @批判要望板
 パート2
 http://teri.2ch.net/test/read.cgi?bbs=accuse&key=998757160
 パート3
 http://teri.2ch.net/test/read.cgi?bbs=accuse&key=998765190
 
 
 なおUNIX板では
 ・板の統廃合についてのスレ
 ・浩之氏の公式発言についてのスレ
 ・それぞれの板の問題点をあげるスレ
 などが立っています。
 
 
 他の板の住人へ
 
 ここのURLを張らないで応援板のURLを張ってください。
 
 
- 564 :デフォルトの名無しさん :01/08/26 16:56
-  >'\0' を'*'に変換する処理 
 これって、いかにも付け焼刃的に「バグを見つけたのであとから付けました」って
 感じがするんだよね。
 というのは、直後で行数を数えるために全体をスキャンしているのに
 同時に行っていないから。
 
 全体をスキャンするのは1回にして、
 ただし、全てを同時に行う。
 やることは、
 ・行区切りの検索と位置保存
 ・'\0'の'*'への変換
 ・& -> & への 変換 … ただし、& は変換しない
 (・@+`の変換 … そのレスは前に詰めなければいけない)
 (・" ??)
 
 つーかさ、Splitした結果をBigLineに持たせるべき。
 struct lines {
 char *name;
 char *mail;
 char *date;
 char *text;
 };
 
 それと、機能追加?になるけどあった方が良いと思うのがさ、
 オプションでのtext内部にある<br>以外のタグの削除ね。
 要は>>nnがえらく転送量をふやしちゃうんだから、
 <a href=...> と </a>のタグを無条件に削除するオプションがあってもいい。
 ただ、BigBuffer内部で前詰めになるから、面倒くさいし、
 各レスの先頭にタグが入っている場合が多いから、
 実質memmoveの繰り返しになっちゃいそう。
 
 それなるくらいなら、BigBufferの他にもう一つバッファを作って、
 コピーしながら置換したほうがいいかもしれないけどね。
 これなら、mmapとも併用できるでしょ。
 
 
- 565 :がいしゅつ? :01/08/26 16:59
-  一つ分かったことは、 
 「ひろゆきがプログラマとしてタコである」
 ということだ。
 
 
- 566 :  :01/08/26 17:00
-  >>565 
 ここまでの負荷を想定してはじめから作っていたのならそうかもな。
 でもソレはありえないだろ。
 
 
- 567 :デフォルトの名無しさん :01/08/26 17:02
-  >>564 
 >オプションでのtext内部にある<br>以外のタグの削除ね。
 コストが高いと思うなあ。それはbbbs.cgiでやった方が良いのでは?
 
 
- 568 :デフォルトの名無しさん :01/08/26 17:03
-  今までスクリプトって博之がつくってたの? 
 
 
- 569 :デフォルトの名無しさん :01/08/26 17:05
-  今のスクリプトはひろゆきじゃないはず。C言語出来ないって言ってた。 
 
 
- 570 :名無し ◆NtVkSITE  :01/08/26 17:05
-  >>568 
 トオルさんや削除忍さんのようですが。
 
 
- 571 :G :01/08/26 17:05
-  ********************************** 
 
 あのさ、もうUNIX板でのZIP関係の手入れは一段落したんだから、
 つぎはこのスレでのコード最適化結果をどんどん実際に反映していこう。
 生きてるFTPサーバか何かを提供してくれる人と、トランクソースに
 ここで出てきた差し替えコードを反映する、意欲あるプログラマの人は
 手を上げてくれよ。
 俺?すまそ、力不足だ。
 
 *********************************
 
 
- 572 :名無し :01/08/26 17:07
-  暫定版をリリースして、 
 デザインを含めて1からプログラムを
 作り直したほうがよいと思う。
 
 新しいプロジェクトを立ち上げましょうよ。
 
 
- 573 :G  :01/08/26 17:08
-  ちなみに571をカキコしようとして、書き込むボタンを押したら 
 一面文字化けのページが帰ってきたぞ。
 read.cgi ver5.02には、チューニング以前のバグもまだあるのか?
 
 
- 574 :デフォルトの名無しさん :01/08/26 17:09
-  ひろゆきって専攻何? 
 大学4年の夏に米国に心理学の留学行っている。
 プログラマーじゃないのかな?
 
 
- 575 :G  :01/08/26 17:09
-  ていうか 
 http://piza2.2ch.net/tech/index2.htm
 をまともに読めるヤツいる?
 
 
- 576 :デフォルトの名無しさん :01/08/26 17:10
-  >>575 
 読めてるよ。
 
 
- 577 :デフォルトの名無しさん :01/08/26 17:11
-  >>575 
 IEでhttp/1.1チェック入れてないとか?
 
 
- 578 :G  :01/08/26 17:12
-  分かった。 
 カキコすると自動的に飛んでいく
 http://piza2.2ch.net/tech/index2.htm
 は今明らかにバグってて、
 正しいのは
 http://piza2.2ch.net/tech/index2.html
 だよ。これはすぐ直せるだろうけど、
 どうすりゃいいんだよ。
 
 
- 579 :名無し娘。 ◆vP.bOZFQ  :01/08/26 17:13
-  Unix板の方で、最新版が 
 http://star.endless.ne.jp/users/forcount/contents/scriptmaker/read11.c
 から
 http://star.endless.ne.jp/users/forcount/contents/scriptmaker/read11.rev1.c
 に更新されました。
 変更点は、613行目
 - if(pid=fork() == 0){
 + if((pid=fork()) == 0){
 
 
- 580 :デフォルトの名無しさん :01/08/26 17:13
-  >>572 
 それをやるなら、datのフォーマットから見直したいな。
 ls=10でもdatを全部読み込むってのは、ちょっとなあ。
 
 
- 581 :デフォルトの名無しさん :01/08/26 17:15
-  1にも書いてあるが、今のところ道は3つだと思ってる。 
 
 1)発想はそのままでCode書き直しなど全面書き換え最適化を行う
 2)P2Pで頑張る
 3)その他のアイデアでやってみる
 
 現状動いているのは2だけだけど、1に手を付けるのもいいかもしれない。
 3はまだ未知数。
 
 
- 582 :デフォルトの名無しさん :01/08/26 17:16
-  datフォーマットを見直さなくても 
 レスの位置を記録したインデックス作るだけで
 かなり効果無い?
 
 
- 583 :デフォルトの名無しさん :01/08/26 17:17
-  >580 
 だよねぇ。
 ファイルにインデックスでもつけたほうがいいよね。
 既存のデータをどうするかが問題だけど。
 
 
- 584 :デフォルトの名無しさん :01/08/26 17:19
-  インデックスは付けたいね。 
 でもそれをやるとすると、bbs.cgiの方に手を入れなくてはならない。
 bbs.cgiのソースは公開されてた?
 
 
- 585 :デフォルトの名無しさん :01/08/26 17:20
-  >>578 
 バグではありません、仕様です(w
 負荷低減のため、htm側はzip圧縮ページなのな。
 mod_gzip入るまで待ちんしゃい。
 
 
- 586 :デフォルトの名無しさん :01/08/26 17:20
-  >>584 
 されてない。read.cgiのみ。
 
 
- 587 :デフォルトの名無しさん :01/08/26 17:22
-  そういうの突き詰めていくとバックエンドのデータはRDBで管理して、クライアント処理は 
 Servletで、とかなってくんだけどサーバ側の事情でアーキテクチャを大きく変えるのは難しそう。
 
 俺的には read.cgi の mod_2ch (Apache module) 化のが一つのゴールかなあ、って思うが。
 
 
- 588 :デフォルトの名無しちん :01/08/26 17:23
-  >>585 
 mod_gzipになるまでまだ1週間以上あるみたいだから
 とりあえず今は「.html」に飛ぶようにしておいた方がいいんじゃないの?
 
 
- 589 :デフォルトの名無しさん :01/08/26 17:25
-  すこし前に11REV1を落とされた方 
 修正ミスでした
 今は修正完了です
 アドレスは同じです
 
 
- 590 :564 :01/08/26 17:26
-  よーく考えたら、Splitや置換って全体に対しては必要なかったね。 
 実際のls=??等のリクエストがどんな割合で来てるのかわからんけど。
 
 つーことは逆に、
 getLineMax()にFileSizeを与えて、memchrで行を数えて、
 '\0'->'*'への置換をout_html()で行うようにするほうがいいかな?
 レスを全部読む場合は、全体を一括スキャンしたほうが効率的だろうけど、
 トータルではどうなるか。
 
 で、もし全体をスキャンするなら、特殊文字('\0','\n','<','&'等)をテーブルにして
 if (teble[*p] & flag) {
 switch (*p)
 ...
 }
 みたいな感じが良さそう。
 else if の繰り返しや全体をswitchにしてしまうよりまともだと思う。
 (負荷的には、キャッシュの関係があるから、試してみないとわからないけど)
 
 テーブルは8bitあるから、日本語文字やURLの終端判別にも使える。
 これも、スタートアップでテーブルを作るほうがソース的には楽だけど、
 負荷を考えると自力で作った方が良いかもね。
 
 なんか俺も良くわかってないから、素直に推移を見守りますわ。
 
 
- 591 :デフォルトの名無しさん :01/08/26 17:27
-  インデックス付けると、bbs.cgi以外にも、あぼ〜ん処理とかも 
 全部対応させなくちゃならない。それこそ大作業になるよ。
 
 
- 592 :デフォルトの名無しさん :01/08/26 17:28
-  >>587 
 mod_gzip付けるだけでも汎用のサーバーがどうのもめていたらしいからmod_2chというのも厳しいのではないかな?
 現状のデザインに不満を漏らしつつも何とか地道な改善を施すのはPGの宿命だよ。
 
 
- 593 :563 :01/08/26 17:33
-  あ、間違ってた・・・ 
 プログラマが2chを救う!? @プログラム板
 の2号は
 スキルの高い方知恵を貸してください @web制作管理板
 の方の2号だ。
 
 
- 594 :デフォルトの名無しさん :01/08/26 17:55
-  だからさーーーーー、早く実際の作業始めよーよー。 
 
 
- 595 :名無し娘。 ◆vP.bOZFQ  :01/08/26 17:55
-  お邪魔かもしれませんが、ちとまとめてみます。(作業中) 
 
 
- 596 :デフォルトの名無しさん :01/08/26 17:55
-  /*行区切りの検索、'\0'の変換、&->&の変換を一度にやるソース案*/ 
 
 char* pin = BigBuffer;
 char* linepin = BigBuffer;
 int line = 0;
 
 while(pin < &BigBuffer[zz_fileSize]){
 switch(*pin){
 case '\n':
 BigLine[line] = linepin;
 *pin = '\0';
 pin++;
 linepin = pin;
 line++;
 if(line > RES_RED){
 goto wend;
 }
 break;
 
 case '\0':
 *pin = '*';
 pin++;
 break;
 
 case '&':
 if(strncmp(pin, "&", 5) == 0){
 pin += 5;
 }else if(strncmp(pin, "&", 4) == 0){
 /*・・・・(^^;*/
 pin += 4;
 }
 break;
 
 default:
 pin++;
 break;
 }
 
 }
 
 wend:
 /*続き*/;
 
 
- 597 :デフォルトの名無しさん :01/08/26 17:57
-  JavaやDelphiのような優れた言語を使わず、 
 Cなんていう時代遅れの処理系を使っているのはなぜなんでしょう。
 それとも、ドキュンしかいないのでしょうか。
 
 
- 598 :名無し娘。 ◆vP.bOZFQ  :01/08/26 18:00
-  (あ、お話はどんどん続けておいてください) 
 
 
- 599 :sage :01/08/26 18:01
-  速いからじゃないの? 
 
 
- 600 :デフォルトの名無しさん :01/08/26 18:01
-  >>597 
 おまえいつからプログラムはじめた?
 
 
- 601 :デフォルトの名無しさん :01/08/26 18:01
-  Delphiて・・・2ちゃんってNTサーバーだっけ? 
 
 
- 602 :デフォルトの名無しさん :01/08/26 18:02
-  あおりはほーちちまちょー 
 
 
- 603 :デフォルトの名無しさん :01/08/26 18:02
-  >>597 
 はいはい中学生は学校の宿題でもしてて
 
 
- 604 :デフォルトの名無しさん :01/08/26 18:03
-  597 はいつもの厨房なので無視という方向で。 
 
 
- 605 :デフォルトの名無しさん :01/08/26 18:05
-  ところでこれまでに出た改良案をすべて 
 取り込んだものはどれくらい早くなるの?
 誰か試して。
 
 #俺もやりたいけど今手元にwinしかない、、。
 
 
- 606 :デフォルトの名無しさん :01/08/26 18:07
-  >605 
 ダッシュでCygwin落とせ。apacheも動くぞ。
 http://sources.redhat.com/cygwin/
 
 
- 607 :デフォルトの名無しさん :01/08/26 18:10
-  >>597 
 実際軽く動くのはどっち?
 
 
- 608 :デフォルトの名無しさん :01/08/26 18:11
-  bbs.cgiのソースは何故公開されない? 
 
 
- 609 :デフォルトの名無しさん :01/08/26 18:13
-  >608 
 実はばっちりログを保存していて、
 それがばれるのがいやだから。
 
 だったりして。
 
 
- 610 :デフォルトの名無しさん :01/08/26 18:14
-  >>608 
 ソース見ていたずらを思いつく人が出てくるからでは?
 
 
- 611 :デフォルトの名無しさん :01/08/26 18:21
-  >>607 
 言語の種類だけで決まる話では無い
 
 
- 612 :デフォルトの名無しさん :01/08/26 18:21
-  本気で2chのシステムを最適化したいんなら 
 bbs.cgiとか、他のモジュールも公開するべきだな。
 さらに俺を2週間ほど雇えば負荷総合的な負荷は5%程度まで縮小するかもな。
 まあ人月300くらいはもらうけど。
 
 
- 613 :デフォルトの名無しさん :01/08/26 18:22
-  安直にパスが全てべた書きされてるのではないか? 
 いろいろな管理用コマンドとかもいっしょに。
 
 
- 614 :名無しさん :01/08/26 18:23
-  一晩で軽くなるなら、いままで何やってたんだ? 
 
 
- 615 :    :01/08/26 18:24
-  >>612 現状を把握せずに、成果を約束できるのか?(w 
 
 
- 616 :デフォルトの名無しさん :01/08/26 18:26 ID:14u64k9s
-  短期的には、既存のスクリプトの改良/高速化の方向ですが、 
 結局は最初の議論に戻って、2ch全体のシステム設計から
 やり直さないといけないと思います。
 
 そちらのシステムデザインのスレを立てて始めたらどうでしょう?
 スレを建てる前に、まず、
 ・マスター(現在の2ch開発スタッフが望ましい)
 準マスター
 ・仕様、ソースなど現時点での決定事項がアップロードされる場所
 http://www.gedoh.org/aki/2ch/wiki/yukiwiki.cgi?TopPage で良いでしょう
 これらを決めて、スレのトップに明記する。
 ・・・でないと、スレ全体読み直すだけでかなりの労力です。
 
 read.cgiだけではなく、データフォーマットから全てやり直さないと
 駄目でしょう。。。オープンソースで常に改良していった方が。
 
 
- 617 :デフォルトの名無しさん :01/08/26 18:26 ID:Y5ufE4Do
-  >>615 
 「こんな外注先は害虫」の見本だよなぁ…
 
 
- 618 :名無し :01/08/26 18:28 ID:cNxfOPbY
-  read.cgi 更新してみてよ。 
 サーバー管理者いないんですか?
 
 
- 619 :デフォルトの名無しさん :01/08/26 18:28 ID:K3x70GYg
-  >>614 
 あの…一晩48時間なんだけど・・・
 
 
- 620 :デフォルトの名無しさん :01/08/26 18:29 ID:goYJpq5c
-  >478-479 修正案 
 char *zz_GetString2(char *dst,char tgt)
 {
 int i, len;
 int ch = (int)'&';  int ch2 = (int)'=';
 char *kk = zz_query_string;
 char *kk0, *kk1;
 for(i=0;i<200;i++)
 {
 if(kk[0] == tgt)
 {
 kk0 = strchr(kk,ch); /* & */
 if(!kk0) kk0 = strchr(kk,(int)'\0');
 kk1 = strchr(kk,ch2); /* = */
 len = kk0 - kk1 - 1;
 if(len > 0)
 {
 if(kk0) *kk0 = '\0';
 strncpy(dst,kk1+1,20);
 dst[20-1] = '\0';
 if(kk0) *kk0 = '&';
 return dst;
 }
 }
 kk = strchr(kk,ch);
 if(!kk) break;
 kk++;
 }
 }
 機能は >94 参照。zz_GetEnv から、
 zz_GetString2(zz_bs ,'b');
 などのように呼んでください。
 
 該当部分(
 bbs=unix&key=998764722&st=23&to=34&nofirst=true&imode=true
 のような文字列を zz_query_string としての、連続7回の呼び出し)
 の100万回の処理時間は、手元の環境で
 修正前 51.3s → 修正後 6.1s 。
 
 >497-498 によれば処理時間への影響は小さいけれど、
 リンク部分の文字列を短くできます。
 
 
- 621 :デフォルトの名無しさん :01/08/26 18:29 ID:K3x70GYg
-  >>618 
 しばらくは各自localhostでテスト運用だな。
 
 
- 622 :   :01/08/26 18:29 ID:C1Z3lpu.
-  >>616 
 http://www.gedoh.org/aki/2ch/wiki/yukiwiki.cgi?TopPage
 そこ、CGIのリンクで保存しにくい。
 普通にリンク貼れって漢字?
 
 
- 623 :名無しさん :01/08/26 18:29 ID:rVzqRC42
-  ん?アイデー? 
 
 
- 624 :名無し娘。 ◆vP.bOZFQ  :01/08/26 18:32 ID:7Eg.mvRo
-  あの、抜本的見直しもいいとは思いますが。。。 
 抜本的なのと、そうでないのはわけた方がいいと思います。
 とりあえずは、既存の関数の機能は変えない範囲で、最適化を
 行うべきかと。
 #抜本的見直しを運営が望んでいるかもよくわからないですし。
 
 
- 625 :デフォルトの名無しさん :01/08/26 18:33 ID:goYJpq5c
-  >608-615 
 サーバごとなどに異なる規制部分は非公開としても、
 全体に共通の部分は公開された状態で、気づいた人が
 欠点を指摘していった方が安全性は高くなるかと。
 (その意味で、 read.cgi と違いすぐ入れて様子を見るのは危険)
 
 管理側にも検討して欲しい。
 
 
- 626 :デフォルトの名無しさん :01/08/26 18:36 ID:1sXjF0HU
-  こういう前提があるから、やはりCGIレベルでどこまで最適化できるか? 
 しか当面ありえないでしょ。
 
 >39 名前:夜勤 ★ 投稿日:2001/08/25(土) 19:34
 >Apache に手を加える(パラメータ)を変更する というのはできないです。
 >なぜなら、このサーバと同じサーバという売りでレンタルサーバ業を
 >営んでいるもので、汎用的なサーバじゃなきゃだめなんです、すんません。
 
 
- 627 :デフォルトの名無しさん :01/08/26 18:38 ID:aVwVHBUM
-  この板にも強制IDが出てるな・・・何故か。 
 微々たるもんだが、ID:???の場合に出力を止めれば、
 数百バイト程度は得するぞ。
 ・・・Non-Accept-Encoding: gzip なら。
 
 
231KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30