[英]Node.js Rendering big amount of JSON data from the server
我有一個視圖,該視圖具有for循環,可將行插入到表中。 該表非常大,已經包含數千行。
當我運行它時,服務器拋出內存不足異常。
我想添加一個無限滾動功能,這樣就不必一次加載所有數據。
現在,數據正在使用常規res.render(index.ejs, data)
( data
是JSON)
我可以找出無限滾動部分,但是如何從服務器中分塊獲取JSON數據呢?
我正在使用具有express和ejs作為模板引擎的node.js。 我願意使用任何可以幫助我完成整個過程的框架(特別是查看Angualr.js)。
謝謝
首先,有一個無限滾動的角度分量: http : //ngmodules.org/modules/ngInfiniteScroll
然后,您必須將后端查詢更改為如下所示:
http://my.domain.com/items?before=1392382383&count=50
這實質上是告訴你的服務器以獲取創建/項目發布/變更/ 任何給定的時間戳之前,並返回只有50人。 這意味着您的后端實體(可能是博客條目,產品等)在連續空間 (發布日期時間戳幾乎是連續的)中需要缺少自然排序。 這是非常重要的,因為即使使用時間戳,您也可能會遇到極端的heisenbug,這些錯誤會導致項目渲染兩次(如果使用<=確定),松散的條目(如果使用<和2個條目在邊緣)您的結果集位於相同的時間戳上),甚至一次又一次地加載相同的項目(在同一時間戳上超過50個項目)。 您必須通過過濾重復項來處理此類情況。
您的服務器端代碼將其轉換為查詢(例如DB2 SQL):
SELECT * FROM ITEMS
WHERE PUBLICATION_DATE <= 1392382383
ORDER BY PUBLICATION_DATE DESC
FETCH FIRST 50 ROWS ONLY
當無限滾動到達頁面末尾並調用您的注冊回調時,您將考慮已加載項目的最后一項來創建此$http.get
請求。 對於第一個查詢,您可以使用當前時間戳。
另一種方法是簡單地發送最后一項的ID,例如:
http://my.domain.com/items?after_item=1232&count=50
並讓服務器決定要做什么。 我想您可以使用像Redis這樣的NoSQL存儲來非常快速地回答這種查詢,並且沒有副作用。
那是一般的想法。 希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.