X



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

■ このスレッドは過去ログ倉庫に格納されています
NGNG
read.cgiをjavascriptで実現させるプロジェクトのスレッドです。

テスト版
http://sunos.saita.ma/read-js/test/read.cgi
http://sunos.saita.ma/read-js/test/read.cgi/operate/1153615149/
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

などで取り出すのが良いかも。
2006/07/28(金) 10:43:15ID: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 版を作るのは負荷対策というより
「こういうこともできるのか」という技術的好奇心の側面の方が強いという気がします.
2006/07/28(金) 10:50:47ID:3rgozFxf0
>>127 >>118 のは最初に作った旧版で synchronous にデータを取得するため
onreadystatechange() を使ってませんでしたが,今の
http://sunos.saita.ma/read-js/test/read.html
asynchrous にデータを取得するので使ってます.
2006/07/28(金) 11:08:13ID:F/mZ8+KK0
>>118のページに、「文字化けデモです」と注意書きを入れました。
2006/07/28(金) 11:13:30ID:YlQHVubn0
>>129
> そうしたことを考えれば,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を吐き出していないような気がするのですがどうなのでしょう?
2006/07/28(金) 11:41:20ID: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 指定を外してます.
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()でキャッシュを無視したりする方がよいかもしれません。
2006/07/28(金) 11:52:56ID:YlQHVubn0
>>134
全部同じ HTML でいいんだから1画面フレームで表示、てのもできるけど、そうでなくても
<script type="text/javascript" src="****.js"></script>
と指定すればこのファイルはキャッシュされるよ。

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

これは多分、read.cgi も同じでしょう。
Ajax スレの方に書いたけど、plain.cgi とか使えば最新 50 もできるよね。
2006/07/28(金) 12:06:36ID:3rgozFxf0
>>136 いや,だから JavaScript 部分を分離しようがフレームを使おうが何だろうが,
外側の 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 で指定。ダメかな?
2006/07/28(金) 12:13:11ID:3rgozFxf0
>>138 余計なリクエストを発生させないという点では有効でしょうけど,
その形式が普及するまでの間,既存の板・スレ指定を行った URL が残る限りは
効果を発揮しきれないかと.まぁ過去にも一度 QUERY_STRING から PATH_INFOへの
転換を行ってるので,そうした新形式への変換は必ずしも不可能ではないかも知れませんが......
2006/07/28(金) 12:28:17ID:YlQHVubn0
>>139
> 既存の板・スレ指定を行った URL が残る限りは効果を発揮しきれないかと.
あーそっか。そうだね。

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

でも、read.cgi はそれを更に整形してからネットワーク越しに送ってるんだよね?
送られるデータの量よりは、リクエストの数の方が問題なのかな。
2006/07/28(金) 12:34:38ID:o51wigyx0
>>140
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の構造を変えるのは手間?
だめなら、キャッシュを無視。
143tato
垢版 |
2006/07/28(金) 12:47:17ID:chE9END/0
静的ファイルへのリクエストと.cgiの負荷を比べると、普通は.cgiの負荷の方が高いと思いますが、
なにしろ、リクエスト数の多い2chなので、その判断は現場の人でないとわからないかも?
2006/07/28(金) 12:52:12ID:3rgozFxf0
>>140-141 read.cgi の処理による負荷があるのはわかります.しかし,
静的コンテンツであっても HTTP リクエストを処理することによる負荷もあります.
HTTP リクエストが増えればそれによる負荷増もあるってことで,
そのあたりを read.cgi をリファインした場合と比較すればどうなのか,と.
2006/07/28(金) 13:02:09ID:zKffljcV0
どんなにリファインしても.cgiの負荷が静的コンテンツの負荷より下がるとは思えないけどなぁ
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: 昔の時刻 を設定するのが一番どのブラウザでも安全かと
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にも任せられる?ハイブリッドみたいな?
2006/07/28(金) 13:23:21ID:3rgozFxf0
>>145 HTTP リクエスト数がほぼ同一という前提ならそれは当然です.
さすがに,単一のリクエストにおいて動的コンテンツ処理の負荷が
静的コンテンツ処理の負荷より軽いなんてことを言うつもりはないです.

