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

read.cgi 2006―JavaScriptはCGIの夢を見るか

101 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 00:35:54 ID:YpMYl/gy0
<ぼそ>スイスアーミーナイフ</ぼそ>

102 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 00:44:39 ID:86/KPhLr0
rangeで**バイト以降のデータをリクエストしたら、変換後のバイト数で来るんだよね。

103 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 18:42:21 ID:viWF9XEA0
ブラウザによって違う動作といえば、Gecko系のXMLHttpRequestは
同一ホストか同一ドメインに限られていたような。
これは各サーバに入れておけば済む問題だが。

104 :root▲ ★ :2006/07/27(木) 20:07:57 ID:???0 BE:2919348-PLT(10000)
JavaScript は、結構方言が多いんですかね。

大きく分けると、

・IE 系
・Gecko 系
・Opera 系
・Safari 系

ぐらい?

105 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 20:26:48 ID:mkOYbx750
そこにバージョンの差とかいろいろ

106 : ◆Reffiz2Zh. :2006/07/27(木) 20:32:55 ID:6s+Ev8y+0
>104
分類すると

・IE−Sun系 MS系
・Gecko−1.5系 2.0系 3.0系

OperaとSufariは使ったことがないので補足ヨロ

107 : ◆Reffiz2Zh. @reffi@報告人 ★ :2006/07/27(木) 20:34:59 ID:???0
>106
Gecko間違えて炎狐でやっちゃった

・Gecko−1.8.0系(炎狐1.0.x) 1.8.1系(炎狐2.0) 1.9系(炎狐3.0)

108 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 20:37:27 ID:E06nA/kZ0
Safariは1.X系と2.X系…か?

109 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 20:45:01 ID:/QbR/fVa0
SafariはKHTML系の一部だろ。
他にKonquerorとかある。

110 :あまた ◆GOKvPKrEQ. :2006/07/27(木) 20:58:53 ID:F/NtCPlN0 BE:528612487-2BP(33)
Operaって
ttp://www.opera.com/docs/specs/js/
こんなでいいの?

111 : 株価【800】◆cZfSunOs.U :2006/07/27(木) 21:19:09 ID:fWmc8hHl0
>>102そうなります......と言いたいところですが,基本的に chunked 転送となって
Range は効かないかと.もっとも,Range を効かせた場合は mod_deflate で
圧縮するわけにはいかない(Range 指定しても圧縮後の内容に対して
Range が効いてしまうため)とか,キャッシュと Range の相性もよろしくない
ってことで,果たしていいのか悪いのか......

なお,前のパッチ以外にも修正した方がいい点があったので,パッチ更新版を.
http://sunos.saita.ma/read-js/test/mod_charset_lite.patch

ちなみに,httpd.conf の設定はこんな感じかな.

