■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
read.cgi 2006―JavaScriptはCGIの夢を見るか
- 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板のことをおいらにいわれてもわからんです。。  
 
- 201 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 23:43:38 ID:NVd2zaE20
 -  Konquerorでも文字バケバケっぽいですね。 
 にわかユーザだからよくわからんけど。 
 
- 202 :動け動けウゴウゴ2ちゃんねる :2006/07/28(金) 23:50:10 ID:E5cyDbY60
 -  read.cgiの負荷を大幅に減らすことが目的なら、 
 WinIEだけを専用のスクリプトに飛ばせば目標達成かもしれないですね。  (それじゃあ面白くないって?) 
 
- 203 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 00:02:05 ID:r+F+KIBY0
 -  ふと思った。2chユーザーのUA割合ってどうなってるんだろうな。と 
 
- 204 :root▲ ★ :2006/07/29(土) 01:15:55 ID:???0 BE:1824454-PLT(10016)
 -  さてと。 
  
 >>193を、dso あたりに仮に入れてみるとしたら、 
 .htaccess 的には、どうすればいいのかしら。 
 
- 205 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 01:26:14 ID:/t2rUAyV0
 -  >>203
 携帯とIEで八割は占めるんじゃないかな? 
 
- 206 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 01:49:35 ID:Y5mKI9rz0
 -  実用性を考えると100レスずつ表示ぐらいなら、ブラクラまでは行かないレベルになりそうかな? 
 
- 207 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 10:22:03 ID:vqF7YG+l0
 -  Opera8.54から>>193を見てみたら初回取得時は正常に表示されるけど、 
 再読み込みもしくは再度開きなおすと読み込み中のまま先に進まなくなった。 
 
- 208 : 株価【1100】 ▲ ◆cZfSunOs.U  :2006/07/29(土) 12:21:50 ID: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 を直接記述してますが,実運用段階では分離する方向で. 
  
  
 >>207Opera では JavaScript のエラーダイアログか何か出ますかね? 
 何かエラーが発生してるとすれば,どんなエラーなのかがわかれば対処しやすいですが. 
  
 # というか,sunos.saita.ma には mod_headers が入ってないので 
 # Cache-Control ヘッダを出力してませんが,そのせいかな......? 
 
- 209 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 12:38:30 ID: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] 
  
 このような感じです。 
 
- 210 : 株価【1100】 ▲ ◆cZfSunOs.U  :2006/07/29(土) 13:01:55 ID:98QBwhrS0
 -  >>209どもども.しかし...... 
  
 >Line 254 of User JS script 
 >dt.innerHTML.match(/^(<[^>]*>)?(\d+)/); 
 >Line 217 of User JS script 
 >setResNumber(t.previousSibling); 
  
 少なくとも,こちらが作った JavaScript には上記のようなステートメントは 
 含まれてないんですが(mouseover イベントも使ってないし), 
 どこで入り込んだんだろう......? 
 もしかして,壺か何かのスクリプトと衝突してる......? 
 
- 211 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 13:05:06 ID:IWp6FTEr0
 -  > User JS script 
 
- 212 :root▲ ★ :2006/07/29(土) 13:27:00 ID:???0 BE:4104959-PLT(10017)
 -  >>208
 mod_charset_lite って、 
 Apache 2.2 以降じゃないとだめなんでしたっけ。 
 
- 213 :動け動けウゴウゴ2ちゃんねる :2006/07/29(土) 13:31:34 ID:vqF7YG+l0
 -  あー、すいません。 
 テストするときにはUSER.JSを切っていたんですが、 
 切ってなかったときのエラーログのようです。 
  
 それ以外ではどんなエラーも出ていないようですが、再読み込みをすると>>57のIEの時のようになってしまいます。 
 
- 214 : 株価【1100】 ▲ ◆cZfSunOs.U  :2006/07/29(土) 13:38:15 ID:98QBwhrS0
 -  >>2122.0 と 2.2 のモジュールは基本的にソースレベルでは互換性があるので平気かと. 
 (ただしバイナリレベルの互換性はない) 
  
 >>213なるほど......キャッシュの問題なんですかねぇ. 
 (sunos.saita.ma では設定不能ですが)Cache-Control 等のヘッダで改善するかどうか...... 
 
- 215 :root▲ ★ :2006/07/29(土) 13:50:24 ID:???0 BE:3830876-PLT(10017)
 -  >>214
 >  2.0 と 2.2 のモジュールは基本的にソースレベルでは互換性があるので平気かと. 
 >  (ただしバイナリレベルの互換性はない) 
  
 なるほど、それならいけそうですね。 
 dso を 2.2 系にするといろいろめんどいので(read.cgi バイナリとか)。 
  
 今日はもうちょっとしたらお出かけなので、 
 早くても今夜ぐらいあたりからかなと。 
 
- 216 : 株価【1100】 ▲ ◆cZfSunOs.U  :2006/07/29(土) 14:40:12 ID:98QBwhrS0
 -  >>111のパッチを 2.2.3 向けに更新しますた. 
 
317KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30