ただ,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 リクエストを軽減できるかも。
150tato
垢版 |
2006/07/28(金) 13:52:45ID:chE9END/0
それにしても、metaでもブラウザ側でもShift_JISを指定した上で、
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 を超未来にする、て感じ。
難点はあぼーんが反映されないってことだけど。
152149
垢版 |
2006/07/28(金) 14:22:20ID:YlQHVubn0
× q{document...
◯ qq{document...
2006/07/28(金) 14:46:12ID: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 リクエスト増も加わるってことも考えれば......
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 ヘッダと併用することでリクエストそのものが無くなるみたいだよ。
2006/07/28(金) 15:18:29ID:7fX0/+L20
WindowsのIE6では、更新ボタンを押した場合は再読み込みされるよ
157149
垢版 |
2006/07/28(金) 15:22:51ID:dbg/okTO0
>>156
そうなのか……それじゃぁ >>151-152 は使えないや。
2006/07/28(金) 15:37:48ID:3rgozFxf0
>>155 内側で読み込むデータってことね.それなら,今も実際に index.js で利用してて
効果は出てるようです.でも,外側の read.html のリロードまでは抑制できないかと.

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

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

こういうことやるぐらいなら,タグ付け加えて HTML 化ってのがそういう処理に比べて
べらぼうに重いとは思えません.もしべらぼうに重いとすれば,それはムダな処理をしてるからかと.
ある程度は重くなるでしょうけど,少なくとも HTTP リクエスト増加による負荷増より
ずっと重いなんてことはあり得ないような.
2006/07/28(金) 15:44:15ID:JuOh4RhP0
有効期限も長くし過ぎると、テストが十分でなくて不具合を混入させてしまったまま
リリースした時に困りますよ。失礼な言い方になるけど、ユーザーの大半は基本的に
馬○ですからね。不具合がある事を訴えることは出来ても、何が原因で
どうすればいいか思いつくことまでは出来ないのが多い。
まぁここに来て騒いでCtrl+F5を押せって言われる流れになるんでしょうけど。
160149
垢版 |
2006/07/28(金) 16:12:12ID:dbg/okTO0
>>158
キモは、ブラウザのキャッシュに入ってるデータはリクエストしないってとこだったりするのだけれど。
行単位がダメなら、やっぱり iframe なのかな?でもキャッシュが効くかどうかもわからない。
新着を探すためには、最後の位置を覚えとかないといけないし。これは、read.js の他に read.txt も必要かも。
そしてやっぱり、更新ボタンを押したらリロードしちゃうんでは、ちょっと微妙かな。

read.cgi のキャッシュの仕組みがよくわからないけど、多分、
最新 50 の後に全表示とか、キャッシュにデータが重複してても構わず処理するんでしょう。
サーバ側は知る術が無いしそれは普通なんだけど、そうならやっぱり。
161動け動けウゴウゴ2ちゃんねる
垢版 |
2006/07/28(金) 16:16:12ID:lDXvnfU00
1レス1ファイルにするのが一番良い。
162ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 16:21:33ID:???0?BRZ(2585)
jsはwww.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 は読み込めるよ。
2006/07/28(金) 16:26:33ID:3rgozFxf0
>>162 JavaScript 部分を HTML から分離して別のところに置く,ってのは
今の read.cgi や index.html でもやってます(www2.2ch.net/snow/index.js).
ただ,URL で鯖・板・スレを指定している限り,外側の read.html が
各所に散らばる状態はいかんともしがたいかと.
166ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 16:31:45ID:???0?BRZ(2585)
外側の read.htmlといいますと?
2006/07/28(金) 16:48:20ID:YGISL4lC0
>>166 例えば,
http://qb5.2ch.net/test/read.html/operate/1153819270/
という URL でスレを表示させる際の
http://qb5.2ch.net/test/read.html
のことです.
2006/07/28(金) 16:49:13ID:HmmSpj2e0?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
のことです.
2006/07/28(金) 16:50:12ID:HmmSpj2e0?BRZ(1035)
でっ。ごめんなさい
170ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 16:57:20ID:???0?BRZ(4585)
http://www.2ch.net/read.html&u=http://qb5.2ch.net/operate/dat/1153819270.dat
とかじゃまずいんでしょうか?
2006/07/28(金) 17:04:17ID:YGISL4lC0
>>170
>http://www.2ch.net/read.html&;u
2006/07/28(金) 17:06:20ID:YGISL4lC0
# >>171 ちょん切れたので......

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

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

まぁ,既存の URL との互換性を捨ててもいいならいろいろやりようはあります.
キャッシュを有効活用ということなら # を用いるのがベストです.
ただ,たとえそうしたとしても,それが普及するまでの間は従来式の URL が
当面そのまま残りますから......
173149
垢版 |
2006/07/28(金) 17:09:55ID:dbg/okTO0
js を実行する html と違うドメインの dat は、js からは セキュリティの関係で読み込めないよ。
他ドメインの js ファイルを実行することはできるから、>>151-152 なら大丈夫だけどね。
2006/07/28(金) 17:10:46ID:r+F+KIBY0
従来のアドレスにアクセスしたらそのアドレスに飛ばすっつーことか。
というかスキーム名要らなくない?
もっと言うとPATH_INFOでいいような。
2006/07/28(金) 17:13:51ID:zKffljcV0
セキュリティがドメイン単位なら問題ないような。
鯖単位だと別鯖にだせないけど。
176ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 17:18:29ID:???0?BRZ(4585)
>>173
ドメイン単位?サーバ単位?

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

どうせ.cgiでなくなるので、URLの互換性はあんまり気にしなくていいとおもいます。
2006/07/28(金) 17:19:47ID:YGISL4lC0
まぁ要は,? (QUERY_STRING) や / (PATH_INFO) を使うと,同一の read.html というファイルであっても
板・スレの指定が異なるとブラウザ側はそれぞれ別々のコンテンツとして扱ってしまうってことで.
# を用いて例えば
http://qb5.2ch.net/test/read.html#operate/1153819270/
のようにすれば,板・スレの指定が異なってもブラウザは同一コンテンツとして扱ってくれると.
178ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 17:23:39ID:???0?BRZ(4585)
おぉ、、そういうことなんですかぁ。
#すげー。
179149
垢版 |
2006/07/28(金) 17:25:13ID:dbg/okTO0
>>176
サブドメインを変えて試したことが無いから説得力が無いけど…
多分完全に一致するかどうかでチェックするんじゃないかな。2ch で言うサーバ単位になると思う。
ドメインを超えてアクセスできるとセキュリティホールみたいに見られるから、
大抵のブラウザ(IE、FF、Opera)ではクロスドメインのアクセスはできないよ。
2006/07/28(金) 17:28:17ID:TZJGLoaF0?BRZ(2211)
確かFQDN単位、だった気がする。あくまで気がする。
2006/07/28(金) 17:28:32ID:ko7HWZVp0
オフトピ

IE7β3では異なるドメイン間のサブフレーム移動はデフォルトで禁止
されてます。
(前までこの質問で賑わってました。)
2006/07/28(金) 17:32:22ID: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 ってことで,どちらも「同一ホスト」という制限かと.
2006/07/28(金) 17:33:57ID:6Xyszskt0
Mozilla 1.7.x (Gecko) もopenの段階でエラーが出るね。
2006/07/28(金) 17:34:24ID:YGISL4lC0
>>182
×javascript:var h $3D window.XMLHttpRequest
○javascript:var h = window.XMLHttpRequest
2006/07/28(金) 17:36:40ID:6Xyszskt0
Internet Explorer 6.0 SP1 もopenの段階でえらー。
186tato
垢版 |
2006/07/28(金) 17:39:54ID:chE9END/0
セイムドメインというのはこういうこと。
http://www.mozilla-japan.org/projects/security/components/same-origin.html

XMLHttpRequestでは、どのブラウザでもクロスドメインリクエストは出せません。
187動け動けウゴウゴ2ちゃんねる
垢版 |
2006/07/28(金) 17:48:40ID:t3XQDhSZ0
???????????????
188動け動けウゴウゴ2ちゃんねる
垢版 |
2006/07/28(金) 17:48:45ID:+s1TuJnu0
こっかいぎじどうをばくはするよ
189tato
垢版 |
2006/07/28(金) 17:49:19ID:chE9END/0
外側のread.htmlと
その内側からAjaxでリクエストする.datは同じドメインでなければなりませんが
でも、同じ内側から呼び出す相手でも、Ajaxを実行する.jsファイル自体は、クロスドメインにおいてあっても大丈夫です。

ちなみに、もしdataスタイルをjsのJSONなどの書式にしてもよければ、Ajax以前の時代のクロスドメインなダイナミックロードというのもありますけれど。
http://game.gr.jp/mag2p/2/loadjs/loadjs.htm
2006/07/28(金) 18:05:20ID:kVfCz8VA0
read.js 全ての処理をさせる どこに置いてもおk
read.html read.jsを読ませるだけ datと同じドメインじゃなきゃ駄目。

read.htmlとdatが同じドメインなら、read.jsがdatと通信しても大丈夫
っていう感じ。
2006/07/28(金) 18:11:00ID:E5cyDbY60
パラメータを#で渡すと、リンクが全部紫色にならないかな?
192tato
垢版 |
2006/07/28(金) 19:14:11ID:+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とかですよね?
2006/07/28(金) 20:43:32ID: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
2006/07/28(金) 20:46:11ID:65pSR6Fy0
>>193
すげぇ&乙です
195ひろゆき@どうやら管理人 ★
垢版 |
2006/07/28(金) 21:44:51ID:???0?BRZ(4595)
>>192
現状より重くなる予感。。
2006/07/28(金) 22:11:24ID:N8hDBBv80
>>193
ime.st通ると#以降が消えるね。
2006/07/28(金) 23:07:21ID: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 切ってあるとどうしようもないけど......
2006/07/28(金) 23:13:20ID:A0brsR3K0
>>86がちょっと面白そうなので適当に動かしてみました。
http://www.janis.or.jp/users/segabito/sample/bind.html

sjisを変換せずに読めるのはいいのですが、ちょっといじると表示が止まったり、
リロードするたびに動いたり動かなかったりして、どうも安定しませんでした。
2006/07/28(金) 23:13:47ID:r+F+KIBY0
ブラウザ派急先鋒のまろゆきさん>>197これ入れてください
2006/07/28(金) 23:17:27ID: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板のことをおいらにいわれてもわからんです。。
2006/07/28(金) 23:43:38ID:NVd2zaE20
Konquerorでも文字バケバケっぽいですね。
にわかユーザだからよくわからんけど。
2006/07/28(金) 23:50:10ID:E5cyDbY60
read.cgiの負荷を大幅に減らすことが目的なら、
WinIEだけを専用のスクリプトに飛ばせば目標達成かもしれないですね。  (それじゃあ面白くないって?)
2006/07/29(土) 00:02:05ID:r+F+KIBY0
ふと思った。2chユーザーのUA割合ってどうなってるんだろうな。と
204root▲ ★
垢版 |
2006/07/29(土) 01:15:55ID:???0?PLT(10016)
さてと。

>>193 を、dso あたりに仮に入れてみるとしたら、
.htaccess 的には、どうすればいいのかしら。
2006/07/29(土) 01:26:14ID:/t2rUAyV0
>>203
携帯とIEで八割は占めるんじゃないかな?
2006/07/29(土) 01:49:35ID:Y5mKI9rz0
実用性を考えると100レスずつ表示ぐらいなら、ブラクラまでは行かないレベルになりそうかな?
2006/07/29(土) 10:22:03ID:vqF7YG+l0
Opera8.54から>>193を見てみたら初回取得時は正常に表示されるけど、
再読み込みもしくは再度開きなおすと読み込み中のまま先に進まなくなった。
2006/07/29(土) 12:21:50ID:98QBwhrS0
>>204 どっちにしろ httpd.conf に入れなければならない設定もあるんで,
全部まとめて httpd.conf でもいいかも......
----------------------------------------------------------------------
LoadModule charset_lite_module libexec/mod_charset_lite.so

AliasMatch ^/(\w+)/dat-utf8/(\d+\.dat)$ /home/ch2xxx/public_html/$1/dat/$2
<Location /*/dat-utf8/*.dat>
    SetOutputFilter XLATEOUT
    CharsetSourceEnc CP932
    CharsetDefault UTF-8
    AddDefaultCharset UTF-8
    Header append Cache-Control max-age=5
</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>

<Files read.html>
    AcceptPathInfo On
</Files>
<Files read.cgi>
    AcceptPathInfo On
    ForceType text/html
    SetHandler default-handler
</Files>
----------------------------------------------------------------------
mod_charset_lite には >>111 のパッチが必要.ビルド時には >>114 をチェック.

# 今は read.html 中に JavaScript を直接記述してますが,実運用段階では分離する方向で.


>>207 Opera では JavaScript のエラーダイアログか何か出ますかね?
何かエラーが発生してるとすれば,どんなエラーなのかがわかれば対処しやすいですが.

# というか,sunos.saita.ma には mod_headers が入ってないので
# Cache-Control ヘッダを出力してませんが,そのせいかな......?
2006/07/29(土) 12:38:30ID:vqF7YG+l0
>>208
javascriptコンソールのエラーは

読み込み中。。。
http://sunos.saita.ma/read-js/test/read.cgi/operate/1153615149/l50
Event thread: mouseover
Error:
name: TypeError
message: Statement on line 254: Could not convert undefined or null to object
Backtrace:
Line 254 of User JS script
dt.innerHTML.match(/^(<[^>]*>)?(\d+)/);
Line 217 of User JS script
setResNumber(t.previousSibling);
At unknown location
[statement source code not available]

このような感じです。
2006/07/29(土) 13:01:55ID:98QBwhrS0
>>209 どもども.しかし......

>Line 254 of User JS script
>dt.innerHTML.match(/^(<[^>]*>)?(\d+)/);
>Line 217 of User JS script
>setResNumber(t.previousSibling);

少なくとも,こちらが作った JavaScript には上記のようなステートメントは
含まれてないんですが(mouseover イベントも使ってないし),
どこで入り込んだんだろう......?
もしかして,壺か何かのスクリプトと衝突してる......?
2006/07/29(土) 13:05:06ID:IWp6FTEr0
> User JS script
212root▲ ★
垢版 |
2006/07/29(土) 13:27:00ID:???0?PLT(10017)
>>208
mod_charset_lite って、
Apache 2.2 以降じゃないとだめなんでしたっけ。
2006/07/29(土) 13:31:34ID:vqF7YG+l0
あー、すいません。
テストするときにはUSER.JSを切っていたんですが、
切ってなかったときのエラーログのようです。

それ以外ではどんなエラーも出ていないようですが、再読み込みをすると>>57のIEの時のようになってしまいます。
2006/07/29(土) 13:38:15ID:98QBwhrS0
>>212 2.0 と 2.2 のモジュールは基本的にソースレベルでは互換性があるので平気かと.
(ただしバイナリレベルの互換性はない)

>>213 なるほど......キャッシュの問題なんですかねぇ.
(sunos.saita.ma では設定不能ですが)Cache-Control 等のヘッダで改善するかどうか......
215root▲ ★
垢版 |
2006/07/29(土) 13:50:24ID:???0?PLT(10017)
>>214
> 2.0 と 2.2 のモジュールは基本的にソースレベルでは互換性があるので平気かと.
> (ただしバイナリレベルの互換性はない)

なるほど、それならいけそうですね。
dso を 2.2 系にするといろいろめんどいので(read.cgi バイナリとか)。

今日はもうちょっとしたらお出かけなので、
早くても今夜ぐらいあたりからかなと。
2006/07/29(土) 14:40:12ID:98QBwhrS0
>>111 のパッチを 2.2.3 向けに更新しますた.
217ひろゆき@どうやら管理人 ★
垢版 |
2006/07/29(土) 15:03:40ID:???0?BRZ(4596)
>>199
どういうふうに使うのか全然わかってなかったり。。。
2006/07/29(土) 15:13:55ID:98QBwhrS0
>>217 ime.nu(って今落ちてますか?)の <head>〜</head> 中に

<script type="text/javascript" defer><!--
onload = function(e) {
    if (location.hash) {
        document.links[0].href += location.hash;
        document.links[0].firstChild.data += location.hash;
    }
};
//--></script>

って入れてもらえばいいかと.
2006/07/29(土) 15:28:14ID:kqq5BMIj0?BRZ(2395)
>>217
俺に★くれればおk
2006/07/29(土) 15:31:35ID:iSW8jgHp0?BRZ(2223)
すれ違いだけども、ime.(nu|st)、落ちまくりなのをなんとかしてほしかったり。
2ちゃんでリダイレクトを用意したりはしないのかしら。
2006/07/29(土) 15:58:03ID:RFhDAZJL0
>>218
>>200
当時の管理人のひろゆ子さんはjavascriptに否定的だったけど、
今の管理人のひろゆきさんはOKしてくれそうですね。
222ひろゆき@どうやら管理人 ★
垢版 |
2006/07/29(土) 16:07:15ID:???0?BRZ(4596)
あいあい
2006/07/29(土) 16:19:40ID:kqq5BMIj0?BRZ(2395)
★下さい
2006/07/29(土) 17:03:06ID:5tGYbn9Q0?BRZ(1019)
http://sv2ch.baila6.jp/server.cgi?server=ime.nu
http://sv2ch.baila6.jp/server.cgi?server=ime.st

ロビンちゃんが転けまくっているのでしょう(泪)
225動け動けウゴウゴ2ちゃんねる
垢版 |
2006/07/29(土) 19:07:06ID:RoQ9c9iw0
これは良いエセAjaxブラウザですね。なかなかいいですね。
でも若干読み込みが遅い気がする・・・
2006/07/29(土) 19:19:47ID:WE2YiTKi0
このスレ見てテキストのDATはXMLで保存するに限ると学習した
2006/07/29(土) 19:57:11ID:rr/RhnKa0
難しい話は良く判らないけど、このプロジェクトは
普通のブラウザを2ch専ブラ化するっていう認識で
OKなのかな?

そうすると、広告を見る人が居なくなる予感……

ひろゆきはそれでいいの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況