アプリ版:「スタンプのみでお礼する」機能のリリースについて

JAVAに大量のデータを受け渡ししてテーブル表示(jquery dataTables)をJAVAで処理したい。
現在は単純にシステムでHTML上 var a=データで記載しているのですがこのa変数に入るデータが段々大きくなり
ページがかなり重くなってしまっています。
本来ならば以下のように別ファイルにパラメータ渡してあげてそのファイルからデータ生成すればいいのですが
現状別ファイルに分ける作業がめんどくさく、何か良い方法ないかと探している状態です。

私の中であと思いつく方法は、データを一度ファイルに保存させてAjaxで読み込みさせる。
なんか現実的じゃないような感じで・・

JAVA初心者でこれぐらいしか思いつかなく良い方法あれば教えて下さい。


var dataString = "検索ワード"
$.ajax
({
type: "POST",
url: "data.php",
data: dataString,

A 回答 (7件)

ANo6です



>JS自体あんまり触っていないのでまだいい方法あるかもと思っています。
実際の状況がわかりませんが、スクリプトの問題ではなくてデータ量の問題ではないのでしょうか?

どうしてもデータ量を変えたくないのであれば、PCの容量アップ、速度アップおよび通信環境の大幅改善が効果的かも知れませんね。
    • good
    • 0
この回答へのお礼

書き込み有難う御座い。
問題としてはHTML内にデータベースの変数を入れるのが問題です。
■現状
<script>
var dataSet = [
"10万のユーザーデータ"
];
</script>
■変更したいのは
<script>
var dataSet = ”data.php"

var dataSet = クッキー

var dataSet = なにかの変数
</script>

お礼日時:2017/01/24 12:53

こんにちは 横から失礼。



>ページがかなり重くなってしまっています。
というのが、どのような状態を意味しているのかよくわかりませんが、ありそうなのは
 1)データが多いので送受信に時間がかかる
 2)表示されたページ上でのハンドリングが重い
の片方か、両方ということだと想像します。
また、データ表示上で、データの性質から分割して表示することができる内容なのか、全部を一覧することが必須なのかによっても若干変わってくるとは思います。

>データ件数は約1~10万件あたりですので10万件のデータを
>すべてHTMLソース内に入れるとかなり重くなるのでJSにうまく
>渡す方法でご質問していました。
10万件のデータをWebページ上で見るのにどれだけの時間がかかるのでしょうか?
人間の能力を超えていると思いますが、それだけの量を渡す必要性がわかりません。

「そこから絞り込むのです」というのであれば、通常行われている方法は、絞り込んだ結果をサーバから返して表示するという方法ではないでしょうか?
それでもヒット数が多い場合は、ページ分割などして一度の表示量を押さえていますよね?
例えば、検索サイトなどの造り方をイメージしていただければ理解できると思います。
いきなり元のデータ全てを閲覧者に送りつけて、「その中から好きに探せば?」などとやったらパンクするのは必然どころか、即、悪質サイトに認定されることでしょう。

仮に、サーバで直接操作していたとしても、全データを単に垂れ流しで表示されても何の役にも立たないので、結局のところ、人が利用する範囲においては「抽出して表示させる」ということになりませんか。(機械で自動処理する場合は、全件処理もありますが)
同様のことを、クライアントサイドで実現できれば良いだけなので、データベースそのものを送りつける必然性がまったく理解できません。むしろ、トラフィックの増大やレスポンスの悪さといった弊害が大きいだけに感じられます。


私は使ったことがないので詳細は知りませんが、ご利用の「DataTables」にはそのような利用も想定してか、ajaxの機能が備えられているようですので、このようなハンドリングも比較的実現しやすいように作られていると思いますが・・・?
単に表示できれば良いようですので、ファイルなどを介さず、直接送受信すれば済むのではないかと想像します。

