Web 开发的延迟加载和性能

Lazy loading & performance for web development

假设我想在博客上延迟加载评论,这样一开始只显示 10 条最新的评论,而下一批 10 条在滚动时延迟加载。

选项 A:在页面加载时从服务器发送整个结果数组,并在客户端一次处理 10 个渲染。

选项 B:在页面加载时加载 10 个,然后根据需要发送 ajax 请求另外 10 个。

假设对象的数量可以达到 40,000 - 在页面加载时向客户端发送如此大的 json 数组是否可以?

我认为权衡是:使用选项 A,您可以最大限度地减少访问数据库的次数,但您可能会向客户端发送过多的数据(40,000 条记录 json 数组 ≅ 7mb),这是不适合移动用户。使用选项 B,您可能需要多次访问数据库。

有这方面的最佳实践吗?也许在中间的某个地方妥协?也就是说,eager 加载 200 个对象到客户端,最初只渲染 10 个,然后再渲染 10 个,直到 200 个对象用完,然后根据需要从服务器延迟加载?想看看其他人是如何解决这个问题的。

有点B选项。 如果您使用 Node.js 或类似技术,您可以在服务器中创建一个专用的 api 端点,这非常简单。您只需要在即将到达页面末尾时调用一个 scrollfire 事件。您可以使用接下来 10 或 20 个左右元素的索引 ping 服务器以获得所需的数据。 这里的关键是估计您正在调用的数据的大小和类型。还有数据库的架构。如果您的数据库设计良好,即使扩展到数千个并行用户,您也不会遇到任何性能问题。

我会完全按照你的建议去做,但摊销会有所改善。

首先,您预加载 200 个项目并将它们以 10 个为一组呈现。当一半的加载推荐读取时,您预加载下一个 200。

根据您的任务,您可以走得更远,动态计算下一批评论的大小。如果用户速度较慢 reader,则将批量大小减小到 100。如果他们滚动速度很快,则批量增加到 1000。