AliasMatch ^/(\w+)/dat-utf8/(\d+\.dat)$ /home/ch2xxx/public_html/$1/dat/$2
<Location /*/dat-utf8/*.dat>
    SetOutputFilter XLATEOUT
    CharsetSourceEnc CP932
    CharsetDefault UTF-8
</Location>

Alias /test/bbs-utf8.cgi /home/ch2xxx/public_html/test/bbs.cgi
<Location /test/bbs-utf8.cgi>
    SetInputFilter XLATEIN
    CharsetSourceEnc CP932
    CharsetDefault UTF-8
</Location>

112 :root▲ ★ :2006/07/27(木) 21:28:07 ID:???0 BE:5107687-PLT(10000)
>>111
おぉ、、、。

これは、dso.2ch.net に入れると、
テストが可能になると言っていますか?

113 : 株価【800】◆cZfSunOs.U :2006/07/27(木) 21:33:51 ID:fWmc8hHl0
>>111かもですね.ただ...... sunos.saita.ma で見ている限りでは,
mod_charset_lite で必要な APR-Util 中の apr_xlate_*() の関数群が
FreeBSD だと普通にビルドすると APR_NOTIMPL になっちゃうかも知れない
っぽいんで,ビルド時に細工してやらないとならないのかも......?

114 : 株価【800】◆cZfSunOs.U :2006/07/27(木) 21:39:59 ID:fWmc8hHl0
>>113s/>>111/>>112/

....../include/apu.h 中の

#define APU_HAVE_APR_ICONV 0
#define APU_HAVE_ICONV 1
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)

のところで APR_HAS_XLATE (== APU_HAVE_APR_ICONV || APU_HAVE_ICONV) が 0 に
なってるようだと,そのままでは使えないので細工の上 APR-Util のビルドし直しが必要かと.

115 :動け動けウゴウゴ2ちゃんねる :2006/07/27(木) 23:06:38 ID:qm7/fCsY0
>>107
1.0 1.5 2.0?

116 :tato :2006/07/28(金) 00:17:25 ID:+swShs5T0
この「CGIの夢を見るか 」スレから ここ↓「Ajaxでも語りませんか3」スレへ来られた方が
http://pc8.2ch.net/test/read.cgi/php/1147750917/
こんな質問↓をされているのですが、
http://pc8.2ch.net/test/read.cgi/php/1147750917/334

>IE6だと、最初のリクエストだとOK・・・・・・304 Not Modified が返ってくると・・・・・UTF-8と解釈して文字化け
この現象を確認できるページはどこかにあるでしょうか?

普通に考えると、304で表示されるのはキャッシュのはずですから、それが最初OKだったsjisではなく、UTF-8に解釈されてしまうとしたら、
個々のブラウザのローカルなエンコード設定の問題なような気もするのですが、何はともあれ、その現象がどこでも再現するのかを確かめたいと思いまして、、、。

117 : ◆KAGESsh/NQ :2006/07/28(金) 00:26:30 ID:BnqGP0Q/0 BE:5511348-2BP(111)
>>103-107

参考になるのかな?
http://www.mozilla-japan.org/docs/web-developer/sniffer/browser_type_oo.html

#Firefox は使い始めたばかりで、Mozilla(Gekko)、Firefox のバージョンの区別が…

118 :stream ◆PNstream2s :2006/07/28(金) 00:37:36 ID:azD6ToFp0
>>116
http://210.235.206.47/read-js/test/read.html/linux/1082969833/
http://210.235.206.47/read-js/test/read.html/linux/1153390747/
こんな感じです

119 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 00:41:08 ID:lDXvnfU00
一瞬CPUファンがすごく回転した。コワス・・・

120 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 01:24:01 ID:3rgozFxf0
とりあえず,UTF-8 の dat を取得する形で XMLHttpRequest 利用に戻しておいた.
ただ,sunos.saita.ma は共用サーバにつき自分で mod_charset_lite を組み込んだり
できないんで,UTF-8 に変換済みの dat を置いて代用......
http://sunos.saita.ma/read-js/operate/dat-utf8/

121 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 01:48:01 ID:r+F+KIBY0
む、500になる。

122 :tato :2006/07/28(金) 02:00:54 ID:+swShs5T0
キャッシュの再読み込み時に文字コード判定をUTF-8にしているようですね。
もし、キャッシュを無視する下記のような方法だとどうなるでしょうか?キャッシュは使えなくなりますが。。。
httpReq.open("GET", urlPrefix + "../" + paths[1] + "/dat/" + paths[2] + ".dat?"+(new Data()).getTime(),false);

#ところで、asyncがfalseのわけは?

123 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 02:02:23 ID:3rgozFxf0
あ...... sunos.saita.ma には mod_headers が入ってなかったんだ......

124 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 03:16:41 ID:636jpKTQP
JavaScript重すぎ。

125 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 04:32:41 ID:kVfCz8VA0 BE:99750757-BRZ(3183)
http://pc8.2ch.net/test/read.cgi/php/1147750917/337の案って

<?xml version="1.0" encoding="Shift_JIS"?><response><![CDATA[
動け動けウゴウゴ2ちゃんねる<><>03/08/31 03:53 ID:xo367wqv<> 踏むとスレ立てしたり投稿したりするスクリプトにつて <br> 情報を集めたり対策したりするスレです。 <>■ スレ立て・投稿スクリプト対策
動け動けウゴウゴ2ちゃんねる<>sage<>03/08/31 03:53 ID:Xj/IL/tw<> ( ゚д゚)ポカーン <>
動け動けウゴウゴ2ちゃんねる<>sage<>03/08/31 03:59 ID:xo367wqv<> http://okazu.bbspink.com/test/read.cgi/ascii/1062203672/13-<>
(略)
]]></response>
っていうはったりXMLをサーバーが用意。

※CDATAは、 ]]> だけが使えない。セクションの終りになっちゃうから。

文字コードの変換は行わないで、
><?xml version="1.0" encoding="Shift_JIS"?><response><![CDATA[
と、
>]]></response>
で、はさむだけだから負荷はそんなにない感じ?

JavaScript側は
httpReq.responseText

httpReq.responseXML.documentElement.text

に変更するだけ。

って感じかな。誰かできる人試してくれ。
上手く行ったらBeをふりこんで置くように

126 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 07:18:47 ID:E5cyDbY60
今のread.cgiの出力を単純にこうするだけでもけっこう軽くなるでしょうか?

<form name="datForm">
<textarea style="display:none;" name="namaDat">
(ここにdatをそのまま出力)
</textarea>
</form>
<script src="lib.js"></script>
<script>
showThread(document.datForm.namaDat.value,1,1000);
</script>

127 :tato :2006/07/28(金) 09:46:52 ID:chE9END/0
今日、別のマシンのIE6で見たらリロードしても文字化けしていませんでした。もしかしてサーバー側で何か変りましたか?

ところで、

httpReq.open("GET", urlPrefix + "../" + paths[1] + "/dat/" + paths[2] + ".dat", false);
httpReq.send(null);
texts = httpReq.status == 200 ? httpReq.responseText.split("\n") : ["[エラー]<><>[エラー]<>[" + httpReq.statusText + "]<>[エラー]", null];

この部分ですが、このままですと着信待たずにresponseText要求して失敗する可能性が高いので、たとえば、

httpReq.onreadystatechange =function () {
texts = httpReq.status == 200 ? httpReq.responseText.split("\n") : ["[エラー]<><>[エラー]<>[" + httpReq.statusText + "]<>[エラー]", null];
}
httpReq.open("GET", urlPrefix + "../" + paths[1] + "/dat/" + paths[2] + ".dat", false);
httpReq.send(null);

オーソドックスにこんな方が良いのではないかと思います。

128 :tato :2006/07/28(金) 10:13:47 ID:chE9END/0
>>125は、たぶん良い方法だと思います。が、
httpReq.responseXML.documentElement.text がおそらくOperaやFirefoxで動作しない気もしますので
普通に、

var xmlDoc = oj.responseXML
var nodes = xmlDoc.getElementsByTagName("response")[0].firstChild.nodeValue

などで取り出すのが良いかも。

129 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 10:43:15 ID:3rgozFxf0
>>125それって,SSI 使えば結構簡単にできそう......と思ったけど,
SSI は普通にやると Last-Mod を吐かない,XBitHack 使って吐くようにしても
それはインクルードした dat の mtime ではなく外側の xml の mtime になってしまう,
ってことで,やるとしたら read.cgi のように DSO で dat を取り込んでそんな感じに
出力するってことになるかな.


てか,そもそも負荷軽減が目的でそういうことやるなら,現行の read.cgi にムダがないか
見直すのが先決という気も.read.cgi を介さず dat を直接返せば軽くなると言われてるけど,
mod_deflate 使わずに sendfile() で一気に送出するならともかく,実際は gzip 圧縮かけてますよね.
圧縮処理自体,文字コード変換や HTML 整形処理などと比べても結構重いはずです.
それにもまして read.cgi が重いとすれば,現状の read.cgi にムダがあることの現れではないかと.
現状では Last-Mod 吐いてないからキャッシュが効かないとか,(サブリクエストを使わなければならない
雪だるま鯖では仕方ないとして)mmap() 使わずにバッファに dat を読み込んでるとか,
その他 HTML 整形処理などももっと軽量化する余地がないかとか,そういうあたりのことを......
あと,read.cgi 出力に mod_cache かましたらどうか,ってのもあるか.

そうしたことを考えれば,JavaScript 版を作るのは負荷対策というより
「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.

130 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 10:50:47 ID:3rgozFxf0
>>127>>118のは最初に作った旧版で synchronous にデータを取得するため
onreadystatechange() を使ってませんでしたが,今の
http://sunos.saita.ma/read-js/test/read.html
asynchrous にデータを取得するので使ってます.

131 :stream ◆PNstream2s :2006/07/28(金) 11:08:13 ID:F/mZ8+KK0
>>118のページに、「文字化けデモです」と注意書きを入れました。

132 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 11:13:30 ID:YlQHVubn0
>>129
> そうしたことを考えれば,JavaScript 版を作るのは負荷対策というより
> 「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.

どこまでカリカリにチューニングしたって JavaScript を利用すれば結局
サーバ側の整形処理そのものを省略できるんだから負荷対策にはなるんじゃない。

133 :tato :2006/07/28(金) 11:24:05 ID:chE9END/0
>>130了解しました。
>>131ちなみに、今日使っているマシンは(IE6.0.2900.2180.xpsp sp2 gdr.050301-1519)はリロードしても文字化けしていません。キャッシュの設定はいろいろ試しましたが文字化けしません。

http://sunos.saita.ma/read-js/test/read.html
はEUCなんですね。

あと、サーバー自身がtext/plain;charset=xxxを吐き出していないような気がするのですがどうなのでしょう?

134 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 11:41:20 ID:3rgozFxf0
>>132その主張は一面では正しいと思います.ただ,PATH_INFO であれ QUERY_STRING であれ
URL で板・スレを指定する限りにおいてはムダなリクエストが増えるという側面もあります.
ページをロードするたびに read.html と *.dat をそれぞれロードするというのはもちろんですが,
別の板やスレを表示する場合 read.html そのものは変化しないにもかかわらず
ブラウザから見ると別のドキュメントとして新たに取得し直してしまいます.
例えば

/test/read.html/operate/1000000000/ と /test/read.html/operate/1000000001/
/test/read.html?bbs=operate&key=1000000000 と /test/read.html?bbs=operate&key=1000000001

どの場合でも read.html 自体は変化しないのですが,ブラウザから見ると
すべて別個のドキュメントとしてそれぞれに read.html をロードし直してしまうのです.
もちろん,それぞれのページ内でさらに *.dat を取得します.
そうした余分なリクエスト増加も勘案すれば,read.cgi をリファインした場合と比較して
果たしてどうなのか,というのも要考慮かと......


>>133現状のはとりあえず UTF-8 前提になってるので charset 指定を外してます.

135 :tato :2006/07/28(金) 11:50:21 ID:chE9END/0
今日使っている文字化けしないマシンを調べたら、どこの設定をいじっているのかは不明ですが、キャッシュが残らないようになっています。
つまり、毎回読みにいっているわけですけれど、少なくとも、このShift_JISの文字化けは、
キャッシュさえ読まなければ解決する可能性が高い気がします。
キャッシュのせいで、文字化けしたり、キャッシュが効きすぎて書き換わらないなどのトラブルが起きるよりも、毎回読みに行くとしても
no-cacheなどのほうが良いかも?という意味では、
<meta http-equiv="Expires" content="Sun, 10 Jan 1990 01:01:01 GMT" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
を書いたり、url+"?"+(new Date()).getTime()でキャッシュを無視したりする方がよいかもしれません。

136 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 11:52:56 ID:YlQHVubn0
>>134
全部同じ HTML でいいんだから1画面フレームで表示、てのもできるけど、そうでなくても
<script type="text/javascript" src="****.js"></script>
と指定すればこのファイルはキャッシュされるよ。

> それぞれのページ内でさらに *.dat を取得します.

これは多分、read.cgi も同じでしょう。
Ajax スレの方に書いたけど、plain.cgi とか使えば最新 50 もできるよね。

137 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 12:06:36 ID:3rgozFxf0
>>136いや,だから JavaScript 部分を分離しようがフレームを使おうが何だろうが,
外側の read.html 自体は板・スレが変われば別ドキュメントとして扱われる,
だからそのたびに新たにロードされる(余計な HTTP リクエストが発生する)
ということを言いたいわけですが......

>> それぞれのページ内でさらに *.dat を取得します.
>これは多分、read.cgi も同じでしょう。

少なくとも,read.cgi 自体が *.dat を HTML 整形する限りに置いては
HTTP リクエスト・レスポンスは1回だけで済むわけですが......
それとも,read.cgi がサーバ内で *.dat を読み込むって意味で言ってますか?
ネットワーク越しに HTTP リクエストを受け付けてクライアントに *.dat の内容を
返すのに比べれば,ローカルファイルを open(), mmap() して読み込むだけの
方が遙かに軽いわけですが......

138 :136 :2006/07/28(金) 12:07:04 ID:YlQHVubn0
あーもっと簡単な方法に気づいた。
/test/read.html#/operate/1000000000/
location.hash で指定。ダメかな?

139 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 12:13:11 ID:3rgozFxf0
>>138余計なリクエストを発生させないという点では有効でしょうけど,
その形式が普及するまでの間,既存の板・スレ指定を行った URL が残る限りは
効果を発揮しきれないかと.まぁ過去にも一度 QUERY_STRING から PATH_INFOへの
転換を行ってるので,そうした新形式への変換は必ずしも不可能ではないかも知れませんが......

140 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 12:28:17 ID:YlQHVubn0
>>139
> 既存の板・スレ指定を行った URL が残る限りは効果を発揮しきれないかと.
あーそっか。そうだね。

>>137
> ローカルファイルを open(), mmap() して読み込むだけの
> 方が遙かに軽いわけですが......

でも、read.cgi はそれを更に整形してからネットワーク越しに送ってるんだよね?
送られるデータの量よりは、リクエストの数の方が問題なのかな。

141 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 12:34:38 ID:o51wigyx0
>>140
read.cgiはさらに負荷もあるですよ

142 :tato :2006/07/28(金) 12:39:40 ID:chE9END/0
考えられるShft_JIS用文字化け対策リストはこんな感じ?
>>111utf-8専用のディレクトリ/dat-utf8/を作る
>>125respnseTextではなくrespnseXMLでcharsetを明示処理 -->Safari1.2でも動作可
>>135キャッシュ無効no-cache -->ユーザーの設定が優先されるので駄目かも&負荷?
>>135キャッシュ無視url+"?"+(new Date()).getTime() -->read.htmlを何度でも呼ぶ負荷が気になる?

utf-8にしてもresponseTextではBOMを付けるなどの弊害もある細工が必要なので、
私はXMLを使う>>125がお勧めですが、.datの構造を変えるのは手間?
だめなら、キャッシュを無視。

143 :tato :2006/07/28(金) 12:47:17 ID:chE9END/0
静的ファイルへのリクエストと.cgiの負荷を比べると、普通は.cgiの負荷の方が高いと思いますが、
なにしろ、リクエスト数の多い2chなので、その判断は現場の人でないとわからないかも?

144 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 12:52:12 ID:3rgozFxf0
>>140-141read.cgi の処理による負荷があるのはわかります.しかし,
静的コンテンツであっても HTTP リクエストを処理することによる負荷もあります.
HTTP リクエストが増えればそれによる負荷増もあるってことで,
そのあたりを read.cgi をリファインした場合と比較すればどうなのか,と.

145 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 13:02:09 ID:zKffljcV0
どんなにリファインしても.cgiの負荷が静的コンテンツの負荷より下がるとは思えないけどなぁ

146 :stream ◆PNstream2s :2006/07/28(金) 13:06:22 ID:7fX0/+L20
一応補足しておくと、read.cgiはCGIと表記はなっていますが、実際はApacheモジュールに近いものです。
mod_cgidso http://sunos.saita.ma/mod_cgidso.html

read.htmlはJavaScriptを使う関係で、2chの背景画像みたいに
別サーバーにおくというわけにも行かないですしねえ


read.htmlを使うとして
(1)UTF-8に変換(responseText) >>111
(2)datファイルを単純なXMLに変換(responseXML) >>125
(3)キャッシュ無効は、If-Modified-Since: 昔の時刻 を設定するのが一番どのブラウザでも安全かと

147 :tato :2006/07/28(金) 13:15:09 ID:chE9END/0
ああ、そうだ。
>>136の方が書いていますが、
たとえば、read.htmlのソースを
<script type="text/javascript" src="read.html.js" charset="xxx"></script>
などにして、全部JavaScriptで出力してしまえば、
read.html.js自体はキャッシュされますから、

/test/read.html/operate/1000000000/ と /test/read.html/operate/1000000001/
/test/read.html?bbs=operate&key=1000000000 と /test/read.html?bbs=operate&key=1000000001

こんなふうに何度呼ばれても、再読込は1行だけかも。
HTTP リクエスト回数そのものの負荷は減らなくてもかなり軽くはなります。

あ、read.cgiから
<script type="text/javascript" src="read.html.js" charset="xxx"></script>
を出力するとリクエスト回数は減って、datのロードをクライアント側のAjaxにも任せられる?ハイブリッドみたいな?

148 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 13:23:21 ID:3rgozFxf0
>>145HTTP リクエスト数がほぼ同一という前提ならそれは当然です.
さすがに,単一のリクエストにおいて動的コンテンツ処理の負荷が
静的コンテンツ処理の負荷より軽いなんてことを言うつもりはないです.

ただ,JavaScript 版(に限らず Java や Flash などでもそうでしょうが)で
ページをロードした場合,外側の html と内側の dat 双方の HTTP リクエストが発生します.
つまり(静的コンテンツではあるものの)HTTP リクエストが増加することは必至です.
しかも,その静的コンテンツも sendfile() で一気に送るのではなく,
gzip 圧縮という結構重い処理を介してます.そうしたことも考慮すれば,
HTTP リクエスト増加による負荷増も無視できない水準になるだろう,
それを read.cgi をリファインした場合と比べればどうなのだろうか,と......


要は,個人的には JavaScript 版 read.cgi を作ること関しては,
負荷対策を第一義的目標として掲げて行うことには懐疑的,
(負荷も考慮しつつも)技術的好奇心を主眼として行うのなら好意的,ってことです.

149 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 13:33:36 ID:YlQHVubn0
iframe 使った読み込みした場合のデータのキャッシュって普通のコンテンツと同じかな?
使えるとしたら、Expires で超未来指定することで HTTP リクエストを軽減できるかも。

150 :tato :2006/07/28(金) 13:52:45 ID:chE9END/0
それにしても、metaでもブラウザ側でもShift_JISを指定した上で、
IE6で通常のShift_JISファイルをXHRで読み込んで、文字化けするということは無いと思うので
gzip 圧縮か、Content-Type設定に原因があるかも。でも、仮にこれが解決してもXML処理の方がお勧めではあります。

151 :149 :2006/07/28(金) 14:17:19 ID:YlQHVubn0
いや iframe じゃなくてもいいか。考えたから暇な人は読んでみて。

<script type="text/javascript">
var data = new Array; // まずスレッド用の配列を作る
var pos = -1;
</script>
<script type="text/javascript" src="/test/read.js/operate/1000000000/1-"></script>
<script type="text/javascript" src="/test/draw.js"></script>

サーバ側は js ファイルを CGI で吐かせるようにする。

data[++pos] = "*********"; // " はエスケープ(書き込み時に " になってればそのままで)
data[++pos] = "*********";
data[++pos] = "*********";

で、吐くデータが n 個(1 個以上; 適当に)を超えたらデータ部の後ろに
次のセクションを読み込むスクリプトを書いた上で、

$js .= qq{data[++pos] = "$_";\n} for map { s/"/"/g; $_ } @data; "
$js .= q{document.write('<script type="text/javascript" src="/test/read.js/operate/1000000000/$next-">');}
if scalar @data >= $n;

このリクエストの Expires を超未来にする、て感じ。
難点はあぼーんが反映されないってことだけど。

152 :149 :2006/07/28(金) 14:22:20 ID:YlQHVubn0
× q{document...
◯ qq{document...

153 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 14:46:12 ID:3rgozFxf0
>>151-152そもそも,ブラウザでページ自体をリロードしたらどうなるか......
「そういう使い方はしないで内容更新時にはページ内の更新ボタンをクリックして下さい」
とか呼びかけようとしても,read.cgi 利用者層の多くを占めるライトユーザには
なかなか普及しなさそうな気も...... read.html に対して

    ExpiresActive On
    ExpiresDefault "access 1 week"

とか指定しても,ページ自体をリロードすれば HTTP リクエストは
発生するようです.いったん取り込んだ URL なら 304 にはなりますが.

で,今の DSO 版ではない昔の read.cgi には,HTML 整形せず dat の形式のままで
行単位の内容を返す raw mode ってのがありました(今は廃止).でも,HTML 整形するよりは
raw 形式の方が軽いとはいえ,結局サーバ側プログラム走らせることには変わらないんですよね.
そこに HTTP リクエスト増も加わるってことも考えれば......

154 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 14:58:27 ID:636jpKTQP
作ってから考えればいいんじゃね

155 :149 :2006/07/28(金) 15:08:55 ID:dbg/okTO0
>>153
ttp://labs.cybozu.co.jp/blog/kazuho/archives/2006/02/utilizing_cache.php
このページに書いてあることを信用すると、 Expires ヘッダは
Last-Modified ヘッダと併用することでリクエストそのものが無くなるみたいだよ。

156 :stream ◆PNstream2s :2006/07/28(金) 15:18:29 ID:7fX0/+L20
WindowsのIE6では、更新ボタンを押した場合は再読み込みされるよ

157 :149 :2006/07/28(金) 15:22:51 ID:dbg/okTO0
>>156
そうなのか……それじゃぁ >>151-152は使えないや。

158 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 15:37:48 ID:3rgozFxf0
>>155内側で読み込むデータってことね.それなら,今も実際に index.js で利用してて
効果は出てるようです.でも,外側の read.html のリロードまでは抑制できないかと.

で,>>151は内部で読む方のリロードを抑制ってことか.でもそれだと今度は
dat が更新されてもなかなか反映されないってことになりそうな......
あと,そういう形で行単位の内容を返すなら

・ \n を探すためファイル内容をスキャン.
・ JavaScript 文字列にするなら,さらに " や \ をエスケープするためにスキャン.

こういうことやるぐらいなら,タグ付け加えて HTML 化ってのがそういう処理に比べて
べらぼうに重いとは思えません.もしべらぼうに重いとすれば,それはムダな処理をしてるからかと.
ある程度は重くなるでしょうけど,少なくとも HTTP リクエスト増加による負荷増より
ずっと重いなんてことはあり得ないような.

159 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 15:44:15 ID:JuOh4RhP0
有効期限も長くし過ぎると、テストが十分でなくて不具合を混入させてしまったまま
リリースした時に困りますよ。失礼な言い方になるけど、ユーザーの大半は基本的に
馬○ですからね。不具合がある事を訴えることは出来ても、何が原因で
どうすればいいか思いつくことまでは出来ないのが多い。
まぁここに来て騒いでCtrl+F5を押せって言われる流れになるんでしょうけど。

160 :149 :2006/07/28(金) 16:12:12 ID:dbg/okTO0
>>158
キモは、ブラウザのキャッシュに入ってるデータはリクエストしないってとこだったりするのだけれど。
行単位がダメなら、やっぱり iframe なのかな?でもキャッシュが効くかどうかもわからない。
新着を探すためには、最後の位置を覚えとかないといけないし。これは、read.js の他に read.txt も必要かも。
そしてやっぱり、更新ボタンを押したらリロードしちゃうんでは、ちょっと微妙かな。

read.cgi のキャッシュの仕組みがよくわからないけど、多分、
最新 50 の後に全表示とか、キャッシュにデータが重複してても構わず処理するんでしょう。
サーバ側は知る術が無いしそれは普通なんだけど、そうならやっぱり。

161 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 16:16:12 ID:lDXvnfU00
1レス1ファイルにするのが一番良い。

162 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 16:21:33 ID:???0 BE:227366-BRZ(2585)
jsはwww.2chとか静的コンテンツ用のサーバにおいて、
datはqb5.2chの既存のサーバとかコネクションを切り分けるとかって
出来るんでしょうか?


163 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 16:24:12 ID:JuOh4RhP0
んー、Gecko(Firefox)はできない可能性が高いけど、2ch.net同士だからなぁ。

164 :149 :2006/07/28(金) 16:26:09 ID:dbg/okTO0
js が別のサーバに置いてあったとしても、
js を読み込む(実行する) html が読みたい dat と同じドメインにあれば、dat は読み込めるよ。

165 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 16:26:33 ID:3rgozFxf0
>>162JavaScript 部分を HTML から分離して別のところに置く,ってのは
今の read.cgi や index.html でもやってます(www2.2ch.net/snow/index.js).
ただ,URL で鯖・板・スレを指定している限り,外側の read.html が
各所に散らばる状態はいかんともしがたいかと.

166 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 16:31:45 ID:???0 BE:89227-BRZ(2585)
外側の read.htmlといいますと?


167 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 16:48:20 ID:YGISL4lC0
>>166例えば,
http://qb5.2ch.net/test/read.html/operate/1153819270/
という URL でスレを表示させる際の
http://qb5.2ch.net/test/read.html
のことです.

168 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 16:49:13 ID:HmmSpj2e0 BE:75716238-BRZ(1035)
代理

名前: !kab▲ ◆cZfSunOs.U
E-mail: sage
内容:
>>166例えば,
http://qb5.2ch.net/test/read.html/operate/1153819270/
という URL でスレを表示させる際の
http://qb5.2ch.net/test/read.html
のことです.

169 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 16:50:12 ID:HmmSpj2e0 BE:132502076-BRZ(1035)
でっ。ごめんなさい

170 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 16:57:20 ID:???0 BE:353478-BRZ(4585)
http://www.2ch.net/read.html&u=http://qb5.2ch.net/operate/dat/1153819270.dat
とかじゃまずいんでしょうか?

171 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 17:04:17 ID:YGISL4lC0
>>170
>http://www.2ch.net/read.html&u

172 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 17:06:20 ID:YGISL4lC0
# >>171ちょん切れたので......

>>170
>http://www.2ch.net/read.html&u=http://qb5.2ch.net/operate/dat/1153819270.dat

& だとダメですが,? か / か # にすれば一応動きますね.
とはいえ,ブラウザによっては同一ホストという制限はあるかも.

まぁ,既存の URL との互換性を捨ててもいいならいろいろやりようはあります.
キャッシュを有効活用ということなら # を用いるのがベストです.
ただ,たとえそうしたとしても,それが普及するまでの間は従来式の URL が
当面そのまま残りますから......

173 :149 :2006/07/28(金) 17:09:55 ID:dbg/okTO0
js を実行する html と違うドメインの dat は、js からは セキュリティの関係で読み込めないよ。
他ドメインの js ファイルを実行することはできるから、>>151-152なら大丈夫だけどね。

174 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:10:46 ID:r+F+KIBY0
従来のアドレスにアクセスしたらそのアドレスに飛ばすっつーことか。
というかスキーム名要らなくない?
もっと言うとPATH_INFOでいいような。

175 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:13:51 ID:zKffljcV0
セキュリティがドメイン単位なら問題ないような。
鯖単位だと別鯖にだせないけど。

176 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 17:18:29 ID:???0 BE:151283-BRZ(4585)
>>173
ドメイン単位?サーバ単位?

同一ホストの制限のあるブラウザって大手ではどんなんがあるんでしょう?

どうせ.cgiでなくなるので、URLの互換性はあんまり気にしなくていいとおもいます。


177 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 17:19:47 ID:YGISL4lC0
まぁ要は,? (QUERY_STRING) や / (PATH_INFO) を使うと,同一の read.html というファイルであっても
板・スレの指定が異なるとブラウザ側はそれぞれ別々のコンテンツとして扱ってしまうってことで.
# を用いて例えば
http://qb5.2ch.net/test/read.html#operate/1153819270/
のようにすれば,板・スレの指定が異なってもブラウザは同一コンテンツとして扱ってくれると.

178 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 17:23:39 ID:???0 BE:158055-BRZ(4585)
おぉ、、そういうことなんですかぁ。
#すげー。

179 :149 :2006/07/28(金) 17:25:13 ID:dbg/okTO0
>>176
サブドメインを変えて試したことが無いから説得力が無いけど…
多分完全に一致するかどうかでチェックするんじゃないかな。2ch で言うサーバ単位になると思う。
ドメインを超えてアクセスできるとセキュリティホールみたいに見られるから、
大抵のブラウザ(IE、FF、Opera)ではクロスドメインのアクセスはできないよ。

180 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:28:17 ID:TZJGLoaF0 BE:168707434-BRZ(2211)
確かFQDN単位、だった気がする。あくまで気がする。

181 : ◆Reffiz2Zh. :2006/07/28(金) 17:28:32 ID:ko7HWZVp0
オフトピ

IE7β3では異なるドメイン間のサブフレーム移動はデフォルトで禁止
されてます。
(前までこの質問で賑わってました。)

182 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 17:32:22 ID:YGISL4lC0
http://qb5.2ch.net/を表示させた状態で

javascript:var h $3D window.XMLHttpRequest
? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP");
h.open("GET", "http://info.2ch.net/",false);
h.send("");
alert(h.responseText);

を全部一行につなげてロケーションバーから入力すると,
IE も Firefox もダメっぽいですね.
h.open("GET", "http://qb5.2ch.net/",false);
に変えれば Ok ってことで,どちらも「同一ホスト」という制限かと.

183 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:33:57 ID:6Xyszskt0
Mozilla 1.7.x (Gecko) もopenの段階でエラーが出るね。

184 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 17:34:24 ID:YGISL4lC0
>>182
×javascript:var h $3D window.XMLHttpRequest
○javascript:var h = window.XMLHttpRequest

185 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:36:40 ID:6Xyszskt0
Internet Explorer 6.0 SP1 もopenの段階でえらー。

186 :tato :2006/07/28(金) 17:39:54 ID:chE9END/0
セイムドメインというのはこういうこと。
http://www.mozilla-japan.org/projects/security/components/same-origin.html

XMLHttpRequestでは、どのブラウザでもクロスドメインリクエストは出せません。

187 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:48:40 ID:t3XQDhSZ0
???????????????

188 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 17:48:45 ID:+s1TuJnu0
こっかいぎじどうをばくはするよ


189 :tato :2006/07/28(金) 17:49:19 ID:chE9END/0
外側のread.htmlと
その内側からAjaxでリクエストする.datは同じドメインでなければなりませんが
でも、同じ内側から呼び出す相手でも、Ajaxを実行する.jsファイル自体は、クロスドメインにおいてあっても大丈夫です。

ちなみに、もしdataスタイルをjsのJSONなどの書式にしてもよければ、Ajax以前の時代のクロスドメインなダイナミックロードというのもありますけれど。
http://game.gr.jp/mag2p/2/loadjs/loadjs.htm


190 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 18:05:20 ID:kVfCz8VA0
read.js 全ての処理をさせる どこに置いてもおk
read.html read.jsを読ませるだけ datと同じドメインじゃなきゃ駄目。

read.htmlとdatが同じドメインなら、read.jsがdatと通信しても大丈夫
っていう感じ。

191 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 18:11:00 ID:E5cyDbY60
パラメータを#で渡すと、リンクが全部紫色にならないかな?

192 :tato :2006/07/28(金) 19:14:11 ID:+swShs5T0
2chの仕組みがまだ良くわからずに書いていますが、、、
ふと、思ったのですけれど、もしレガシーな仕組みを引きずらなくても良いなら、
.datファイルをとりにいくのではなくDB使うというのは無しなのですか?

1) hoge1.2ch.net/read.html#hogehoge (hoge1.2ch.net/read.htmlはキャッシュ)
2) static1.2ch.net/ajax.js (ajax.jsはキャッシュ)
3) hoge1.2ch.net/db (差分のみ)

1)から2)をロードして#hogehogeに対応するデータを3)から受けとり
ユーザーへはAjaxなレスポンスを返すとかの方がシンプルでいろいろできるかも。

>>191#なら、カレントページが訪問済みになりますが、#hogeとかですよね?

193 : 株価【800】◆cZfSunOs.U :2006/07/28(金) 20:43:32 ID:3rgozFxf0
どっちでも逝けるようにしてみた.
http://sunos.saita.ma/read-js/test/read.cgi/operate/1153615149/l50
http://sunos.saita.ma/read-js/test/read.cgi#operate/1153615149/l50

194 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 20:46:11 ID:65pSR6Fy0
>>193
すげぇ&乙です

195 :ひろゆき@どうやら管理人 ★ :2006/07/28(金) 21:44:51 ID:???0 BE:201784-BRZ(4595)
>>192
現状より重くなる予感。。

196 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 22:11:24 ID:N8hDBBv80
>>193
ime.st通ると#以降が消えるね。

197 : 株価【1100】◆cZfSunOs.U :2006/07/28(金) 23:07:21 ID:3rgozFxf0
>>196まぁ,ime.st (ime.nu) で

onload = function(e) {
    if (location.hash) {
        document.links[0].href += location.hash;
        document.links[0].firstChild.data += location.hash;
    }
};

のような JavaScript 入れてもらえれば解決するかと.
もっとも,JavaScript 切ってあるとどうしようもないけど......

198 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 23:13:20 ID:A0brsR3K0
>>86がちょっと面白そうなので適当に動かしてみました。
http://www.janis.or.jp/users/segabito/sample/bind.html

sjisを変換せずに読めるのはいいのですが、ちょっといじると表示が止まったり、
リロードするたびに動いたり動かなかったりして、どうも安定しませんでした。

199 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 23:13:47 ID:r+F+KIBY0
ブラウザ派急先鋒のまろゆきさん>>197これ入れてください

200 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 23:17:27 ID:E5cyDbY60
>>197
その要望はime.nu登場時から言われていたけれど、
ひろゆ子さんという人がよくわからない理由で却下していました。

388 名前: 心得をよく読みましょう 02/02/22 13:20 ID:zXPGfNV8
>>377
↓こういうのを<body onload>かhtmlの最後に入れてください。
document.links[0].href+=location.hash
JavaScript使えるブラウザならIEだけじゃなくてたいてい通用します。
392 名前: ひろゆ子 ◆HRUNYAXA 02/02/22 13:30 ID:yVzdMBp6
javascriptをいれてしまうと、
googleにおこられそうで、、
801板のことをおいらにいわれてもわからんです。。

317KB
新着レスの表示

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

0ch BBS 2004-10-30