在我的应用程序中,我执行多种不同的方法,所有方法都在不同的线程上,从请求中下载数据,解析并将其添加到数组中。大多数这些方法从一个请求下载数据,但是这些方法使用for
循环并下载超过30个翻译。
但是,这会带来糟糕的用户体验,用户必须观看旋转轮并阅读一些随机生成的拖延文本。
所以我想知道的是如何更快地发出同步请求(NSURLConnection
),这是最好的技术?我应该立即切换到异步,因为我提出了这么多请求吗?异步甚至意味着/做什么,它会在这种情况下有所帮助吗?
要完成所有操作,该应用程序在wifi上最多需要7秒,在3G上最慢需要30秒(在新加坡,带宽最差!)
那么,如何改进?任何方法,技巧,api,请帮忙!
谢谢!
答案 0 :(得分:3)
解决此问题的最佳方法是使用异步调用。除了速度之外,您应该尽可能避免使用同步请求。基本上,如果您使用同步但在单独的线程上,您正在进行已经使用异步完成的工作。设置它会有更多工作,但您可以同时发送所有同步请求,并且可以在不同时间完成。同时有多少http请求可以进行限制,但iOS会为您限制这一点,您仍然可以看到性能大幅提升。
答案 1 :(得分:3)
使用同步与异步不会以任何方式影响速度。互联网速度无论如何都是一样的。
问题是您绝不能在主线程上进行同步网络呼叫。这样做会锁定用户界面。最好的情况是你的应用程序看起来锁定到用户(坏)。更糟糕的情况是,操作系统会因为没有响应(坏)而杀死您的应用。
所有网络都应该在后台完成。
如果您的应用无法真正继续,直到所有网络访问完成,至少您可以设置一个“忙碌”屏幕,让用户知道发生了什么。也许使用进度条让用户知道进程的距离或显示文件数的“x of y”计数。什么适合您的应用。
但同样,网络访问的速度不会改变。您将提供更好的用户体验。
这里有很多关于如何进行异步文件下载的问题。许多人使用NSURLConnection
和其他人使用第三方库,这可能会使您更容易,具体取决于您正在做什么。搜索一下。有几个被列为与此相关的问题。