多量の行数の表を展開すると時間がかかります。
そこで数十行ずつ時間をおいて追加しているのですが
元のデータを得るのは、一度で行っています。
そこでお聞きしたいのですが、百戦錬磨の経験者の皆様は
データを得るために分割でクエリーを発行していますか?
目的はもちろん見た目の速度アップです。
なんとなくそこまでやるのは無駄なような気がして・・
それと多量のデータを表を展開するまで蓄えておくのが気になっています
ajaxのライブラリはhttp://jsgt.org/lib/ajax/ref.htmを使ってます
<html>
<body>
<form>
SQL:<input type="button" value="Send SQL" onClick="sendMySQL(document.getElementById('sql').value)"><br>
<textarea id="sql" cols="50" rows="10"></textarea>
</form>
<hr>
<table border="1"><tbody id="t"></tbody></table>
<script src = "jslb_ajax.js" charset= "utf-8"></script>
<script>
var hyo=[];
var login={ host:'localhost', user:'root', pass:'xxxx' }
function sendMySQL( sql ){
login.cmnd = sql;
sendRequest( viewTable, login, 'POST', './sql.php', true, true );
}
function viewTable(o){
var dat = o.responseText;
delNodes('t');
if(!dat) return;
hyo = dat.split('\x1e');
appendTable('t');
}
function appendTable( table ){
for(var i=0; i<30; i++){
if(hyo.length == 0) return;
var tdList = hyo.shift().split('\x1f');
var trNode = document.createElement('tr');
for(j=0; j<tdList.length; j++){
var tdNode = document.createElement('td');
tdNode.appendChild( document.createTextNode(tdList[j]));
trNode.appendChild( tdNode );
}
document.getElementById(table).appendChild(trNode);
}
setTimeout("appendTable('"+table+"')",100);
}
function delNodes(s){var o=document.getElementById(s);while(o.hasChildNodes())o.removeChild(o.lastChild)}
</script>
</body>
</html>
<?php
//mb_language( 'Japanese' );
//header ("Content-Type: text/html; charset=utf-8");
//define( '_CHAR_CODE', 'UTF-8');
//mb_internal_encoding( _CHAR_CODE );
//mb_http_output( _CHAR_CODE );
//ob_start( 'mb_output_handler');
//if( strpos( $_SERVER[ 'HTTP_REFERER' ], "url" )!==0) exit;
$d = mysql_connect( $_POST['host'], $_POST['user'], $_POST['pass'] );
if(!$d) exit;
if(!$rt=mysql_query($_POST['cmnd'], $d)) exit(mysql_error($d));
$b='';
while( $r = mysql_fetch_array($rt, MYSQL_NUM)) $b[]=join("\x1f",$r);
echo trim(join("\x1e",$b));
No.3ベストアンサー
- 回答日時:
基本的に分割しています。
(基本的に=つまり例外もある)1回にダウンロードする内容は、
Ajaxを使わずにCGIだけでHTMLを出力している場合や、Dreamweaverなどで静的なHTMLファイルを作るときに表示する内容、
その1ページ分のみですね。
スタンダードというのはないと思いますが、
要は、1ページの中に何件表示すれば読みやすくなるか、というそれだけだと思います。
>ANo.1 補足
懸念されているとおり、巨大なページはPCのメモリ消費、表示処理にも影響します。
1000行をダウンロードしても読まなければ、それこそ不要なダウンロード、負荷になりますしね。
しかしながら、スクリプトを見る限りでは、
数千行でも1度に表示する方が良いかもしれません。
表計算ソフトでは、最大数万件まで表示可能になっていますが、
そのような内容であれば、1000件や全件表示にする方が良いこともあると思います。
innerHTMLで一気に書き出した方が表示が早いことは確かですし、
このサイズになると'<table>〜</table>'という文字列を生成して、<div>のinnerHTMLに放り込む、
または、むしろJavaScriptを使わずにインラインフレームで表示する、という方法も一考かと思います。
>ANo.2
CSVをJavaScriptで分割するよりも、JSONで受け取ってevalする方がはるかに早いです。
ですので、CSVで受け取ってsplitするよりも、
PHP側であらかじめJSON(配列)で記述しておき、eval(o.responseText)とする方が早いですが、
なかにはevalは邪道だとかいう話もありますけどね(^^;
コードがあまりにも単純すぎて素人っぽく見えるので嫌われるんでしょうかねぇ?
不正なデータの場合、いきなりスクリプトエラーが発生するという問題がありますが、
私は良いと思いますけど。
今思えば、これで逃げられるかなぁ。試してません。
try{
eval(o.responseText);
}catch(e){
alert('error');
}
回答有難うございます^^;
分割で処理するほうに、進みます。
たしかに使いもしない千行は無駄になるかもしれませんしね~
最初に画面に表示されるのが30行程度ですから、まずはそれを
処理してから、次へとすることにします
最初の頃は、innerHTMLで一気に展開していました。
しかし、徐々に追加されていく(見た目ね)様子を他人に見せるのが
自慢になっていたりして・・・
なので、普通の人ができないnodeでの追加。
そしてevalを使わない処理!をしてました。(見栄か?)
なんだかevalは否定はしませんが邪道なような気がしています。
使ってみると便利なのですが、try & catch もその部類な気がしてます
なんだか抽象的な質問にお付き合い頂きましてありがとうございました!
No.2
- 回答日時:
#1です!
数千行…。だったら分けた方が良いと思います。
>それは例えばPHPでSQLのデータを受け取り、それを分割にしてファイルに書き込んで置き、それを順番にjavascript側で読み込むと言う意味ですか?
ですです。ただ、こちらもeval関数通すので速度的にどうなの?という問題もあるかも知れませんが…。
数千のデータを扱うのはまだやった事がないので、手に負えないと思ってちょっと調べてみました。
参考URLに記載されたサンプルはいかがでしょう?
ハウツーでphp側の処理も書いているので使える部分だけ使えば良いと思います。。。
役に立てなくてスイマセン><
参考URL:http://journal.mycom.co.jp/articles/2008/06/25/f …
この回答への補足
サンプル見ましたが・・・・という感じかな?
でも今は他にすることがあるので詳しくはのちほど。
ちょっと現在。タイトルとは違うので詳しい話は省きますが
http://journal.mycom.co.jp/news/2008/10/07/019/i …
にAjaxのセキュリティーについて書いてあったので
勉強してました。というかこれだけではわかりませんが^^;
No.1
- 回答日時:
百戦錬磨ではなく、プログラム歴半月の経験者(新米)ですが。
自分なら一括で落としてしまいます。
分割で落とすような処理を実現させるのに時間がかからないなら有だと思いますけど。
>それと多量のデータを表を展開するまで蓄えておくのが気になっています
メモリに貯めると重くなると懸念しての事でしょうか?
javascriptの配列を吐き出すphpファイルを呼び出す方法があったと思います。
↓こんなの
<script type="text/javascript" src="/query_result.php?sess=****&id=1"></script>
ajaxで同じようにリクエストを送り、戻ってきたデータをeval関数に流すとか駄目でしょうか?
解決になってないですかね・・・。
お役に立てないと思いますが、とりあえず書いてみました。
駄目な点があれば遠慮なく小突いてください。
勉強になるので。
この回答への補足
現在自分の環境では速度的に問題はないのですが、遅い回線の場合
数千行のデータを転送するだけで時間がかかります。
正直なところ分割するかどうかは回線の速度で決めると思っています。
ただ、一般的にはどうするのかなぁ~と思いまして・・・
それからJavascriptの配列を吐き出すってJson形式ですか?
あれは速度的に満足できなくてだめでした!
phpでファイルを呼び出すとは?
それは例えばPHPでSQLのデータを受け取り、それを分割にしてファイルに書き込んで置き、それを順番にjavascript側で読み込むと言う意味ですか?
提示したサンプルは、hyo の変数を shiftしながらデータがなくなるまで削っていきます。
それと平行して hyoにデータを追加するだけで(分割して)可能なのです。なのでバッファとして使い、規定の量を超えないように読み込んでいくのが一般的なのか、その辺が「今のスタンダード」なのか知りたいです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入力フォームの値をQRコードで...
-
PDFを(htmlのように)無限に縦...
-
バッチファイル 特定ウインドウ...
-
GASでスプレッドシートの一番上...
-
要素内を常に一番下を表示させたい
-
1枚の画像をクリックすると複数...
-
bxsliderで最初に縦に複数表示...
-
正規表現で、特定の文字列を含...
-
ワードでA3横の画面にして、文...
-
Base64に変換したHTMLの<script...
-
Ajax サーバーに負荷かかります...
-
php の画面ボダンを押すと、サ...
-
bxsliderで複数のvimeoスライド...
-
bxSliderで動画をスライドごと...
-
C言語のflagの使い方が分かりま...
-
データ受け渡しについて
-
webページの特定の部分だけ消し...
-
同一ページ移動時ハンバーガー...
-
ナイトボットのAliasについて
-
これってなんの電話かわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ajaxでhtmlを返して画面に描画…...
-
【Ajax】改行を含めたデータを...
-
データ受け渡しについて
-
AjaxでDBと連携した動的リスト...
-
innerHTMLで表示完了後に、Ajax...
-
大量のデータを表として展開す...
-
カウントダウンを表示
-
Ajaxで最新の情報が取得できない
-
HTMLでリアルタイムグラフを作...
-
JavaScript側でのXML作成の方法
-
ローカルネットワーク内での502...
-
【JavaScript】confirmのボタン...
-
非同期式3進カウンタ
-
DirectXとOpenGLはどちらが動作...
-
ASP.NET(VB)VBソースからJavas...
-
ローカル用HTMLファイルの安全...
-
jsonテキストデータの並び替え...
-
[JavaScript] preven...
-
HTMLでDBからデータを表形式で...
-
saved from url=(0013)abou
おすすめ情報