2011-03-02 83 views
3

我的Javascript應用程序正在從服務器下載相當多的數據,我想除了服務器完成的正常gzip之外,我可以用一些二進制格式而不是文本JSON編碼數據。
有沒有這樣做的標準方式?
理想情況下,它應該是一個小工具,可以將JSON文本文件轉換爲通用二進制格式和解碼它的小型Javascript庫。JSON的二進制編碼?

另外,是否有什麼特殊的需要在XHR中完成傳遞二進制數據?

+0

如果服務器壓縮數據,將其轉換成二進制第一可能不會有太大的幫助。您會發現壓縮的二進制版本與壓縮的文本版本具有相似的大小。 – JeremyP 2011-03-02 10:40:27

回答

2

如果gzip壓縮不夠好,很可能你的二進制格式也不行,特別是如果你不能在合理的時間內通過javascript對它進行解碼。

請記住,使用gzip時的解壓縮本身是由瀏覽器完成的,並且比JavaScript中的任何操作都快。

如果您認爲JSON反序列化速度太慢,因爲您支持ie7這樣的舊瀏覽器,它本身並不解碼JSON,但依賴於eval作業,可以考慮從JSON轉換爲基於字符串的自定義編碼分裂,這反序列化要快得多。

爲靈感嘗試閱讀這篇文章:

http://code.flickr.com/blog/2009/03/18/building-fast-client-side-searches/

3

退房BSON

BSON,短二進制 JSON,是JSON樣 文件的二進制編碼 系列化。像JSON一樣,BSON支持 嵌入文檔和 數組以及其他文檔和 數組。 BSON還包含 擴展,允許 表示 不屬於JSON規範的數據類型。例如,對於 示例,BSON具有Date類型和BinData類型 。

找到一個很好的解釋這裏http://kaijaeger.com/articles/introducing-bison-binary-interchange-standard.html

+2

請注意:BSON沒有JS實現。 – 2011-03-02 10:02:37

+2

有一個我認爲,檢查這個例子:http://kaijaeger.com/downloads/bison/examples/view/bisonclient.html – powtac 2011-03-02 10:18:25

+0

你是對的:-)然而,正如文章中所述,該實施不起作用真的很好(消息大小非常大),我不知道它是否可能對真實應用程序有用。 – 2011-03-02 10:32:52

1

MongoDB使用類似的東西,他們面向文檔的存儲。您可以直接在BSON website上獲得更多詳細信息。
不幸的是,BSON確實使用而不是,因此我認爲這不是一個很好的回答你的問題。

你可以考慮使用Protocol Buffers;它有JS encoder/decoder,但它仍然是相當實驗性的。
您可以嘗試一下 - 很多時候,實驗性開源項目已經足夠用於特定場景。

還請注意,關於BSON的一些questioning比JSON更緊湊;對於像protbuf這樣的其他協議也是如此 - 我強烈建議你做一些數學計算,並檢查它是否有實際收益。