0

約を保存するための最良の方法は何ですか。jsファイルに直接100シーケンスのdouble?各シーケンスの長さは約1です。10000倍以上。

要件

  • javascriptファイルはできるだけ速く実行する必要があります

  • オンデマンドでシーケンスを繰り返すだけで十分です(jsの実行時にすべての数値をデコードする必要はありません。イベントでデコードされます)。

  • それは多くのスペースを取るべきではありません

最も簡単なオプションはおそらくCSV形式の文字列を使用することですが、その場合、doubleは最も効率的な方法で保存されません。

もう1つのオプションは、数値をBase64バイト配列に格納することですが、base64文字列をdoubleに読み取る方法がわかりません。

編集:

ダブルスを使用して、Adobe3Dアノテーションの3DノードのMatrix4x4を変換したいと思います。Adobeでは外部ファイルのインポートが許可されていますが、非常に複雑であるため、jsファイルにすべてのデータを直接含める方が簡単な場合があります。

4

1 に答える 1

2

コメントで述べたように、値をエンコードしてみる価値はないでしょう。これは、doubleを格納するために必要なデータ量に関する私の頭からのいくつかの値です(コメントから更新)。

1,000,000の値を想定:

  • 直接エンコーディングの使用(JSファイルではうまく機能しません):8 B = 8 MB
  • base64を使用:10.7 B = 10.7 MB
  • リテラル(ベストケース):1B+区切り文字=2MB
  • リテラル(最悪の場合):21B+区切り文字=22MB
  • リテラル(均等に分散された値を想定した平均的なケース):19B+区切り文字=20MB

注:次のような最悪の場合、doubleは21バイト(15桁の精度を想定)かかる可能性があります:1.23456789101112e-131

ご覧のとおり、エンコードでプレーンリテラル値を使用する場合の1/2未満にカットすることはできません。また、ランダムアクセスデコードを実行する場合は、複雑になります。リテラルに固執するのが最善かもしれません。あなたが言及した外部ファイルを使用することからいくらかの利益を得るかもしれませんが、それはそうするためにどれだけの努力が必要かによって異なります。

リテラルを使用して最適化する方法に関するいくつかのアイデア:

  • 必要な精度に応じて、値を概算し、値をたとえば5桁の精度に制限することができます。これにより、ファイルが非常に短くなります。
  • ファイルを圧縮することができます。14文字を使用して任意の数のdoubleを指定できると思います(0123456789.e-,)。したがって、理論的には、このような文字列を半分のサイズに圧縮できます。しかし、現代の圧縮ルーチンがどれほど実用的であるかはわかりません。
于 2012-04-07T19:40:12.450 に答える