【问题标题】:Implementation of lazy loading for lists with DB, client and backend实现带有数据库、客户端和后端的列表的延迟加载
【发布时间】:2016-11-21 12:30:53
【问题描述】:

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

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

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

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

那么,我怎样才能在后端/数据库/客户端存档呢?不幸的是,我无法查询“从表中选择 200 到 400 ...”。

在一些外部 API 上,我可以发送一个“页面令牌”来获取下一个项目块。但是我怎么知道用户要求哪个“页面”?

我尝试过的一个不好的方法是在每个请求中加载整个集合(第一个示例中的 100.000 条记录),并且只提供需要的部分。但是当客户端数量增加并且每分钟有 10.000 个客户端执行此操作时,这是非常浪费资源的。

【问题讨论】:

    标签: rest lazy-loading backend


    【解决方案1】:

    您可以为此使用分页。例如,客户端请求 x 条目的第一页,因此服务器将只从数据库中获取它(参见 LINQskip/take):

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

    客户端可以毫无问题地更改过滤器、pageNumber(“下一页”)或 pageSize。

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2023-03-21
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多