【问题标题】:"fragmenting" HTTP requests“分段”HTTP 请求
【发布时间】:2015-03-08 01:21:08
【问题描述】:

我有一个 Angular 应用程序从 REST 服务器提取数据。我们提取的每个项目都有一些“核心”数据——显示它的基本表示所需的数据——然后是我所说的“次要”数据、cmets 和其他用户可能想看到也可能不想看到的东西。

我正在尝试优化我们的请求模式,以最大限度地减少用户查看加载微调器所花费的总时间:一次提取所有(核心/辅助)数据会导致初始请求返回太慢,但拉动在用户请求我们尚未请求的内容之前,只有最基本的内容也会造成不必要的加载时间,至少我可以预料到他们会在忙于阅读核心内容时看到并加载它。

所以,现在我首先进行“核心内容”拉取,然后在第一次成功回调结束时启动“次要”拉取。这将是一个实验过程,但我想知道在这种情况下建立了哪些(如果有的话)最佳实践。 (我确信一个很好的答案是谷歌离开,但在这种情况下我不太确定谷歌 - 因此这个问题标题中的引号)

一个更具体的问题:我是发起许多小型 HTTP 事务还是发起一些大型事务更好?我的直觉是做很多小事情,特别是如果我可以预见到用户最有可能首先看到的一些事情并尽快加载这些事情。但这里肯定有一条渐近线吗?还是我完全不符合这种思路?

【问题讨论】:

  • 更小的请求会让你更快地获取核心数据。但总的来说,您将有更多的开销和可能更多的加载时间。
  • 它始终取决于请求和答案的大小。您已经说过一次提取所有数据会使用户等待很长时间。因此,您的方法似乎非常聪明,可以加载绝对必要的内容,快速显示它,然后动态添加更多数据,向用户展示他/她接下来可以期待什么。更好的搜索关键字是“渐进式加载”,在这里您还可以找到很多图像和内容的模式。

标签: javascript angularjs http


【解决方案1】:

我使用与您相同的方法,它非常适用于多键、10,0000 多个集合。

集合以ui.bootstrap.pagination 进行分页,一次最多显示10 个项目。可以在标题上搜索。

所以我的方法是只检索整个集合的idtitle,因此可以立即使用搜索。

那么,as the items displayed on screen are in an array, I place a $watch on that array。 $watch 的工作是获取数组中项目的完整详细信息(辅助拉取),但当然只有在数组更改时。 因此,在最坏的情况下,您只能提取 10 个项目的全部详细信息。

缓存结果以提高效率。它显示即时结果,因为 $watch 充当预加载器。

我是发起许多小型 HTTP 事务还是发起一些大型事务更好?

我相信大宗交易,只需几个项目(在屏幕上可点击的项目)非常有效。

关于best practice位:我想有很多方法可以实现你的目标;但是,the technique you are using works extremely well, as it retrieves only what is needed, and only just before it is needed。 此外,实现起来也很简单。

另外,像您一样,我会认为许多较小的拉动肯定比几个大的要好。然而,我被建议去大拉作为对这个问题的评论:Fetching subdocuments with angular $http

【讨论】:

  • 谢谢,我的朋友。这很有帮助。
【解决方案2】:

为了回答您关于搜索哪些关键字的问题,我建议:

progressive loading

另一种方法是使用 websockets 和 streaming loading:Oboe.js 做得很好: http://oboejs.com/examples

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2020-07-02
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多