"破碎" HTTP请求

时间:2015-03-07 14:05:27

标签: javascript angularjs http

我有一个Angular应用程序从REST服务器中提取数据。我们提取的每个项目都有一些“核心”数据 - 显示它的基本表示所需的内容 - 然后我称之为“辅助”数据,评论和用户可能想要查看的其他内容。

我正在尝试优化我们的请求模式,以最大限度地减少用户花在查看加载微调器上的总时间:立即拉动所有(核心/辅助)数据会导致初始请求返回太慢,但是拉动在用户要求我们尚未请求的东西之前,只有最基本的东西也会产生不必要的加载时间,至少因为我可能已经预料到他们想要看到它并在他们忙着阅读核心内容时加载它。

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

一个更具体的问题:我最好不要发起许多小型HTTP交易或一些大型交易?我的直觉是做很多小事,特别是如果我能预见到用户最想看到的一些东西,并尽快得到那些装。但肯定有一个渐近线?或者我是否完全脱离了这一思路?

2 个答案:

答案 0 :(得分:2)

我使用与您相同的方法,对于多键的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

答案 1 :(得分:0)

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

progressive loading

替代方案可能是使用websockets和streaming loading:Oboe.js做得非常好: http://oboejs.com/examples