2012-08-24 34 views
3

我一直在研究需要大量點數據繪製到屏幕上的WebGL應用程序。目前,該點和曲面數據存儲在我正在使用的網絡服務器上,並且在頁面加載時瀏覽器正在下載所有120MB的JSON。這在我的網絡上花費了很長時間,這不是最佳的。我想知道是否有人有關於加載數據的經驗/技巧。我試過儘可能地消除空白,但是這隻能減小文件大小。如何處理大型JSON文件的加載

是否有任何方法可以非常壓縮這個文件,或者更好的方式來下載這麼大量的數據?任何幫助將是偉大的!

回答

1

JSON非常冗餘,所以它壓縮得很好,然後在客戶端解壓縮。

JavaScript implementation of Gzip

另外,您可以將大塊數據分成1個MB塊的形式在一個在一個時間發送。 此外,用戶可能無法同時與120 MB的數據進行交互,因此可能實現某種細節級別的系統?

1

有幾件事情,你可能會考慮:

  1. 是您的服務器發送前壓縮文件?

  2. 此數據經常變化嗎?如果沒有,你可以設置你的expires頭很長一段時間,所以瀏覽器可以保持在緩存中。這對第一頁訪問沒有幫助,但在後續的文件訪問中,文件不必再次加載。

  3. 在你的json文件中有很多重複的東西嗎?例如,如果您的對象鍵很長,您可以用較短的替換它們,發送並在瀏覽器中重新替換。如果文件被壓縮(見第1項),好處不會很大,但根據您的文件可能會有所幫助。

  4. 瀏覽器是否立即使用這些數據?如果不是的話,你可以嘗試把它分解成更小的部分,並開始處理第一部分而其他部分加載。

但最重要的是:你確定JSON是這個工作的正確工具嗎?通用壓縮工具只能走得這麼遠,但如果您探索數據的特定特徵,您可能會獲得更好的結果。如果您提供有關您使用的格式的更多詳細信息,我們可能會爲您提供更多幫助。

1

如果您控制發送數據的Web服務器,您可以嘗試啓用JSON數據的壓縮。

這是通過添加下面的applicationhost.config完成(IIS 7):

<system.webServer> 
    <urlCompression doDynamicCompression="true" /> 
    <httpCompression> 
     <dynamicTypes> 
     <add mimeType="application/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" />   
     </dynamicTypes> 
    </httpCompression> 
</system.webServer> 

你會那麼需要重新啓動應用程序池爲您的應用程序。

Source

0

我有一個問題有點像一個你有,所以我決定用二進制數,而不是字符串,所以當用戶創建的請求到我的服務器我用數字回答。

對於前者'可以說用戶是餐廳的桌子,所以不要發送像'漢堡,橙汁,水等'字符串......我可以發送數字15並翻譯成二進制8,4 ,2,1。

當用戶詢問多個事物時,讓我們說4個漢堡包將很難遵循,所以你可以添加兩個數字的二進制數組。 我發現它非常有用,也更安全。

如果你決定這樣做,我建議在開發模式使用字符串,當你把翻譯成二進制文件。