>私の中であと思いつく方法は、データを一度ファイルに保存させて
>Ajaxで読み込みさせる。
データ量が問題だとするなら、送り方を変えたところで、何も変わらないのではないでしょうか。
    • good
    • 0
この回答へのお礼

fujillin様
書き込み有難う御座い。
まぁDataTablesを使うとページャーやソート機能が備わってて開発パフォーマンス的にいいかなって思って使いました。
DataTablesは一度すべてのデータを読み込みしそれからテーブル構成をしますので最初にすべてのデータを渡さないといけなかったと思います。
また表示件数ですがもちろん絞込しますが現在でも1000~6000ぐらいのデータ表示ですが今後データ増える予定がありますので想定したうえです。

現状私の中での対応方法としては
・JSとPHPのクッキーを共有してデータのやり取り。
・JSからPHPに検索用キーワードを渡してPHPでデータ生成してJSに非同期通信で戻す。※ただ現状JSとPHPファイルが一体化になっているため検索用システムを外部ファイルにするのがだるいです。
ですのでこれ以外に簡単でよい方法あればご指導ください。JS自体あんまり触っていないのでまだいい方法あるかもと思っています。

お礼日時:2017/01/24 11:21

No.4です。



> すみません、おそらく自分がJSのことを省略してJAVAと書いたせいでお互い会話が嚙み合っていなかったと思います・・・

えっと。。。 JavaをJSと略す人はまずいません。30年ほどシステム開発の仕事をしていましたがコンピュータ言語の話をしていてJSと言ったらJavascriptです。それ以外はありません。
なので正しくは「お互い」ではなく「自分と」です。


> やりたいのはPHPのデータをJSに渡したいです。

この表現もよくありません。
書くなら「PHPのプログラムでデータベースのテーブルから抽出したデータをHTMLの表形式で表し、DataTablesを用いて描画したい」でしょう。


> データ件数は約1~10万件あたりですので10万件のデータをすべてHTMLソース内に入れるとかなり重くなるのでJSにうまく渡す方法でご質問していました。

そんな巨大な検索結果をHTMLのページ1ページで取り扱うこと自体が間違いです。
機能仕様として正しくないと考えます。設計誤りです。
やはりCSVファイルあたりでしょう。


> DataTables自体は指定のデータを渡すと綺麗に表示してくれるライブラリです。

存じております。(_ _)

では頑張って方法をお考え下さい。
お力に成れず申し訳ありませんでした。
    • good
    • 0

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は別物です。何やらその辺を混同されておられる雰囲気もありますので念のため。

参考まで。
    • good
    • 0
この回答へのお礼

すみません、おそらく自分がJSのことを省略してJAVAと書いたせいでお互い会話が嚙み合っていなかったと思います・・・
やりたいのはPHPのデータをJSに渡したいです。
データ件数は約1~10万件あたりですので10万件のデータをすべてHTMLソース内に入れるとかなり重くなるのでJSにうまく渡す方法でご質問していました。
DataTables自体は指定のデータを渡すと綺麗に表示してくれるライブラリです。

お礼日時:2017/01/23 15:26

No.です。



> 初心者で理解が不十分と思いますがzircon3さんが言う方法の認識では一度データベースのデータをHTMLに吐出ししてセッションに挿入して

 違います。(;_;)
 データベースから目的のデータを抽出したらそれをセッション・オブジェクトに格納するのです。HTMLに匿名変数で埋め込む代わりにセッション・オブジェクトに格納するのです。
 Webブラウザには処理結果の画面のHTMLとセッション識別のIDがCookie(これはHTTPヘッダー)で飛ぶだけです。


