read.cgiをjavascriptで実現させるプロジェクトのスレッドです。
テスト版
http://sunos.saita.ma/read-js/test/read.cgi
http://sunos.saita.ma/read-js/test/read.cgi/operate/1153615149/
探検
read.cgi 2006―JavaScriptはCGIの夢を見るか
■ このスレッドは過去ログ倉庫に格納されています
NGNG
NGNG
よく見てないので何ですが
datをtext/plainで表示するように.htaccessで設定したものを
アップした後
スクリプト内で
datファイルを読み込んだ直後(70行目あたり?)に
下記のようなタグ書き換えを行う正規表現を置いてみてはどうでしょうか。
var loadDat = loadDat.replace(/</g,"<");
var loadDat = loadDat.replace(/>/g,">");
var loadDat = loadDat.replace(/<pre>/gi,"");
var loadDat = loadDat.replace(/<\/pre>/gi,"");
var loadDat = loadDat.replace(/&/gi,"&");
var loadDat = loadDat.replace(/<xml>/gi,"");
var loadDat = loadDat.replace(/<\/xml>/gi,"");
変化が無ければごめんなさいという事で。
失礼しました
datをtext/plainで表示するように.htaccessで設定したものを
アップした後
スクリプト内で
datファイルを読み込んだ直後(70行目あたり?)に
下記のようなタグ書き換えを行う正規表現を置いてみてはどうでしょうか。
var loadDat = loadDat.replace(/</g,"<");
var loadDat = loadDat.replace(/>/g,">");
var loadDat = loadDat.replace(/<pre>/gi,"");
var loadDat = loadDat.replace(/<\/pre>/gi,"");
var loadDat = loadDat.replace(/&/gi,"&");
var loadDat = loadDat.replace(/<xml>/gi,"");
var loadDat = loadDat.replace(/<\/xml>/gi,"");
変化が無ければごめんなさいという事で。
失礼しました
NGNG
タグが書き換えられている・・
こちらです↓
var loadDat = loadDat.replace(/&lt;/g,"<");
var loadDat = loadDat.replace(/&gt;/g,">");
var loadDat = loadDat.replace(/<pre>/gi,"");
var loadDat = loadDat.replace(/<\/pre>/gi,"");
var loadDat = loadDat.replace(/&amp;/gi,"&");
var loadDat = loadDat.replace(/<xml>/gi,"");
var loadDat = loadDat.replace(/<\/xml>/gi,"");
「&」を半角にして頂ければ。
こちらです↓
var loadDat = loadDat.replace(/&lt;/g,"<");
var loadDat = loadDat.replace(/&gt;/g,">");
var loadDat = loadDat.replace(/<pre>/gi,"");
var loadDat = loadDat.replace(/<\/pre>/gi,"");
var loadDat = loadDat.replace(/&amp;/gi,"&");
var loadDat = loadDat.replace(/<xml>/gi,"");
var loadDat = loadDat.replace(/<\/xml>/gi,"");
「&」を半角にして頂ければ。
70root▲ ★
2006/07/26(水) 18:53:00ID:???0 >>67
まだ、個別の項目にいく時期ではないと思うです。
JavaScript でやるのかどうかも、まだ決まっていないと思っています。
というわけで、整理を。
○今回やりたいこと
2ちゃんねるのサーバの負荷を軽くしたい。
○今回の目標
今回は具体的な事項として、
・掲示板サーバで read.cgi を動かすのをできるだけ少なくする
ことを目標にする。
最終的には全廃をめざすが、read.cgi の起動数を少なくできるなら、それでもよい。
まだ、個別の項目にいく時期ではないと思うです。
JavaScript でやるのかどうかも、まだ決まっていないと思っています。
というわけで、整理を。
○今回やりたいこと
2ちゃんねるのサーバの負荷を軽くしたい。
○今回の目標
今回は具体的な事項として、
・掲示板サーバで read.cgi を動かすのをできるだけ少なくする
ことを目標にする。
最終的には全廃をめざすが、read.cgi の起動数を少なくできるなら、それでもよい。
2006/07/26(水) 19:04:57ID:6gP6+0Mt0
>>70
やりたいこと&目標は
http://qb5.2ch.net/test/read.cgi/operate/1153615149/775
>おいらはブラウザ派なのですな。
>
>javascriptだけで、read.cgiが実現できるんじゃないかと、
>前から思ってるんですが、誰か試してみないすかね。
じゃなかったっけ?
やりたいこと&目標は
http://qb5.2ch.net/test/read.cgi/operate/1153615149/775
>おいらはブラウザ派なのですな。
>
>javascriptだけで、read.cgiが実現できるんじゃないかと、
>前から思ってるんですが、誰か試してみないすかね。
じゃなかったっけ?
2006/07/26(水) 19:07:02ID:zo6Ee0v80
2006/07/26(水) 19:08:22ID:hZZWHB7M0
つまりread.cgiの負担を減らす事かと
2006/07/26(水) 19:09:03ID:+1rXbJLeP
77root▲ ★
NGNG なので、私は >>70 の目的が実現できるのであれば、
別にその手段が JavaScript である必要はかならずしもなくて、
別のものでもいいと思っているです。
JavaScript 以外の候補としては、
・flash
・Java
なども、あると思っています。
で、私としては管理人が「JavaScript 以外のものは使うな。これは私の命令です」
と言わない限り、可能性はより多いほうがいいなと考えています。
つまり、上記に JavaScript も含めたそれぞれの
・メリット
・デメリット
・実現可能性
などなどの要素を総合的に評価したうえで、
目標実現のためにどんな道具を使うのがいいか、決めたいかなと。
別にその手段が JavaScript である必要はかならずしもなくて、
別のものでもいいと思っているです。
JavaScript 以外の候補としては、
・flash
・Java
なども、あると思っています。
で、私としては管理人が「JavaScript 以外のものは使うな。これは私の命令です」
と言わない限り、可能性はより多いほうがいいなと考えています。
つまり、上記に JavaScript も含めたそれぞれの
・メリット
・デメリット
・実現可能性
などなどの要素を総合的に評価したうえで、
目標実現のためにどんな道具を使うのがいいか、決めたいかなと。
2006/07/26(水) 19:34:30ID:ax/3R4o80
だったらActiveXでWebブラウザ上に2chブラウザ再現しちゃえば良いじゃん。IE限定だけど
79root▲ ★
NGNG2006/07/26(水) 19:44:51ID:9rtlkJef0
IETabみたいに、レンダリングエンジンをうまく
ごにょごにょすればfirebirdでも大丈夫だぜ
ごにょごにょすればfirebirdでも大丈夫だぜ
81stream ◆PNstream2s
2006/07/26(水) 19:57:39ID:kXk1e64C02006/07/26(水) 20:10:42ID:kV/VHu8d0
2001年の閉鎖危機の時にもread.cgiをjavascriptで代用するという案があったけど、
当時は互換性うんたらかんたらで却下されました。
当時は互換性うんたらかんたらで却下されました。
83stream ◆PNstream2s
2006/07/26(水) 20:24:33ID:kXk1e64C0 んで、mod_charset_lightでUTF-8に変換してみたけど、うまくいきますね。
ただ、Shift_JIS的におかしなデータがdatファイルに存在すると500 Internalサーバーエラーになるっぽいですね。
ただ、Shift_JIS的におかしなデータがdatファイルに存在すると500 Internalサーバーエラーになるっぽいですね。
84root▲ ★
NGNG >>83
なるほど。
ただこの場合、コード変換の分だけ、サーバは仕事をすることになりますね。
read.cgi 動かすのとどっちが負荷がトータルで低くなるか、が、
重要なポイントの一つなのかな。
あとは、ユーザに影響が出ないように実装できるのか、とか。
いずれにせよ、
> ただ、Shift_JIS的におかしなデータがdatファイルに存在すると
> 500 Internalサーバーエラーになるっぽいですね。
は、ちょっといまいちなのかなと。
なるほど。
ただこの場合、コード変換の分だけ、サーバは仕事をすることになりますね。
read.cgi 動かすのとどっちが負荷がトータルで低くなるか、が、
重要なポイントの一つなのかな。
あとは、ユーザに影響が出ないように実装できるのか、とか。
いずれにせよ、
> ただ、Shift_JIS的におかしなデータがdatファイルに存在すると
> 500 Internalサーバーエラーになるっぽいですね。
は、ちょっといまいちなのかなと。
2006/07/26(水) 21:08:04ID:kV/VHu8d0
IEのデータバインディングを使って、datをcsvとして読み込むという方法もあるのかな。
http://www.microsoft.com/japan/msdn/columns/dude/dude1103.aspx
ここのサンプルなんかはSJISのデータファイルを読み込んでる。
http://himuka.miyazaki-c.ed.jp/db/kyouzai/manual/orienteering2/ogura/sample.htm
http://www.microsoft.com/japan/msdn/columns/dude/dude1103.aspx
ここのサンプルなんかはSJISのデータファイルを読み込んでる。
http://himuka.miyazaki-c.ed.jp/db/kyouzai/manual/orienteering2/ogura/sample.htm
Java アプレットは重い(特に VM 起動時)ですからね......
Flash は Java よりは軽いでしょうけど,(文字列の扱いにもよるのかも
知れませんが)文字化けすることもあって......まぁこちらの環境は少数派でしょうけど.
http://sunos.saita.ma/read-js/test/flash.png
JavaScript はブラウザによって挙動不審になったりとかする部分もあったりするのが
苦労するところですが,それを乗り越えれば一番お手軽ではあるんですよね.
あと,フィルタモジュールの負荷ってことなら,文字コード変換より圧縮,
つまり mod_deflate の方がよほど重いかと.
Flash は Java よりは軽いでしょうけど,(文字列の扱いにもよるのかも
知れませんが)文字化けすることもあって......まぁこちらの環境は少数派でしょうけど.
http://sunos.saita.ma/read-js/test/flash.png
JavaScript はブラウザによって挙動不審になったりとかする部分もあったりするのが
苦労するところですが,それを乗り越えれば一番お手軽ではあるんですよね.
あと,フィルタモジュールの負荷ってことなら,文字コード変換より圧縮,
つまり mod_deflate の方がよほど重いかと.
2006/07/26(水) 21:22:52ID:+1rXbJLeP
ここで空気を読まずにJSP
2006/07/26(水) 21:29:57ID:gpcl/1Jf0
JSPって↓のようなやつだっけ?
<%
for(int i = 0; i < bbs.getLastNum(); i++){
%>
メッセージ:<%= bbs.getMessage() %><br>
<%
}
%>
<%
for(int i = 0; i < bbs.getLastNum(); i++){
%>
メッセージ:<%= bbs.getMessage() %><br>
<%
}
%>
2006/07/26(水) 21:30:19ID:wK/+H917P
Web製作板でJavaScript版
プログラム板でJava Applet版
Flash板でFlash版
を作ればいいんでね?盛り上がりそうw
プログラム板でJava Applet版
Flash板でFlash版
を作ればいいんでね?盛り上がりそうw
2006/07/26(水) 21:36:49ID:8Qn/kEiJ0
SunがMicrosoftのVM潰さなければねぇ。
独自拡張もあったにしろMicrosoftの方が早かったのに。
独自拡張もあったにしろMicrosoftの方が早かったのに。
NGNG
JSPはサーバサイドだからあんま意味なくね?
それとも実はものごっつ軽いとか?
それとも実はものごっつ軽いとか?
2006/07/26(水) 23:03:24ID:RjRvuw4Y0
いや、別にJSPがものごっつ軽いとかは無い。
普通にサーバサイドだし。
普通にサーバサイドだし。
不正なバイトシーケンスを無視して 500 エラーにしないようにするパッチ.
--- httpd-2.2.2/modules/filters/mod_charset_lite.c Sat Apr 22 10:53:06 2006
+++ httpd-2.2.2/modules/filters/mod_charset_lite.c Sat Apr 22 10:53:06 2006
@@ -188,6 +188,31 @@
return NULL;
}
+static apr_status_t _xlate_conv_buffer_no_eilseq(apr_xlate_t *convset,
+ const char *inbuf,
+ apr_size_t *inbytes_left,
+ char *outbuf,
+ apr_size_t *outbytes_left)
+{
+ apr_status_t rv;
+
+ while (inbytes_left && outbytes_left) {
+ apr_size_t inbytes = *inbytes_left, outbytes = *outbytes_left;
+
+ if ((rv = apr_xlate_conv_buffer(convset, inbuf, inbytes_left,
+ outbuf, outbytes_left)) != APR_EINVAL) /* EILSEQ */
+ break;
+ if (*inbytes_left)
+ inbuf += inbytes - --(*inbytes_left);
+ if (*outbytes_left)
+ (outbuf += outbytes - --(*outbytes_left))[-1] = '?';
+ }
+
+ return rv != APR_EINVAL ? rv : APR_SUCCESS;
+}
+
+#define apr_xlate_conv_buffer _xlate_conv_buffer_no_eilseq
+
/* find_code_page() is a fixup hook that decides if translation should be
* enabled; if so, it sets up request data for use by the filter registration
* hook so that it knows what to do
--- httpd-2.2.2/modules/filters/mod_charset_lite.c Sat Apr 22 10:53:06 2006
+++ httpd-2.2.2/modules/filters/mod_charset_lite.c Sat Apr 22 10:53:06 2006
@@ -188,6 +188,31 @@
return NULL;
}
+static apr_status_t _xlate_conv_buffer_no_eilseq(apr_xlate_t *convset,
+ const char *inbuf,
+ apr_size_t *inbytes_left,
+ char *outbuf,
+ apr_size_t *outbytes_left)
+{
+ apr_status_t rv;
+
+ while (inbytes_left && outbytes_left) {
+ apr_size_t inbytes = *inbytes_left, outbytes = *outbytes_left;
+
+ if ((rv = apr_xlate_conv_buffer(convset, inbuf, inbytes_left,
+ outbuf, outbytes_left)) != APR_EINVAL) /* EILSEQ */
+ break;
+ if (*inbytes_left)
+ inbuf += inbytes - --(*inbytes_left);
+ if (*outbytes_left)
+ (outbuf += outbytes - --(*outbytes_left))[-1] = '?';
+ }
+
+ return rv != APR_EINVAL ? rv : APR_SUCCESS;
+}
+
+#define apr_xlate_conv_buffer _xlate_conv_buffer_no_eilseq
+
/* find_code_page() is a fixup hook that decides if translation should be
* enabled; if so, it sets up request data for use by the filter registration
* hook so that it knows what to do
95ゴッド便所 ◆AKQJ10itoI
NGNG 文字コード変換でサーバーにかかる負担はどれくらいなんだ?
2006/07/26(水) 23:33:57ID:9rtlkJef0
文字コード変換もjava scriptで。
97root▲ ★
NGNG2006/07/27(木) 00:17:17ID:tvu0ZHE80
jspは意味無いでしょ・・・
折角、サーバ側で読み出しの負荷を下げようというのに・・・
折角、サーバ側で読み出しの負荷を下げようというのに・・・
99stream ◆PNstream2s
2006/07/27(木) 00:21:06ID:5ofr++i80 >>97
板のディレクトリのところに dat-utf8 とかでdatディレクトリに対しシンボリックリンク作って
そこへのアクセスはmod_charset_liteを使うようにするとか
これだと各サーバーの各板でシンボリックリンクを張る作業しなきゃいけないから大変?
板のディレクトリのところに dat-utf8 とかでdatディレクトリに対しシンボリックリンク作って
そこへのアクセスはmod_charset_liteを使うようにするとか
これだと各サーバーの各板でシンボリックリンクを張る作業しなきゃいけないから大変?
2006/07/27(木) 00:35:54ID:YpMYl/gy0
<ぼそ>スイスアーミーナイフ</ぼそ>
2006/07/27(木) 00:44:39ID:86/KPhLr0
rangeで**バイト以降のデータをリクエストしたら、変換後のバイト数で来るんだよね。
2006/07/27(木) 18:42:21ID:viWF9XEA0
ブラウザによって違う動作といえば、Gecko系のXMLHttpRequestは
同一ホストか同一ドメインに限られていたような。
これは各サーバに入れておけば済む問題だが。
同一ホストか同一ドメインに限られていたような。
これは各サーバに入れておけば済む問題だが。
JavaScript は、結構方言が多いんですかね。
大きく分けると、
・IE 系
・Gecko 系
・Opera 系
・Safari 系
ぐらい?
大きく分けると、
・IE 系
・Gecko 系
・Opera 系
・Safari 系
ぐらい?
2006/07/27(木) 20:26:48ID:mkOYbx750
そこにバージョンの差とかいろいろ
>104
分類すると
・IE−Sun系 MS系
・Gecko−1.5系 2.0系 3.0系
OperaとSufariは使ったことがないので補足ヨロ
分類すると
・IE−Sun系 MS系
・Gecko−1.5系 2.0系 3.0系
OperaとSufariは使ったことがないので補足ヨロ
>106
Gecko間違えて炎狐でやっちゃった
・Gecko−1.8.0系(炎狐1.0.x) 1.8.1系(炎狐2.0) 1.9系(炎狐3.0)
Gecko間違えて炎狐でやっちゃった
・Gecko−1.8.0系(炎狐1.0.x) 1.8.1系(炎狐2.0) 1.9系(炎狐3.0)
2006/07/27(木) 20:37:27ID:E06nA/kZ0
Safariは1.X系と2.X系…か?
2006/07/27(木) 20:45:01ID:/QbR/fVa0
SafariはKHTML系の一部だろ。
他にKonquerorとかある。
他にKonquerorとかある。
Operaって
ttp://www.opera.com/docs/specs/js/
こんなでいいの?
ttp://www.opera.com/docs/specs/js/
こんなでいいの?
>>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>
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>
>>111 かもですね.ただ...... sunos.saita.ma で見ている限りでは,
mod_charset_lite で必要な APR-Util 中の apr_xlate_*() の関数群が
FreeBSD だと普通にビルドすると APR_NOTIMPL になっちゃうかも知れない
っぽいんで,ビルド時に細工してやらないとならないのかも......?
mod_charset_lite で必要な APR-Util 中の apr_xlate_*() の関数群が
FreeBSD だと普通にビルドすると APR_NOTIMPL になっちゃうかも知れない
っぽいんで,ビルド時に細工してやらないとならないのかも......?
2006/07/27(木) 23:06:38ID:qm7/fCsY0
>>107
1.0 1.5 2.0?
1.0 1.5 2.0?
116tato
2006/07/28(金) 00:17:25ID:+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に解釈されてしまうとしたら、
個々のブラウザのローカルなエンコード設定の問題なような気もするのですが、何はともあれ、その現象がどこでも再現するのかを確かめたいと思いまして、、、。
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に解釈されてしまうとしたら、
個々のブラウザのローカルなエンコード設定の問題なような気もするのですが、何はともあれ、その現象がどこでも再現するのかを確かめたいと思いまして、、、。
>>103-107
参考になるのかな?
http://www.mozilla-japan.org/docs/web-developer/sniffer/browser_type_oo.html
#Firefox は使い始めたばかりで、Mozilla(Gekko)、Firefox のバージョンの区別が…
参考になるのかな?
http://www.mozilla-japan.org/docs/web-developer/sniffer/browser_type_oo.html
#Firefox は使い始めたばかりで、Mozilla(Gekko)、Firefox のバージョンの区別が…
118stream ◆PNstream2s
2006/07/28(金) 00:37:36ID:azD6ToFp02006/07/28(金) 00:41:08ID:lDXvnfU00
一瞬CPUファンがすごく回転した。コワス・・・
とりあえず,UTF-8 の dat を取得する形で XMLHttpRequest 利用に戻しておいた.
ただ,sunos.saita.ma は共用サーバにつき自分で mod_charset_lite を組み込んだり
できないんで,UTF-8 に変換済みの dat を置いて代用......
http://sunos.saita.ma/read-js/operate/dat-utf8/
ただ,sunos.saita.ma は共用サーバにつき自分で mod_charset_lite を組み込んだり
できないんで,UTF-8 に変換済みの dat を置いて代用......
http://sunos.saita.ma/read-js/operate/dat-utf8/
2006/07/28(金) 01:48:01ID:r+F+KIBY0
む、500になる。
122tato
2006/07/28(金) 02:00:54ID:+swShs5T0 キャッシュの再読み込み時に文字コード判定をUTF-8にしているようですね。
もし、キャッシュを無視する下記のような方法だとどうなるでしょうか?キャッシュは使えなくなりますが。。。
httpReq.open("GET", urlPrefix + "../" + paths[1] + "/dat/" + paths[2] + ".dat?"+(new Data()).getTime(),false);
#ところで、asyncがfalseのわけは?
もし、キャッシュを無視する下記のような方法だとどうなるでしょうか?キャッシュは使えなくなりますが。。。
httpReq.open("GET", urlPrefix + "../" + paths[1] + "/dat/" + paths[2] + ".dat?"+(new Data()).getTime(),false);
#ところで、asyncがfalseのわけは?
あ...... sunos.saita.ma には mod_headers が入ってなかったんだ......
2006/07/28(金) 03:16:41ID:636jpKTQP
JavaScript重すぎ。
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をふりこんで置くように
<?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をふりこんで置くように
2006/07/28(金) 07:18:47ID: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>
<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>
127tato
2006/07/28(金) 09:46:52ID: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);
オーソドックスにこんな方が良いのではないかと思います。
ところで、
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);
オーソドックスにこんな方が良いのではないかと思います。
128tato
2006/07/28(金) 10:13:47ID:chE9END/0 >>125 は、たぶん良い方法だと思います。が、
httpReq.responseXML.documentElement.text がおそらくOperaやFirefoxで動作しない気もしますので
普通に、
var xmlDoc = oj.responseXML
var nodes = xmlDoc.getElementsByTagName("response")[0].firstChild.nodeValue
などで取り出すのが良いかも。
httpReq.responseXML.documentElement.text がおそらくOperaやFirefoxで動作しない気もしますので
普通に、
var xmlDoc = oj.responseXML
var nodes = xmlDoc.getElementsByTagName("response")[0].firstChild.nodeValue
などで取り出すのが良いかも。
>>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 版を作るのは負荷対策というより
「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.
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 版を作るのは負荷対策というより
「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.
>>127 >>118 のは最初に作った旧版で synchronous にデータを取得するため
onreadystatechange() を使ってませんでしたが,今の
http://sunos.saita.ma/read-js/test/read.html は
asynchrous にデータを取得するので使ってます.
onreadystatechange() を使ってませんでしたが,今の
http://sunos.saita.ma/read-js/test/read.html は
asynchrous にデータを取得するので使ってます.
2006/07/28(金) 11:13:30ID:YlQHVubn0
>>129
> そうしたことを考えれば,JavaScript 版を作るのは負荷対策というより
> 「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.
どこまでカリカリにチューニングしたって JavaScript を利用すれば結局
サーバ側の整形処理そのものを省略できるんだから負荷対策にはなるんじゃない。
> そうしたことを考えれば,JavaScript 版を作るのは負荷対策というより
> 「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.
どこまでカリカリにチューニングしたって JavaScript を利用すれば結局
サーバ側の整形処理そのものを省略できるんだから負荷対策にはなるんじゃない。
133tato
2006/07/28(金) 11:24:05ID: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を吐き出していないような気がするのですがどうなのでしょう?
>>131 ちなみに、今日使っているマシンは(IE6.0.2900.2180.xpsp sp2 gdr.050301-1519)はリロードしても文字化けしていません。キャッシュの設定はいろいろ試しましたが文字化けしません。
http://sunos.saita.ma/read-js/test/read.html
はEUCなんですね。
あと、サーバー自身がtext/plain;charset=xxxを吐き出していないような気がするのですがどうなのでしょう?
>>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 指定を外してます.
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 指定を外してます.
135tato
2006/07/28(金) 11:50:21ID: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()でキャッシュを無視したりする方がよいかもしれません。
つまり、毎回読みにいっているわけですけれど、少なくとも、この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()でキャッシュを無視したりする方がよいかもしれません。
2006/07/28(金) 11:52:56ID:YlQHVubn0
>>134
全部同じ HTML でいいんだから1画面フレームで表示、てのもできるけど、そうでなくても
<script type="text/javascript" src="****.js"></script>
と指定すればこのファイルはキャッシュされるよ。
> それぞれのページ内でさらに *.dat を取得します.
これは多分、read.cgi も同じでしょう。
Ajax スレの方に書いたけど、plain.cgi とか使えば最新 50 もできるよね。
全部同じ HTML でいいんだから1画面フレームで表示、てのもできるけど、そうでなくても
<script type="text/javascript" src="****.js"></script>
と指定すればこのファイルはキャッシュされるよ。
> それぞれのページ内でさらに *.dat を取得します.
これは多分、read.cgi も同じでしょう。
Ajax スレの方に書いたけど、plain.cgi とか使えば最新 50 もできるよね。
>>136 いや,だから JavaScript 部分を分離しようがフレームを使おうが何だろうが,
外側の read.html 自体は板・スレが変われば別ドキュメントとして扱われる,
だからそのたびに新たにロードされる(余計な HTTP リクエストが発生する)
ということを言いたいわけですが......
>> それぞれのページ内でさらに *.dat を取得します.
>これは多分、read.cgi も同じでしょう。
少なくとも,read.cgi 自体が *.dat を HTML 整形する限りに置いては
HTTP リクエスト・レスポンスは1回だけで済むわけですが......
それとも,read.cgi がサーバ内で *.dat を読み込むって意味で言ってますか?
ネットワーク越しに HTTP リクエストを受け付けてクライアントに *.dat の内容を
返すのに比べれば,ローカルファイルを open(), mmap() して読み込むだけの
方が遙かに軽いわけですが......
外側の read.html 自体は板・スレが変われば別ドキュメントとして扱われる,
だからそのたびに新たにロードされる(余計な HTTP リクエストが発生する)
ということを言いたいわけですが......
>> それぞれのページ内でさらに *.dat を取得します.
>これは多分、read.cgi も同じでしょう。
少なくとも,read.cgi 自体が *.dat を HTML 整形する限りに置いては
HTTP リクエスト・レスポンスは1回だけで済むわけですが......
それとも,read.cgi がサーバ内で *.dat を読み込むって意味で言ってますか?
ネットワーク越しに HTTP リクエストを受け付けてクライアントに *.dat の内容を
返すのに比べれば,ローカルファイルを open(), mmap() して読み込むだけの
方が遙かに軽いわけですが......
138136
2006/07/28(金) 12:07:04ID:YlQHVubn0 あーもっと簡単な方法に気づいた。
/test/read.html#/operate/1000000000/
location.hash で指定。ダメかな?
/test/read.html#/operate/1000000000/
location.hash で指定。ダメかな?
>>138 余計なリクエストを発生させないという点では有効でしょうけど,
その形式が普及するまでの間,既存の板・スレ指定を行った URL が残る限りは
効果を発揮しきれないかと.まぁ過去にも一度 QUERY_STRING から PATH_INFOへの
転換を行ってるので,そうした新形式への変換は必ずしも不可能ではないかも知れませんが......
その形式が普及するまでの間,既存の板・スレ指定を行った URL が残る限りは
効果を発揮しきれないかと.まぁ過去にも一度 QUERY_STRING から PATH_INFOへの
転換を行ってるので,そうした新形式への変換は必ずしも不可能ではないかも知れませんが......
2006/07/28(金) 12:28:17ID:YlQHVubn0
2006/07/28(金) 12:34:38ID:o51wigyx0
>>140
read.cgiはさらに負荷もあるですよ
read.cgiはさらに負荷もあるですよ
142tato
2006/07/28(金) 12:39:40ID:chE9END/0 考えられるShft_JIS用文字化け対策リストはこんな感じ?
>>111 utf-8専用のディレクトリ/dat-utf8/を作る
>>125 respnseTextではなくrespnseXMLでcharsetを明示処理 -->Safari1.2でも動作可
>>135 キャッシュ無効no-cache -->ユーザーの設定が優先されるので駄目かも&負荷?
>>135 キャッシュ無視url+"?"+(new Date()).getTime() -->read.htmlを何度でも呼ぶ負荷が気になる?
utf-8にしてもresponseTextではBOMを付けるなどの弊害もある細工が必要なので、
私はXMLを使う>>125がお勧めですが、.datの構造を変えるのは手間?
だめなら、キャッシュを無視。
>>111 utf-8専用のディレクトリ/dat-utf8/を作る
>>125 respnseTextではなくrespnseXMLでcharsetを明示処理 -->Safari1.2でも動作可
>>135 キャッシュ無効no-cache -->ユーザーの設定が優先されるので駄目かも&負荷?
>>135 キャッシュ無視url+"?"+(new Date()).getTime() -->read.htmlを何度でも呼ぶ負荷が気になる?
utf-8にしてもresponseTextではBOMを付けるなどの弊害もある細工が必要なので、
私はXMLを使う>>125がお勧めですが、.datの構造を変えるのは手間?
だめなら、キャッシュを無視。
143tato
2006/07/28(金) 12:47:17ID:chE9END/0 静的ファイルへのリクエストと.cgiの負荷を比べると、普通は.cgiの負荷の方が高いと思いますが、
なにしろ、リクエスト数の多い2chなので、その判断は現場の人でないとわからないかも?
なにしろ、リクエスト数の多い2chなので、その判断は現場の人でないとわからないかも?
>>140-141 read.cgi の処理による負荷があるのはわかります.しかし,
静的コンテンツであっても HTTP リクエストを処理することによる負荷もあります.
HTTP リクエストが増えればそれによる負荷増もあるってことで,
そのあたりを read.cgi をリファインした場合と比較すればどうなのか,と.
静的コンテンツであっても HTTP リクエストを処理することによる負荷もあります.
HTTP リクエストが増えればそれによる負荷増もあるってことで,
そのあたりを read.cgi をリファインした場合と比較すればどうなのか,と.
2006/07/28(金) 13:02:09ID:zKffljcV0
どんなにリファインしても.cgiの負荷が静的コンテンツの負荷より下がるとは思えないけどなぁ
146stream ◆PNstream2s
2006/07/28(金) 13:06:22ID: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: 昔の時刻 を設定するのが一番どのブラウザでも安全かと
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: 昔の時刻 を設定するのが一番どのブラウザでも安全かと
147tato
2006/07/28(金) 13:15:09ID: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にも任せられる?ハイブリッドみたいな?
>>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にも任せられる?ハイブリッドみたいな?
>>145 HTTP リクエスト数がほぼ同一という前提ならそれは当然です.
さすがに,単一のリクエストにおいて動的コンテンツ処理の負荷が
静的コンテンツ処理の負荷より軽いなんてことを言うつもりはないです.
ただ,JavaScript 版(に限らず Java や Flash などでもそうでしょうが)で
ページをロードした場合,外側の html と内側の dat 双方の HTTP リクエストが発生します.
つまり(静的コンテンツではあるものの)HTTP リクエストが増加することは必至です.
しかも,その静的コンテンツも sendfile() で一気に送るのではなく,
gzip 圧縮という結構重い処理を介してます.そうしたことも考慮すれば,
HTTP リクエスト増加による負荷増も無視できない水準になるだろう,
それを read.cgi をリファインした場合と比べればどうなのだろうか,と......
要は,個人的には JavaScript 版 read.cgi を作ること関しては,
負荷対策を第一義的目標として掲げて行うことには懐疑的,
(負荷も考慮しつつも)技術的好奇心を主眼として行うのなら好意的,ってことです.
さすがに,単一のリクエストにおいて動的コンテンツ処理の負荷が
静的コンテンツ処理の負荷より軽いなんてことを言うつもりはないです.
ただ,JavaScript 版(に限らず Java や Flash などでもそうでしょうが)で
ページをロードした場合,外側の html と内側の dat 双方の HTTP リクエストが発生します.
つまり(静的コンテンツではあるものの)HTTP リクエストが増加することは必至です.
しかも,その静的コンテンツも sendfile() で一気に送るのではなく,
gzip 圧縮という結構重い処理を介してます.そうしたことも考慮すれば,
HTTP リクエスト増加による負荷増も無視できない水準になるだろう,
それを read.cgi をリファインした場合と比べればどうなのだろうか,と......
要は,個人的には JavaScript 版 read.cgi を作ること関しては,
負荷対策を第一義的目標として掲げて行うことには懐疑的,
(負荷も考慮しつつも)技術的好奇心を主眼として行うのなら好意的,ってことです.
2006/07/28(金) 13:33:36ID:YlQHVubn0
iframe 使った読み込みした場合のデータのキャッシュって普通のコンテンツと同じかな?
使えるとしたら、Expires で超未来指定することで HTTP リクエストを軽減できるかも。
使えるとしたら、Expires で超未来指定することで HTTP リクエストを軽減できるかも。
150tato
2006/07/28(金) 13:52:45ID:chE9END/0 それにしても、metaでもブラウザ側でもShift_JISを指定した上で、
IE6で通常のShift_JISファイルをXHRで読み込んで、文字化けするということは無いと思うので
gzip 圧縮か、Content-Type設定に原因があるかも。でも、仮にこれが解決してもXML処理の方がお勧めではあります。
IE6で通常のShift_JISファイルをXHRで読み込んで、文字化けするということは無いと思うので
gzip 圧縮か、Content-Type設定に原因があるかも。でも、仮にこれが解決してもXML処理の方がお勧めではあります。
151149
2006/07/28(金) 14:17:19ID: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 を超未来にする、て感じ。
難点はあぼーんが反映されないってことだけど。
<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 を超未来にする、て感じ。
難点はあぼーんが反映されないってことだけど。
152149
2006/07/28(金) 14:22:20ID:YlQHVubn0 × q{document...
◯ qq{document...
◯ qq{document...
>>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 リクエスト増も加わるってことも考えれば......
「そういう使い方はしないで内容更新時にはページ内の更新ボタンをクリックして下さい」
とか呼びかけようとしても,read.cgi 利用者層の多くを占めるライトユーザには
なかなか普及しなさそうな気も...... read.html に対して
ExpiresActive On
ExpiresDefault "access 1 week"
とか指定しても,ページ自体をリロードすれば HTTP リクエストは
発生するようです.いったん取り込んだ URL なら 304 にはなりますが.
で,今の DSO 版ではない昔の read.cgi には,HTML 整形せず dat の形式のままで
行単位の内容を返す raw mode ってのがありました(今は廃止).でも,HTML 整形するよりは
raw 形式の方が軽いとはいえ,結局サーバ側プログラム走らせることには変わらないんですよね.
そこに HTTP リクエスト増も加わるってことも考えれば......
2006/07/28(金) 14:58:27ID:636jpKTQP
作ってから考えればいいんじゃね
155149
2006/07/28(金) 15:08:55ID:dbg/okTO0 >>153
ttp://labs.cybozu.co.jp/blog/kazuho/archives/2006/02/utilizing_cache.php
このページに書いてあることを信用すると、 Expires ヘッダは
Last-Modified ヘッダと併用することでリクエストそのものが無くなるみたいだよ。
ttp://labs.cybozu.co.jp/blog/kazuho/archives/2006/02/utilizing_cache.php
このページに書いてあることを信用すると、 Expires ヘッダは
Last-Modified ヘッダと併用することでリクエストそのものが無くなるみたいだよ。
156stream ◆PNstream2s
2006/07/28(金) 15:18:29ID:7fX0/+L20 WindowsのIE6では、更新ボタンを押した場合は再読み込みされるよ
>>155 内側で読み込むデータってことね.それなら,今も実際に index.js で利用してて
効果は出てるようです.でも,外側の read.html のリロードまでは抑制できないかと.
で,>>151 は内部で読む方のリロードを抑制ってことか.でもそれだと今度は
dat が更新されてもなかなか反映されないってことになりそうな......
あと,そういう形で行単位の内容を返すなら
・ \n を探すためファイル内容をスキャン.
・ JavaScript 文字列にするなら,さらに " や \ をエスケープするためにスキャン.
こういうことやるぐらいなら,タグ付け加えて HTML 化ってのがそういう処理に比べて
べらぼうに重いとは思えません.もしべらぼうに重いとすれば,それはムダな処理をしてるからかと.
ある程度は重くなるでしょうけど,少なくとも HTTP リクエスト増加による負荷増より
ずっと重いなんてことはあり得ないような.
効果は出てるようです.でも,外側の read.html のリロードまでは抑制できないかと.
で,>>151 は内部で読む方のリロードを抑制ってことか.でもそれだと今度は
dat が更新されてもなかなか反映されないってことになりそうな......
あと,そういう形で行単位の内容を返すなら
・ \n を探すためファイル内容をスキャン.
・ JavaScript 文字列にするなら,さらに " や \ をエスケープするためにスキャン.
こういうことやるぐらいなら,タグ付け加えて HTML 化ってのがそういう処理に比べて
べらぼうに重いとは思えません.もしべらぼうに重いとすれば,それはムダな処理をしてるからかと.
ある程度は重くなるでしょうけど,少なくとも HTTP リクエスト増加による負荷増より
ずっと重いなんてことはあり得ないような.
2006/07/28(金) 15:44:15ID:JuOh4RhP0
有効期限も長くし過ぎると、テストが十分でなくて不具合を混入させてしまったまま
リリースした時に困りますよ。失礼な言い方になるけど、ユーザーの大半は基本的に
馬○ですからね。不具合がある事を訴えることは出来ても、何が原因で
どうすればいいか思いつくことまでは出来ないのが多い。
まぁここに来て騒いでCtrl+F5を押せって言われる流れになるんでしょうけど。
リリースした時に困りますよ。失礼な言い方になるけど、ユーザーの大半は基本的に
馬○ですからね。不具合がある事を訴えることは出来ても、何が原因で
どうすればいいか思いつくことまでは出来ないのが多い。
まぁここに来て騒いでCtrl+F5を押せって言われる流れになるんでしょうけど。
160149
2006/07/28(金) 16:12:12ID:dbg/okTO0 >>158
キモは、ブラウザのキャッシュに入ってるデータはリクエストしないってとこだったりするのだけれど。
行単位がダメなら、やっぱり iframe なのかな?でもキャッシュが効くかどうかもわからない。
新着を探すためには、最後の位置を覚えとかないといけないし。これは、read.js の他に read.txt も必要かも。
そしてやっぱり、更新ボタンを押したらリロードしちゃうんでは、ちょっと微妙かな。
read.cgi のキャッシュの仕組みがよくわからないけど、多分、
最新 50 の後に全表示とか、キャッシュにデータが重複してても構わず処理するんでしょう。
サーバ側は知る術が無いしそれは普通なんだけど、そうならやっぱり。
キモは、ブラウザのキャッシュに入ってるデータはリクエストしないってとこだったりするのだけれど。
行単位がダメなら、やっぱり iframe なのかな?でもキャッシュが効くかどうかもわからない。
新着を探すためには、最後の位置を覚えとかないといけないし。これは、read.js の他に read.txt も必要かも。
そしてやっぱり、更新ボタンを押したらリロードしちゃうんでは、ちょっと微妙かな。
read.cgi のキャッシュの仕組みがよくわからないけど、多分、
最新 50 の後に全表示とか、キャッシュにデータが重複してても構わず処理するんでしょう。
サーバ側は知る術が無いしそれは普通なんだけど、そうならやっぱり。
161動け動けウゴウゴ2ちゃんねる
2006/07/28(金) 16:16:12ID:lDXvnfU00 1レス1ファイルにするのが一番良い。
jsはwww.2chとか静的コンテンツ用のサーバにおいて、
datはqb5.2chの既存のサーバとかコネクションを切り分けるとかって
出来るんでしょうか?
datはqb5.2chの既存のサーバとかコネクションを切り分けるとかって
出来るんでしょうか?
2006/07/28(金) 16:24:12ID:JuOh4RhP0
んー、Gecko(Firefox)はできない可能性が高いけど、2ch.net同士だからなぁ。
164149
2006/07/28(金) 16:26:09ID:dbg/okTO0 js が別のサーバに置いてあったとしても、
js を読み込む(実行する) html が読みたい dat と同じドメインにあれば、dat は読み込めるよ。
js を読み込む(実行する) html が読みたい dat と同じドメインにあれば、dat は読み込めるよ。
>>162 JavaScript 部分を HTML から分離して別のところに置く,ってのは
今の read.cgi や index.html でもやってます(www2.2ch.net/snow/index.js).
ただ,URL で鯖・板・スレを指定している限り,外側の read.html が
各所に散らばる状態はいかんともしがたいかと.
今の read.cgi や index.html でもやってます(www2.2ch.net/snow/index.js).
ただ,URL で鯖・板・スレを指定している限り,外側の read.html が
各所に散らばる状態はいかんともしがたいかと.
外側の read.htmlといいますと?
>>166 例えば,
http://qb5.2ch.net/test/read.html/operate/1153819270/
という URL でスレを表示させる際の
http://qb5.2ch.net/test/read.html
のことです.
http://qb5.2ch.net/test/read.html/operate/1153819270/
という URL でスレを表示させる際の
http://qb5.2ch.net/test/read.html
のことです.
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【テレビ】中居正広出演『ザ!世界仰天ニュース4時間SP』日テレ「現時点で変更の予定はございません」 [Ailuropoda melanoleuca★]
- 山陽新幹線で乗客が非常ボタン 車掌に切符の問い合わせしようと [蚤の市★]
- ドイツ、軍拡時代に逆戻りする、米国も国連も頼れないため 軍事力増強に走る [お断り★]
- 【テレビ】中居正広の‟9000万円トラブル“をキー局が報じないウラに「暗黙の紳士協定」という悪癖 [阿弥陀ヶ峰★]
- 【コンビニ】セブン-イレブン「うれしい値!」で客数増加 20代男性と女性の新規顧客を獲得 300品に拡充し今後も継続 [煮卵★]
- 滋賀からもルート再考論 北陸新幹線延伸 衆参議員が「米原」推し 「小浜は京都の理解得られぬ」 [蚤の市★]
- 変な🏡
- 尹大統領、初の支持率40%突破ㅤ [237216734]
- 仕事始めが誕生日なんだけど
- 中国の謎娘、謎道で謎チャーハンを作ってしまう… [963243619]
- 【速報】悠仁、筑波大学までの全ての信号機に警察を配備、すべて手動で青に切り替えて通学へwwwwwww [555054275]
- お前ら年末年始どこに出かけた?俺は近所のスーパー。 [635799952]