我在GitHub上创建了一个项目,这样我就可以学习如何为我的iOS应用程序优化网络。我已经大量使用了块和GCD,在观看过去几年的WWDC 2012视频和视频后,我了解到我可以用NSOperationQueue做更多的事情。具体来说,我可以控制并发操作(网络连接)的数量以及提供操作的取消。我正在尝试允许1,2,4,8和16个并发操作,我看到有趣的结果,我并不完全期望。我正在测量结果,但我想知道是否还有更多我应该测量的结果。
您可以在此处找到示例项目:
https://github.com/brennanMKE/OptimizedNetworking
由于我使用NSURLConnection的异步API,因此许多并发连接有很多好处,因为API花费了大量时间等待HTTP数据包。以前我的代码将从一个要下载的项目数组开始,并按顺序请求它们,这会阻止并发的好处。我也一直在使用通知来取消网络连接。现在我可以通过操作来完成这个项目,我已经将它们设置为使用优先级值和类别,以便我可以对下载进行优先级排序和排序,并取消一类操作。我可以选择为每个视图使用一个类别,当用户离开视图时,将使用该类别取消该视图的所有操作。这将释放活动视图的资源。
使用更多并发操作的一个问题是CPU使用率和I / O,但我不知道使用iOS测量这些值的方法。相当于iOS中的“w”命令以显示CPU使用率可能很有用。我不太关心I / O,但测量它会更全面。
我在网络方面的主要问题是响应式用户界面。我发现我一直在做的事情让UI变得迟钝。这种新方法可能有很大帮助,但前提是我保持并发操作的数量。最佳操作数可能因连接类型(3G,WiFi等)而异,因此检查连接类型可能会导致一些优化。
如果您对加速应用中网络通信的更好方法感兴趣,请尝试此示例项目,并提出其他方法来衡量效果并提供进一步优化通信的方法。 (另请注意,我正在引用Apple示例项目MVCNetworking以及ASIHTTPRequest项目。
接下来我要做的是总计下载的数据量并保留该数量的日志以及完成下载的总时间。
README文件应该有助于解释项目及其工作原理。