移动端:是一个请求还是多个小请求?

7
在iPhone应用程序(或移动设备)需要不断向Web服务发送请求时,是更好地使用一次请求来获取大量数据还是为每个元素发送多个(可能是同时的)请求以获取较少的数据量。
例子:
我想加载节点中的元素列表。 我有节点ID。 我可以获取元素的两种方式如下:
1.发送一个带有节点ID的单个请求,并在单个响应中获取有关节点中前n个元素的所有信息。
2.发送具有节点ID的第一个请求以获取节点中前n个元素的ID,然后针对每个元素发送另一个请求以获得每个元素的单个响应。
我对此持平衡态度。
1. 由于非常不稳定且缓慢的移动互联网连接,重量级单个响应可能会导致更多的延迟和超时;
2. 手机可能会处理过多响应而出现问题。
你的看法是什么?
5个回答

6

由于每个请求都有开销,因此一个大的请求通常比多个相同大小的小请求更快。这也适用于高速网络,但在移动网络中,传输速度和延迟之间的比率甚至更大。


但是一个大的请求/响应难道不会导致更多的网络错误吗? - scalbatty
1
我不确定这一点。但是,如果你正在下载大量数据,你需要一种恢复中断下载的方法。但最好先尝试一个大文件的下载,如果失败了再发起新的请求(然后只请求第一次请求中没有得到的数据)。请记住,在移动网络上带宽相当好,但延迟非常糟糕。 - Martin Vilcans

1

我认为手机没有处理响应的问题,因此对于大请求/答案,多个请求的方法似乎更好。但是,根据您的请求/响应大小,实际上单个请求可能会更快,以减少与多个请求相关的延迟。单个请求方法还需要传输比多个请求方法略少的数据。


1
每次调用都会有开销(即网络负载),连接数量也可能受限。根据回调的频率,您可能能够在下载期间更新用户界面,也可能无法这样做,您可以随时处理部分数据。
如果您的数据易于压缩(通常是文本数据),那么使用单个调用甚至可以进一步减少总网络使用量。
如果数据块很大,则我会选择几个单独的数据块。这也将使网络错误更容易处理。我的底线是找到正确的平衡点-使包的大小合理,并避免向服务器发送过多请求。

0

这取决于情况。如果您不想让用户在整个应用程序中每次等待,那么您可以使用单个请求一次性加载所有数据。

如果您不介意让用户等待,那么您可以按需使用多个请求。例如,如果您只想在表格视图中显示标题,并在用户点击任何标题时显示详细信息。因此,您可以先仅获取标题,然后当用户点击时,您可以通过ID获取该标题的详细信息。这将是按需请求的非常好的方式。


我非常关注性能问题。假设我需要获取的数据是针对单个TableView的,但我可以一次性获取所有单元格的数据,或者分别获取每个单元格的数据。 - scalbatty
如果您有超过50条记录,则应每个请求加载20条,并在UITableview页脚中添加“加载更多”按钮。如果您正在寻求性能,则应一次加载所有数据。因此,您需要考虑整个应用程序,是否需要始终加载数据?也许您可以在第一次加载时加载它,并为用户提供手动加载或每七天、每月或手动加载的选项。我为我的一个应用程序做了这个,因为它们有成千上万的记录。只是一个想法。 - Deeps
我不可能在启动时加载所有数据,我的应用程序需要一直与网络服务进行通信。我已经通过20个元素为一组进行加载列表,但响应仍然很大(UITableView单元格需要大量数据来显示)。 - scalbatty
嗯,那你应该继续当前的程序并分块加载数据。这样会更好。 - Deeps

0
有时候情况需要仅对某个类别使用单一请求。比如说,你有一个 Twitter 应用程序,推文被分成了不同的类别。只关心体育的用户可能只会查看体育板块,这可以通过单个 ajax 调用完成。另一个用户可能只对其中的两个类别感兴趣。这意味着用户不必加载不必要的数据。你需要确定的重要事情是:

应用程序是否需要一次加载所有数据才能正常工作,而且你的用户是否通常需要全部的数据。


我说的是最终将要显示的数据。根据我的例子,用户选择了节点并希望显示其中的元素,但即使有20个元素也相当大。 - scalbatty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接