将一个8 MB的双数组传输到javascript

时间:2011-06-20 17:53:56

标签: javascript serialization data-transfer

我有一个1024x1024双矩阵(即8mb阵列),我需要在javascript应用程序中使用。

我发现使用sylvester对于操作矩阵非常有用。我现在的问题只是找到一种将这个数组加载到网页中的有效方法。

将二进制数据加载到javascript中似乎相当繁琐。我认为使用图像作为转移的意思,但它似乎也很乏味......

为了记录,它是一个numpy ndarray,所以我可以很容易地从Python中使用这种格式。

感谢。

编辑:现在我将我的原始数组作为字符串转储并使用Binary Parser by JSFromHell进行解析,但它真的,非常,慢......

3 个答案:

答案 0 :(得分:2)

如何使用mod_gzip或等效的压缩json。让浏览器解压缩它。

答案 1 :(得分:2)

最好的方法是支持二进制的XMLHttpRequest,请参阅https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays。您可以将数据直接加载到Float64Array中,而且速度非常快。缺点:规范直到最近才最终确定(正如你所看到的,Firefox 4/5实现了一种方法,而Firefox 6将使用另一种方法)并且它目前仅由Firefox和Chrome实现(Chrome与Firefox的工作方式相同) 6)。因此,如果性能非常重要,您可以尽可能使用此方法(XMLHttpRequest具有responseTypemozResponseArrayBuffer属性),否则将回退到慢速代码。希望是大多数人很快就会更新他们的浏览器并采取快速路线。

答案 2 :(得分:1)

将其打印为简单的JSON,即JS数组:

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

如果您在<script>标记内打印,可以将其传递给变量:

var matrix = [...];

如果通过AJAX加载,则通过eval()

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

我认为没有什么能比浏览器的JS解析器更快地将字符串转换为数组。