2013-11-25 66 views
0

我正在一個Web門戶上工作,在我的場景中有大尺寸JSON字符串(1MB)由服務器發送。我們正在使用WebSocket協議。顯然,它花費很長時間來加載客戶端的瀏覽器。JSON - 優化

我已經嘗試在服務器端壓縮JSON並嘗試使用Javaacript解壓縮。壓縮是好的,但我解壓縮時使用JS時出現一些錯誤。我用這個庫http://jsxgraph.uni-bayreuth.de/wp/2009/09/29/jsxcompressor-zlib-compressed-javascript-code/

任何人都可以請建議,如果有另一種方式?

P.S.因爲我使用WebSocket,所以我不能依靠瀏覽器的解壓縮。

+0

你總是看到錯誤解壓縮時?或者它是間歇性的?如果您使用gzip在服務器上壓縮,zlib在客戶端(瀏覽器/ JavaScript)上解壓縮,那將會是一個問題。雖然2是相似的,但它們不是比特流兼容的。 –

+0

我總是得到錯誤。即使我懷疑Gzip和Zlib的組合會起作用。你有任何其他想法/解決方案嗎?感謝您的回覆! – Elf

+0

你如何壓縮服務器端的數據?動態通過PHP?其他一些語言?你打電話進行壓縮的功能是什麼? –

回答

1

感謝您的澄清。我想我現在看到了這個問題。總的來說,請記住zlib!= gzip,不完全是。通常,gzip是zlib數據,但帶有一些額外的標頭。 JSXCompressor需要zlib數據,但是您要從Java發送gzip數據。爲了進一步解釋:

在您鏈接到介紹JSXCompressor,示例服務器端代碼使用PHP的gzcompress功能的頁面。從文檔:「此函數使用數據格式壓縮給定的字符串。」ZLIB數據格式。「 (強調它們)。如果gzip是真正需要的(在這種情況下,它不是),文檔進一步建議使用gzencode

下面是Java的GZIPOutputStream類的文檔。請注意,該類以gzip格式輸出數據。看起來解決方案是在類層次結構中爬高一級,並利用DeflaterOutputStream類。

+0

謝謝邁克!我改變了服務器端壓縮使用DeflaterOutputStream,但仍然在解壓縮時出現錯誤。我檢查了js,它在壓縮的內容上使用了諸如.length,charAt()等一些函數,這就是爲什麼它會拋出錯誤。 js文件是min.js,我主要在服務器端工作,所以我不知道js文件中的錯誤。 – Elf