簡體   English   中英

Node.js從服務器渲染大量JSON數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM