gpt4 book ai didi

json - Node.js 从服务器渲染大量 JSON 数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:54 24 4
gpt4 key购买 nike

我有一个 View ,它有一个 for 循环,可将行插入到表中。该表非常大,已经包含数千行。

当我运行它时,服务器抛出内存不足异常。

我想添加无限滚动功能,这样我就不必一次加载所有数据。

现在,数据正在使用常规 res.render(index.ejs, data) 发送(data 是 JSON)

我可以找出无限滚动部分,但如何从服务器获取 block 中的 JSON 数据?

我使用带有express和ejs的node.js作为模板引擎。我愿意使用任何能够帮助我完成这个过程的框架(特别是查看 Angualr.js)。

谢谢

最佳答案

首先,无限滚动有一个 Angular 分量: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 存储来非常快速地回答这种查询,而且没有副作用。

这就是总体思路。我希望它有帮助。

关于json - Node.js 从服务器渲染大量 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19792399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com