使用DB,客户端和后端实现延迟加载列表

时间:2016-11-21 12:30:53

标签: rest lazy-loading backend

我有一个关于如何在列表,网格等项目中实现延迟加载的更一般的问题。我的问题不是关于特定的框架或语言,因为我用C#,java,android开发了不同的项目类型, winforms等。

我的问题是,如何在RESTful环境中实现这种延迟加载模式?

例如,我有一个包含大约2个mio数据集的数据库。用户在客户端选择一些过滤器,服务器响应大约100.000条记录。多大的目的是向他们展示所有这些,到处都是时间来加载和渲染"列表控件中的项目需要几分钟(在糟糕的日子里)。更好的方法是向用户显示前200个项目,并根据需要加载下一个块。

另一个例子是在移动设备上搜索图片。如果搜索结果大约是10.000,则用于图像加载的移动流量将会爆炸。因此,最好显示20个条目,如果用户滚动到底部,则会加载下一个条目。

那么,我如何在后端/数据库/客户端存档?不幸的是,我无法查询"从表中选择200到400 ......"。

在某些extern API上,我可以发送一个"页面令牌"获得下一个项目块。但我怎么知道哪个"页面"用户要求?

我尝试过的一种不好的方法是加载整个集合的每个请求(第一个例子中的100.000条记录),并仅提供所需的部分。但是,当客户数量增加时,这是非常重要的,而且每隔几分钟就有10.000个客户这样做。

1 个答案:

答案 0 :(得分:0)

您可以使用分页。例如,客户端要求输入x条目的第一页,因此服务器只会从数据库中获取该条目(请参阅LINQ' s skip/take):

DB.Skip(pageNumber * pageSize).Take(pageSize);

客户端可以更改过滤器,pageNumber("下一页")或pageSize而不会出现任何问题。