現在JavaScriptからXMLHttpRequesを利用してCSVデータの読み込みを行っています。
ただ、この処理をOnLoad時に行っているため、ブラウザを立ち上げるとパソコンによっては10秒程度フリーズしてしまいます。
しかし、できればOnLoad時に読み込みたいので、なんらかの方法で実行速度を解決できないでしょうか?
各種条件や環境
・パソコンのスペック
CPU Core2duo E8400 メモリ 2GB グラフィックス オンボード
・読み込むデータ
縦2000x横6のCSVデータ。
1つ1つのデータは日本語が保存されていて10文字~30文字程度
保存形式はUTF-8
・使用ブラウザ
InternetExplorer8(他のブラウザに変えることはできません)
・データを読み込んだ時のInternetExplorer8の状況(タスクマネージャーより)
(読み込み前メモリ使用量) 7,400K→(読み込み後メモリ使用量) 40,000K
(読み込み前CPU使用率) 0% →(読み込み中CPU使用率) 50% → (読み込み後CPU使用率)0%
・書いたコード
var data = [];
function CsvRead(){
//ファイルパスの取得
var FP = './testData.csv';
//空文字は許さない
if(FP == ""){
alert("ファイルパスを入力してください");
return;
}
//XMLHttpRequestオブジェクト参照変数
var Xhr;
if(window.ActiveXObject){
//IEの場合
try{
Xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
Xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else{
//IE以外のブラウザの場合
Xhr = new XMLHttpRequest();
}
//外部ファイルを同期で読み込む
try{
Xhr.open("GET", FP, false);
Xhr.send(null);
}
catch(e){
//ファイルの読込に失敗
alert(e.message);
return;
}
//テキスト要素の生成
XhrText = document.createElement('text');
//行ごとのデータを取得する(CRで分割)
var rowData =zxsa Xhr.responseText.split(String.fromCharCode(13));
//要素の取り出し
for(i=0;i<data.columnLength;i++){
XhrText.innerHTML = XhrText.innerHTML + "<HR>";
//列データに分解
var ColumnData = rowData[i].split(",");
var locInf = {"address":ColumnData[5],"name":ColumnData[4],"prop1":ColumnData[1],
"prop2":ColumnData[2],"prop3":ColumnData[3],"url":ColumnData[5],
"latlng":"","lat":"","lng":"","distance":"","direction":""};
data.push(locInf);
}
}
以上になります。ご回答お願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ブラウザを別のもっと新しいものに変えれば、JavaScriptのエンジンも改良が加えられているので、根本的に高速化できると思うのですが、IE8のみということになると、難しいかもしれません。
ソースの書き方などを改良すれば多少は速くできるかもしれませんが、小手先の最適化で速くできるのには限界がありますし、劇的な改善は難しいかと思います。
>データは直ぐに使うので出来ればさっさと読み込んでもおきたいです。
とのことですが、どのみち読み込みが完了してCSVを切り分ける処理が終わるまで何もできないなら、
せめてフリーズしたようにならないように非同期にして、処理中である旨を知らせるメッセージか何かを表示させておくのはどうでしょうか?
No.1
- 回答日時:
処理が重いというよりも、CSVファイルをダウンロードしたりするのに時間がかかっているのではないでしょうか。
システム全体の構成がわからないので、何とも言えませんが、
Xhr.open("GET", FP, false);
の部分を、
Xhr.open("GET", FP, true);
にして、Ajaxの通信を非同期にしてみてはどうですか?
とりあえず、ページを開いた時に固まったようになるということはなくなると思いますが、
CSVを処理するのは、バックグラウンドでの読み込みが終わるのを待ってからでないとだめですが。
そういう構成ではまずいですか?
この回答への補足
csvデータですが、ファイルサーバに置いています。
よって、ダウンロードによる遅延あると思います。
しかし、ファイルサイズが170KBなのであまり大きくないと思われます。
データですが、非同期で読み込んでもよいのですが、
データは直ぐに使うので出来ればさっさと読み込んでもおきたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- JavaScript gasについて 1 2022/05/31 21:51
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
エラー:ストリームの終わりを...
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
機器とRS232Cクロスケーブルで...
-
C++ Builderにおける画像データ...
-
c言語についての質問です
-
入力ファイルをバイナリにする利点
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
Microsoft VBAで2GBを超えるフ...
-
エクセルVBA 2千万行のCSVファ...
-
PHPのfgetcsvの処理容量について
-
= (イコール)で始まるセルの値...
-
EOF
-
バイナリエディタのつかいかた
-
C言語で、ファイルを読み込んで...
-
ダンプツール作成… 行き詰まり...
-
VBでCSVファイルを読み込む方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
バイナリエディタのつかいかた
-
ページ読み込み時に自動的にsub...
-
VBA バイナリ―から文字列にす...
-
エクセルVBA 2千万行のCSVファ...
-
エラー:ストリームの終わりを...
-
EOF
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
入力ファイルをバイナリにする利点
-
DXFファイル用クラスライブラリ...
-
バイナリーデータの一部データ...
-
C言語とシリアル通信の送受信...
-
C言語の質問です。バイナリ形...
-
Javaでのエンディアン変換
-
24ビットのWaveデータの中身に...
-
bitmap画像の保存がうまくいき...
-
PHPのfgetcsvの処理容量について
おすすめ情報