我有一個API,返回我的整個數據庫的對象的列表與聯接。 (是的,一切都需要,這是一個很酷的報告:))AJAX崩潰瀏覽器(200MB響應)
當我沒有表中的1,數據是150MB,並且一切正常。 我現在有一個問題,我添加了一個大表(50MB),並且它使瀏覽器崩潰。
有沒有辦法在不崩潰瀏覽器的情況下獲得200MB響應?
我有一個API,返回我的整個數據庫的對象的列表與聯接。 (是的,一切都需要,這是一個很酷的報告:))AJAX崩潰瀏覽器(200MB響應)
當我沒有表中的1,數據是150MB,並且一切正常。 我現在有一個問題,我添加了一個大表(50MB),並且它使瀏覽器崩潰。
有沒有辦法在不崩潰瀏覽器的情況下獲得200MB響應?
假設你確實需要瀏覽器中的所有數據,並且您願意接受使用大型數據集的性能影響......
這裏的問題可能不在數據本身的原始大小,但是你有它的格式。
如果你d ump將200MB放入JSON中,並期望您的瀏覽器解析並在所有數據的內存中創建單個對象,那麼您的時間將會很糟糕。 XML也是如此。另外,我懷疑在下載200MB的時候,當您加載數據時,您希望向用戶顯示一些進度...甚至可能會在加載數據時顯示一些數據。所有這些解決方案都是爲了分塊數據。我猜你的數據主要是基於數組的。按塊加載該陣列塊的元素。從一開始就記錄10k條記錄,看看你能得到什麼。
您仍然可以使用AJAX獲取數據,因爲您已經解決了解析響應的問題。但是,您也可以考慮使用Web套接字來減少一些請求開銷。 (或者在可能的情況下使用HTTP/2)。
我還應該指出,有流解析器可用於JSON和XML。這要求您能夠獲得該數據流(Web套接字使這變得容易),並取決於您的數據格式,無論它對您有用。
如果在對數據進行分塊後仍然存在崩潰,那麼現在是時候讓開發人員工具變得舒適一些,並分析內存使用情況。您可以在網頁中加載的內容有所限制,因瀏覽器和瀏覽器(以及系統,特別是在移動設備上)而異。
我不知道這是否有幫助,但你可以拆分數據塊,並在當前完成後多次調用一次(可能傳遞一個索引塊大小順序)。這種方式可以預防未來的驚喜,如果你必須得到所有200點MB的數據
的通常我會先拿到最重要的數據比僅在需要的時候,另一部分(通常是用戶的動作)
通過零件發送? – xAqweRx
'是的,一切都需要,這是一個很酷的報告。如果這是你對它的態度,那麼不,沒有辦法做到這一點。努力尋找效率,它們存在。 – Adam
從純粹的可用性角度來看,顯示200MB價值的數據而沒有某種分頁方式是非常可怕的。我會建議拉一個子集,並在需要時逐步完成。所有這些數據都需要被解析,然後存儲在RAM中,佔用超過200MB的RAM,所以不會阻止它崩潰。 –