我正在尝试渲染具有超过1000 records
的余烬模型数据。完成渲染部分将需要2分钟以上的时间。
因此,我有一个计划来对其进行优化。我想第一次加载第一个100 records
。一旦它们结束,我就需要加载第二个100 records
。
我该怎么做?
答案 0 :(得分:4)
概念是分页,取决于您的后端如何处理分页。但是在一般情况下,类似:
let result = this.store.query('post', {
limit: 10,
offset: 0
});
一旦由后端处理,将导致对关系数据库的查询,例如:
SELECT * FROM post LIMIT 10 OFFSET 0;
因此,您需要跟踪显示的当前页面。每次您要获取新页面时,只需将偏移量增加page * limit
,其中page是当前页面索引。因此,page = 1
时的下一个查询将是:
let result = this.store.query('post', {
limit: 10,
offset: 10 // 1 * 10
});
对于您的后端来说,返回总结果计数可能是个好主意,您可以通过JSON
响应中的某种元数据键来访问(或者您希望这样做,因为这取决于您的后端说集合的方式)。这样,您就知道何时停止尝试获取下一页。
您将需要选择是否要进行简单的分页,它提供了一个next
和previous
按钮,用户可以单击它们来检索下一页/上一页。可能是使用查询参数管理页面的最佳UX,以便浏览器中的前进/后退按钮可以移动页面,刷新不会丢失页面。当没有任何一个方向可提取的页面时,您还应该禁用/启用上一个和下一个按钮。
另一种选择是使用无限滚动(例如Facebook新闻提要)。您必须注意滚动位置,才能知道何时获取下一个视图(这需要围绕当前项目的大小进行数学运算)。另外,您可以评估查看端口中是否包含项目n-2或类似内容,然后预取下一页。