2016-03-02 77 views
0

我從我的服務器檢索json文件時遇到很大問題。這個json文件有1.2 MB的數據。所以這是一個非常大的文件。所以,在我的初始化函數我這樣做:Angularjs管理大量數據

$scope.init = function(allmatrix) { 
    if (allmatrix.length > 0) { 
     $scope.jsonResult = allmatrix[0]; 
    } 
} 

這意味着,每一次我去主頁我要下載的數據1.2MB(JSON數據是內部「allmatrix」變量)。所以我不知道如何處理,因爲現在效率不高。也許,我需要緩存數據或在angularjs中使用一個線程(因爲我的用戶界面停留兩分鐘)。如果有人已經遇到了這個問題,你能幫助我嗎?

回答

0

有幾件事你可以做,但那是很多數據。你確定每次載入主頁時都需要它嗎?

1)您可以啓用Web服務器上的壓縮。這將減少數據通過網絡傳輸的時間。根據您正在運行的Web服務器的類型,啓用壓縮功能有所不同。這裏是一個如何使用tomcat實現的例子:http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/

2)縮短您傳輸的json對象中的鍵。 Json可以非常具有迴避性,所以儘量讓它儘可能小。您犧牲可讀性,但您可以顯着縮小數據的大小。例如 原:

[{'longkey1':'val1','longkey2':'val12},{'longkey1':'val3','longkey2':'val14},...] 

變化是這樣的:

[{'a':'val1','b':'val12},{'a':'val3','b':'val14},...] 

3)你說,直到JSON數據加載你的主頁被封鎖?您應該異步獲取數據,以便您的頁面可以加載並顯示有意義的「加載數據,請稍候」消息。這會更優美。你並沒有真正提供代碼來說明你如何從服務器獲取json,所以很難對此做出更多評論。

4)因爲每次打開主頁都需要加載數據,所以將網站轉換爲單頁面應用程序可能很有意義。這樣在第一次加載時,您可以加載所有數據,然後您可以在任何地方導航,即使您導航回主頁,也不需要再次加載該json。只是不要刷新!

5)如果您正在加載的json數據不會頻繁更改,緩存也可以正常運行(也許與上述結合)。

希望這會有所幫助。

+0

我認爲我正在尋找第三和第四種方式的組合。爲了解釋我如何在我的servlet中獲取數據,我這樣做: –

+0

我認爲我正在尋找第三種和第四種方式的組合。爲了解釋我如何在我的servlet中獲取數據,我這樣做:'req.setAttribute(「allMatrix」,matrix.readAll());'當我使用matrix.readAll()獲取所有數據。然後在angularjs中,我在主頁中執行:'ng-init =「init($ {allMatrix})」''。所以我認爲,如果我可以異步獲取數據,那將會很棒。 –