
JAVAに大量のデータを受け渡ししてテーブル表示(jquery dataTables)をJAVAで処理したい。
現在は単純にシステムでHTML上 var a=データで記載しているのですがこのa変数に入るデータが段々大きくなり
ページがかなり重くなってしまっています。
本来ならば以下のように別ファイルにパラメータ渡してあげてそのファイルからデータ生成すればいいのですが
現状別ファイルに分ける作業がめんどくさく、何か良い方法ないかと探している状態です。
私の中であと思いつく方法は、データを一度ファイルに保存させてAjaxで読み込みさせる。
なんか現実的じゃないような感じで・・
JAVA初心者でこれぐらいしか思いつかなく良い方法あれば教えて下さい。
var dataString = "検索ワード"
$.ajax
({
type: "POST",
url: "data.php",
data: dataString,
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
ANo6です
>JS自体あんまり触っていないのでまだいい方法あるかもと思っています。
実際の状況がわかりませんが、スクリプトの問題ではなくてデータ量の問題ではないのでしょうか?
どうしてもデータ量を変えたくないのであれば、PCの容量アップ、速度アップおよび通信環境の大幅改善が効果的かも知れませんね。
書き込み有難う御座い。
問題としてはHTML内にデータベースの変数を入れるのが問題です。
■現状
<script>
var dataSet = [
"10万のユーザーデータ"
];
</script>
■変更したいのは
<script>
var dataSet = ”data.php"
か
var dataSet = クッキー
か
var dataSet = なにかの変数
</script>
No.6
- 回答日時:
こんにちは 横から失礼。
>ページがかなり重くなってしまっています。
というのが、どのような状態を意味しているのかよくわかりませんが、ありそうなのは
1)データが多いので送受信に時間がかかる
2)表示されたページ上でのハンドリングが重い
の片方か、両方ということだと想像します。
また、データ表示上で、データの性質から分割して表示することができる内容なのか、全部を一覧することが必須なのかによっても若干変わってくるとは思います。
>データ件数は約1~10万件あたりですので10万件のデータを
>すべてHTMLソース内に入れるとかなり重くなるのでJSにうまく
>渡す方法でご質問していました。
10万件のデータをWebページ上で見るのにどれだけの時間がかかるのでしょうか?
人間の能力を超えていると思いますが、それだけの量を渡す必要性がわかりません。
「そこから絞り込むのです」というのであれば、通常行われている方法は、絞り込んだ結果をサーバから返して表示するという方法ではないでしょうか?
それでもヒット数が多い場合は、ページ分割などして一度の表示量を押さえていますよね?
例えば、検索サイトなどの造り方をイメージしていただければ理解できると思います。
いきなり元のデータ全てを閲覧者に送りつけて、「その中から好きに探せば?」などとやったらパンクするのは必然どころか、即、悪質サイトに認定されることでしょう。
仮に、サーバで直接操作していたとしても、全データを単に垂れ流しで表示されても何の役にも立たないので、結局のところ、人が利用する範囲においては「抽出して表示させる」ということになりませんか。(機械で自動処理する場合は、全件処理もありますが)
同様のことを、クライアントサイドで実現できれば良いだけなので、データベースそのものを送りつける必然性がまったく理解できません。むしろ、トラフィックの増大やレスポンスの悪さといった弊害が大きいだけに感じられます。
私は使ったことがないので詳細は知りませんが、ご利用の「DataTables」にはそのような利用も想定してか、ajaxの機能が備えられているようですので、このようなハンドリングも比較的実現しやすいように作られていると思いますが・・・?
単に表示できれば良いようですので、ファイルなどを介さず、直接送受信すれば済むのではないかと想像します。
>私の中であと思いつく方法は、データを一度ファイルに保存させて
>Ajaxで読み込みさせる。
データ量が問題だとするなら、送り方を変えたところで、何も変わらないのではないでしょうか。
fujillin様
書き込み有難う御座い。
まぁDataTablesを使うとページャーやソート機能が備わってて開発パフォーマンス的にいいかなって思って使いました。
DataTablesは一度すべてのデータを読み込みしそれからテーブル構成をしますので最初にすべてのデータを渡さないといけなかったと思います。
また表示件数ですがもちろん絞込しますが現在でも1000~6000ぐらいのデータ表示ですが今後データ増える予定がありますので想定したうえです。
現状私の中での対応方法としては
・JSとPHPのクッキーを共有してデータのやり取り。
・JSからPHPに検索用キーワードを渡してPHPでデータ生成してJSに非同期通信で戻す。※ただ現状JSとPHPファイルが一体化になっているため検索用システムを外部ファイルにするのがだるいです。
ですのでこれ以外に簡単でよい方法あればご指導ください。JS自体あんまり触っていないのでまだいい方法あるかもと思っています。
No.5
- 回答日時:
No.4です。
> すみません、おそらく自分がJSのことを省略してJAVAと書いたせいでお互い会話が嚙み合っていなかったと思います・・・
えっと。。。 JavaをJSと略す人はまずいません。30年ほどシステム開発の仕事をしていましたがコンピュータ言語の話をしていてJSと言ったらJavascriptです。それ以外はありません。
なので正しくは「お互い」ではなく「自分と」です。
> やりたいのはPHPのデータをJSに渡したいです。
この表現もよくありません。
書くなら「PHPのプログラムでデータベースのテーブルから抽出したデータをHTMLの表形式で表し、DataTablesを用いて描画したい」でしょう。
> データ件数は約1~10万件あたりですので10万件のデータをすべてHTMLソース内に入れるとかなり重くなるのでJSにうまく渡す方法でご質問していました。
そんな巨大な検索結果をHTMLのページ1ページで取り扱うこと自体が間違いです。
機能仕様として正しくないと考えます。設計誤りです。
やはりCSVファイルあたりでしょう。
> DataTables自体は指定のデータを渡すと綺麗に表示してくれるライブラリです。
存じております。(_ _)
では頑張って方法をお考え下さい。
お力に成れず申し訳ありませんでした。
No.4
- 回答日時:
No.3です。
えっと今現在存在しているプログラムはJavaで書いたものではなくPHPなのですね?
で。依然として問題点が不明確ですが。。。
HTMLに書き出しているデータ件数は何件なのでしょう?
その件数が多過ぎてDataTables(でしたっけ?)で扱うにはしんどいのではないですか?
> ページがかなり重くなってしまっています。
というのはそういうことなのような気がします。
試しにヒット件数を減らして実行してみましたか?
で。DataTablesを使う理由は何でしょう?
検索結果の表を利用者が操作したいからですか?
それはDataTablesを使わないと出来ないものですか?
検索結果の件数が多くなることがしばしばでかつ、「セッション・オブジェクトにヒットした全データを格納し、そのうち何件目から何件目を表示中といった情報をHTMLの匿名変数やCookieで管理するのでは画面に表示中のデータしか操作できないのでNG(常にヒットした全件を操作対象にしたい)」ということであれば、DataTablesを使う事にしたこと自体が適切でなかった(=実現方式がよくない)ということのように思います。
いっそCSVファイルにしてダウンロードさせ、それをExcelなどの表計算ソフトで好きに加工してもらう方がWebブラウザを使ってゴソゴソ操作するより便利で動きも軽く使いやすいのではないでしょうか?
ちなみに。。。
> それでzircon3様がいう>>「データベースから目的のデータを抽出したらそれをセッション・オブジェクトに格納する」というと、JSとPHPで同じセッションデータ操作できたかなって調べたら以下の記事があったのですが、その記事のようにクッキー共有するという認識でしょうか。
全く違います。
これは上に書いたアプリケーション自身でページ管理を行う際にアプリケーションとしてCookieに記憶させて起きたい場合、それもWebブラウザ側でその辺の操作をしたい場合のことです。
Javaのセッション管理に使用するCookieはJavaが管理します。セッションを使用するアプリケーションはその管理IDがCookieを使ってWebブラウザとサーバの間を飛び交っていることを意識しません、、、というかそういったことを意識せずアプリケーション開発を行うことが出来るようにしていることがJavaの利点の一つです。
それと念のためですがJavaとJacascriptは別物です。何やらその辺を混同されておられる雰囲気もありますので念のため。
参考まで。
すみません、おそらく自分がJSのことを省略してJAVAと書いたせいでお互い会話が嚙み合っていなかったと思います・・・
やりたいのはPHPのデータをJSに渡したいです。
データ件数は約1~10万件あたりですので10万件のデータをすべてHTMLソース内に入れるとかなり重くなるのでJSにうまく渡す方法でご質問していました。
DataTables自体は指定のデータを渡すと綺麗に表示してくれるライブラリです。
No.3
- 回答日時:
No.です。
> 初心者で理解が不十分と思いますがzircon3さんが言う方法の認識では一度データベースのデータをHTMLに吐出ししてセッションに挿入して
違います。(;_;)
データベースから目的のデータを抽出したらそれをセッション・オブジェクトに格納するのです。HTMLに匿名変数で埋め込む代わりにセッション・オブジェクトに格納するのです。
Webブラウザには処理結果の画面のHTMLとセッション識別のIDがCookie(これはHTTPヘッダー)で飛ぶだけです。
> 2回目以降動作が軽くなるというイメージがしましたので、データ自体は2回以上使わないので結果的に現状HTML上に吐出ししているのと状況変わらないイメージがしてます。
サーバへの2回目のアクセスで使用しないなら、1回目の処理でWebブラウザに返すHTML中に検索結果の巨大データを埋め込んだり、ファイル書き出したりする必要があるのでしょう???
しかもファイル出力はサーバー上です。
誰が、何時、どのような方法でそのファイルの内容を参照し利用するのでしょう?
また何時、どのタイミングでファイルを削除するのでしょう?
消さないとどんどんサーバーの空きディスクが減って行きます。。。
もしかしてWebサーバ(httpd)とWebブラウザは同一マシンにあることが前提のシステムですか???
それとも検索結果が少なくても膨大であっても今は1枚の画面で返しているため検索結果が膨大だと画面(のHTML)生成に時間を要し、Webブラウザ側はサーバからの応答をかなり待つので、これを何とかしたいということですか???
PHPがどうとか、ver変数がどうとかプログラムの内容は正直どうでもよくて、「操作仕様上何が起きていて、それをどうしたいのか」です。それが全く分かりません。
それが分かった上での「今はこういう作り方をしていて」でしょう。違いますか?
視点がプログラムの中ばかり向いていて機能仕様から見た問題現象を見ていない、、、かな。
参考まで。
zircon3様ほんと理解不足で申し訳ないです。
やりたいことは単純でPHPからのデータをdatatablesってライブラリに渡して表示させたいだけなのですが、、
データの渡し方でHTMLにPHPからのデータを吐出ししてdatatablesに渡したくない。
それでzircon3様がいう>>「データベースから目的のデータを抽出したらそれをセッション・オブジェクトに格納する」というと、JSとPHPで同じセッションデータ操作できたかなって調べたら以下の記事があったのですが、その記事のようにクッキー共有するという認識でしょうか。
http://webase.info/htmlcssjs/690.html
No.2
- 回答日時:
No.1です。
> 現状PHPで大量データを生成しておりますがそのデータを一度クッキーに入れHTML(javascript)で取得するという理解でよろしいでしょうか。
全く違います。
そもそもJavascriptが実行されるのはWebブラウザ上でサーバ上ではありません。
HTTP Cookie、HTMLの匿名変数(hidden変数)、Javaのセッションはそれぞれ全く別の仕組みです。
Javaのセッションはその識別のためにCookieを使用しますが(セッションIDをCookieに載せてWebブラウザへ飛ばす)、セッション内で生成したセッション・オブジェクトの内容はサーバ上にのみあります。
HTMLの匿名変数はHTMLの変数のうち非表示のもの、具体的には「<INPUT type="hidden">」と書かれる変数です。
具体的な流れとしては以下です。
(1) WebブラウザからJavaで実装するWebアプリケーションが起動された際、セッションが無かった場合はセッションを生成する。
注)セッションの有効期間(タイムアウト値)を何分にするかはアプリケーションの機能による。
(2) アプロケーション処理を実行し、最終的にはWebブラウザに送出するNHTMLを生成するが、次回アクセスを受けた際に利用したいデータ(検索結果など)がある場合はセッション・オブジェクトにそれを格納する。
(3) 次画面から呼び出されたアプリケーションは動作上必要なデータをセッション・オブジェクトから取り出す。
ということで先頭の画面(ホームページ?)を生成するプログラムではセッションがあればそれを使うし無ければ生成するといった処理になりますが、2枚目以降の画面を生成するプログラムはセッションがあることを確認し、無ければ不正な呼び出しとしてエラー画面を返すなどの処理が必要です。
その辺は練習問題なのか実システムなのかでも違いますが、そういうところをよく考えられるスキルはプログラムを作るスキルとしてはとても重要です。
参考まで。
お返事有難う御座います。
何をしたいのかを具体的に書いてなくお手数かけてすみません、少しまとめますと。
ユーザーデータベース(10万件ほど)をPHPで必要なデータを読み込みしてデータグリッドにするライブラリhttps://datatables.net/などにデータを挿入し動的にデータの確認出来たらとおもっておりまして、現状ですと
var data = "~~~~"
var title = "title1,title2..."でHTML上に直接記載していてvar dataが膨大になるとページを開くのにもかなり重くなってきてvar dataを直接HTML上に記載するのではなくメモリかファイルから読み出ししてやればページの重さが解決されると思い方法を探している状態です。
初心者で理解が不十分と思いますがzircon3さんが言う方法の認識では一度データベースのデータをHTMLに吐出ししてセッションに挿入して2回目以降動作が軽くなるというイメージがしましたので、データ自体は2回以上使わないので結果的に現状HTML上に吐出ししているのと状況変わらないイメージがしてます。
認識違いでしたらすみませんがご説明して頂けたら助かります。
No.1
- 回答日時:
Webアプリケーションですよね?
で、具体的にどういう画面遷移の際にどんな動きをさせたいのでしょう?
今はサーバ側での検索結果の大量データをHTMLの匿名変数にセットし、画面経由で次の処理に渡しているということでしょうか?
でしたら現在HTMLの匿名変数にセットしているデータをセッション・オブジェクトに格納し、次画面でそのセッション・オブジェクトから取り出せばよいだけのように思います。
参考まで。
書き込みありがとうございます。
説明不足で申し訳ありません。
zircon3様のご理解通りです。
現状PHPで大量データを生成しておりますがそのデータを一度クッキーに入れHTML(javascript)で取得するという理解でよろしいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
- その他(開発・運用・管理) MacのPCでわファイルを検索したくて、右上の虫眼鏡で検索をかけますが、EPSデータが何故か検索デー 2 2022/10/25 10:29
- 電子書籍 ファイルピックについて 1 2022/08/07 00:07
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Ajax】改行を含めたデータを...
-
jsonテキストデータの並び替え...
-
PHPで、IE の「警告 : ページの...
-
DirectXとOpenGLはどちらが動作...
-
ローカルファイル(mp3)の再生
-
ブラウザを閉じた瞬間にログアウト
-
PHPで一定時間が経過すると処理...
-
【JavaScript】confirmのボタン...
-
http://www.stickerlabo.com/ed...
-
OVERLAPPED構造体が分かりませ...
-
php ob_flushが全く動作しない
-
HTMLでDBからデータを表形式で...
-
sleepの負荷
-
8ビットダウンカウンタをVerilo...
-
テーブルで作った表をボタン操...
-
ブラウザ閉じたらサーバー処理...
-
webシステムでchrome
-
エクセルマクロ ガントチャート作成方法について
-
C#でUDP通信
-
subversionでコミットしたらftp...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを表として展開す...
-
HTMLでリアルタイムグラフを作...
-
innerHTMLで表示完了後に、Ajax...
-
ajaxでhtmlを返して画面に描画…...
-
【Ajax】改行を含めたデータを...
-
Ajaxで最新の情報が取得できない
-
ローカルネットワーク内での502...
-
データ受け渡しについて
-
jQueryの$.postの戻り値による...
-
JavaScript側でのXML作成の方法
-
カーソルの動きに合わせてDBか...
-
JavaScriptだけで画像アップロ...
-
Response.Write(変数)
-
AjaxでDBと連携した動的リスト...
-
Ajaxでpostした内容のresponse...
-
【JavaScript】confirmのボタン...
-
DirectXとOpenGLはどちらが動作...
-
リンクを押すとEXEファイルを実...
-
jsonテキストデータの並び替え...
-
ASP.NET(VB)VBソースからJavas...
おすすめ情報