> 2回目以降動作が軽くなるというイメージがしましたので、データ自体は2回以上使わないので結果的に現状HTML上に吐出ししているのと状況変わらないイメージがしてます。

 サーバへの2回目のアクセスで使用しないなら、1回目の処理でWebブラウザに返すHTML中に検索結果の巨大データを埋め込んだり、ファイル書き出したりする必要があるのでしょう???
 しかもファイル出力はサーバー上です。
 誰が、何時、どのような方法でそのファイルの内容を参照し利用するのでしょう?
 また何時、どのタイミングでファイルを削除するのでしょう?
 消さないとどんどんサーバーの空きディスクが減って行きます。。。

 もしかしてWebサーバ(httpd)とWebブラウザは同一マシンにあることが前提のシステムですか???
 それとも検索結果が少なくても膨大であっても今は1枚の画面で返しているため検索結果が膨大だと画面(のHTML)生成に時間を要し、Webブラウザ側はサーバからの応答をかなり待つので、これを何とかしたいということですか???
 PHPがどうとか、ver変数がどうとかプログラムの内容は正直どうでもよくて、「操作仕様上何が起きていて、それをどうしたいのか」です。それが全く分かりません。
 それが分かった上での「今はこういう作り方をしていて」でしょう。違いますか?
 視点がプログラムの中ばかり向いていて機能仕様から見た問題現象を見ていない、、、かな。

参考まで。
    • good
    • 0
この回答へのお礼

zircon3様ほんと理解不足で申し訳ないです。
やりたいことは単純でPHPからのデータをdatatablesってライブラリに渡して表示させたいだけなのですが、、
データの渡し方でHTMLにPHPからのデータを吐出ししてdatatablesに渡したくない。
それでzircon3様がいう>>「データベースから目的のデータを抽出したらそれをセッション・オブジェクトに格納する」というと、JSとPHPで同じセッションデータ操作できたかなって調べたら以下の記事があったのですが、その記事のようにクッキー共有するという認識でしょうか。
http://webase.info/htmlcssjs/690.html

お礼日時:2017/01/23 13:37

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枚目以降の画面を生成するプログラムはセッションがあることを確認し、無ければ不正な呼び出しとしてエラー画面を返すなどの処理が必要です。
その辺は練習問題なのか実システムなのかでも違いますが、そういうところをよく考えられるスキルはプログラムを作るスキルとしてはとても重要です。

参考まで。
    • good
    • 0
この回答へのお礼

お返事有難う御座います。
何をしたいのかを具体的に書いてなくお手数かけてすみません、少しまとめますと。
ユーザーデータベース(10万件ほど)をPHPで必要なデータを読み込みしてデータグリッドにするライブラリhttps://datatables.net/などにデータを挿入し動的にデータの確認出来たらとおもっておりまして、現状ですと
var data = "~~~~"
var title = "title1,title2..."でHTML上に直接記載していてvar dataが膨大になるとページを開くのにもかなり重くなってきてvar dataを直接HTML上に記載するのではなくメモリかファイルから読み出ししてやればページの重さが解決されると思い方法を探している状態です。
初心者で理解が不十分と思いますがzircon3さんが言う方法の認識では一度データベースのデータをHTMLに吐出ししてセッションに挿入して2回目以降動作が軽くなるというイメージがしましたので、データ自体は2回以上使わないので結果的に現状HTML上に吐出ししているのと状況変わらないイメージがしてます。
認識違いでしたらすみませんがご説明して頂けたら助かります。

お礼日時:2017/01/23 12:33

Webアプリケーションですよね?


で、具体的にどういう画面遷移の際にどんな動きをさせたいのでしょう?
今はサーバ側での検索結果の大量データをHTMLの匿名変数にセットし、画面経由で次の処理に渡しているということでしょうか?
でしたら現在HTMLの匿名変数にセットしているデータをセッション・オブジェクトに格納し、次画面でそのセッション・オブジェクトから取り出せばよいだけのように思います。

参考まで。
    • good
    • 0
この回答へのお礼

書き込みありがとうございます。
説明不足で申し訳ありません。
zircon3様のご理解通りです。
現状PHPで大量データを生成しておりますがそのデータを一度クッキーに入れHTML(javascript)で取得するという理解でよろしいでしょうか。

お礼日時:2017/01/23 11:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!