2011-06-20 2 views
1

javascriptアプリケーションで使用する必要がある1024x1024のダブルマトリックス(つまり8mbの配列)があります。8メガバイトのダブル配列をJavaScriptに転送

シルベスターを使用すると、私のマトリックスを操作するのに非常に役立つことがわかりました。私の問題は、単にこの配列をWebページにロードする効率的な方法を見つけることです。

バイナリデータをjavascriptに読み込むのは非常に面倒です。私は転送の手段としてイメージを使用すると思っていましたが、あまりにも面倒です。

記録のために、それはnumpyのndarrayですので、私はかなり簡単にPythonからフォーマットで遊ぶことができます。

ありがとうございました。

編集:今私は、文字列としての私の生の配列をダンプし、Binary Parser by JSFromHellとそれを解析するが、それは本当にです、かなり、遅い...

+0

なぜすべてのデータをクライアントに送信していますか?あなたはサーバー上で処理を行い、結果をAjaxリクエストで渡すことはできませんか? – epascarello

+0

現在の技術的な構成のために、私は静的なWebサーバー以上のものにアクセスすることはできません。 – Manux

+0

生の配列からdouble型のJSON配列の行列を作成して、それをeval()することもできますか?私は、少なくともあなたの文字列データには何も書式が含まれていないようにダブルバイトの境界にデータを整列させることを試みます。 –

答えて

2

最良の方法は次のようになります。あなたはFloat64Arrayに直接データをロードすることができ、それは本当に速くなります。欠点:スペックは最近までファイナライズされていません(Firefox 4/5ではFirefox 6が別の方法を使用していますが、これまでのところFirefoxとChromeだけで実装されています6)。だから、パフォーマンスが本当に重要なあなたが可能なこのアプローチを使用する(XMLHttpRequestresponseTypeまたはmozResponseArrayBuffer性質を持っている)と、そうでない場合は、バック遅いコードに落ちる可能性がある場合。ほとんどの人がすぐにブラウザーを更新し、高速なルートをとることが期待されます。シンプルなJSON、すなわちJS配列として

+0

これは今のところ最高の解決策になると思います。ありがとう! – Manux

2

方法mod_gzipのまたは同等を使用して圧縮されたJSONについてい。ブラウザで解凍します。バイナリ対応のXMLHttpRequestは、https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arraysを参照してください

+0

私は、ウェブページを読み込むために、私の問題が効率的に文字列から配列に渡っていることを意味しています。 – Manux

+0

おそらく動作するかもしれませんが、私が作成したクイックテストからは、私が使用している文字列圧縮に応じて、元の領域の110%から150%になります...いくつかのMbでは、ダウンロード時間はおそらく変換する文字列を浮動小数点に変換します。私はそれを試してみると更新されます。 – Manux

+0

json配列をgzipで圧縮すると、サイズが85%縮小されます。私は混乱しなければなりません、申し訳ありません。 –

1

プリント:あなたが<script>タグ内にこれを印刷している場合は

[[1,2,3], 
[4,5,6], 
[7,8,9]] 

あなただけの変数にそれを渡すことができます:

var matrix = [...]; 

それがロードされていた場合AJAX経由eval()を通してそれを渡す:

var matrix = eval('(' + xhr.responseText + ')'); 

私は何も考えていませんブラウザのJSパーサよりも速く配列に文字列を変換します。

+0

私は同意する、あなたがパフォーマンスをいくつかのサイズを犠牲にしたい場合のように見えます。 jsonに固執してdoubleを解析させるのが最善の方法かもしれません。うまくいけば、gzip圧縮はいくぶんサイズを小さくすることができます。 –

関連する問題