■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

read.cgi改良スレッド 2

167 :デフォルトの名無しさん :01/09/11 09:36
zlibのを使うのなら crc32よりadler32の方が軽いみたい

% time ./test adler32
adler32 = c23cf731
1.18u 0.00s 0:01.14 103.5%
% time ./test crc32
crc32 = 7949b790
5.34u 0.01s 0:05.31 100.7%
% cat test.c
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <zlib.h>

#define FACTOR 65536

int
main(int argc, char *const *argv)
{
 if (argc < 2) fprintf(stderr, "Usage: %s function\n", *argv);
 else if (!strcmp("adler32", argv[1]) || !strcmp("crc32", argv[1])) {
  int i, fd = open(*argv, O_RDONLY);
  void *mmptr;
  uLong val;
  struct stat st;
  uLong (*fn32)(uLong, const Bytef *, uInt) = !strcmp("crc32", argv[1])?crc32:adler32;
  if (fd < 0) return -1;
  fstat(fd, &st);
  mmptr = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
  if (mmptr == MAP_FAILED) {close(fd); return -1;}
  for (i = 0; i < FACTOR; i++)
   val = fn32(fn32(0, NULL, 0), mmptr, st.st_size);
  munmap(mmptr, st.st_size);
  close(fd);
  printf("%s = %lx\n", argv[1], val);
 }
 else fprintf(stderr, "%s: Illegal function.\n", *argv);
 return 0;
}

168 :167 :01/09/11 09:41
>>166 とりあえず>>137はcrc32/adler32等によるチェックサムを実装することに
なれば そのスキームとしてETagを使うことが考えられるね

169 :166 :01/09/11 10:07
ETag話は続きそうなので、思いついた後に考えた事をいくつか。
(>>134は・・・)

まず、負荷の点で、
UAがIf-None-Matchをつけてきたら、
最初に(gzipとか呼ぶ前に)ETagを調べるためだけに
datを読み、レスを走査する必要があり、これがどうなのかな、と。
まあ、304を返せないなら、どうせ全体を返す事になるから、
それと比べればぜんぜん平気なんだけど、
変更された場合には、その後もう一回出力しなくてはいけない。

それと、LastModifiedの返し方によってはLastModifiedが変更されたのに
ETagが変更されないケースが多発するわけで、
下手するとLastModifiedとNotModifiedを両方出力してしまい、
その場合はapacheがどうするか、それを受けたUAはどう扱うか。
両方出力しないようにするには、ソースの変更が結構増えそう。

それから、ETagに反応してくれるUAってのはどのくらいなのかなと。
IEが反応してくれるから、やる価値はあるけど、
反応してくれなそうなUAなら、ETag自体を吐かない手もあるかなと。

もひとつ、基本的にCHUNK_ANCHOR時に有効と考えるんだけど、
(もちろん、それ以外でも有効だけど)
レス自体に変化がなくても、総レス数等が変わり、
「新レス」「901-」等が更新されない場合が出てくるわけで。
その場合、ある程度レスが増えたら値を変えてModified扱いしないと
あまりうまくないわけで、そのあたりをどうするか。
もちろん、1-150等の場合の時間帯制限も考えると、
URIで指定されたレスではなく、
実際に出力するレスから算出しなくてはいけないし。

それに、いろいろ見ると、CHUNK_ANCHOR自体が賛否両論な気がするし。

326KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30