1

在我的应用程序中,我在不同的线程上执行多种不同的方法,这些方法从请求中下载数据,解析它并将其添加到数组中。这些方法中的大多数都从一个请求中下载数据,但这些方法使用for循环并下载 30 多个翻译。

但是,这会带来糟糕的用户体验,用户必须观看旋转的轮子并阅读一些愚蠢的随机生成的停顿文本。

所以我想知道的是如何使同步请求(NSURLConnection)更快,这是最好的技术?既然我提出了这么多请求,我应该立即切换到异步吗?异步甚至意味着/做什么,在这种情况下会有所帮助吗?

要完成所有操作,该应用程序在 wifi 上最多需要 7 秒,在 3G 上最慢需要 30 秒(在新加坡,带宽最差!)

那么,如何改进呢?任何方法,技术,api,请帮助!

谢谢!

4

2 回答 2

3

解决此问题的最佳方法是对我们进行异步调用。除了速度之外,您应该尽可能避免使用同步请求。基本上,如果您使用的是同步但在单独的线程上,您正在做的工作已经用异步完成。设置它会做更多的工作,但您可以同时发送所有同步请求,并且它们可以在不同时间完成。可以同时进行多少个 http 请求是有限制的,但 iOS 会为您限制这一点,您仍然应该看到巨大的性能改进。

于 2012-11-13T23:54:18.277 回答
3

使用同步与异步不会以任何方式影响速度。无论哪种方式,互联网速度都是相同的。

问题是您绝不能在主线程上进行同步网络调用。这样做会锁定用户界面。最好的情况是您的应用似乎对用户锁定(错误)。更糟糕的情况是,操作系统会因为你的应用程序没有响应(坏的)而杀死你的应用程序。

所有网络都应该在后台完成。

如果您的应用程序在所有网络访问完成之前无法真正继续,至少您可以设置一个“忙碌”屏幕让用户知道发生了什么。也许使用进度条让用户知道该过程有多远,或者显示文件数量的“x of y”计数。什么都适合您的应用程序。

但同样,网络访问的速度不会改变。您将提供更好的用户体验。

这里有很多关于如何进行异步文件下载的问题。许多人使用NSURLConnection和其他人使用 3rd 方库,这可能会使其更容易,具体取决于您在做什么。搜索了一下。有几个被列为与这一问题相关的问题。

于 2012-11-14T00:21:17.533 回答