我怎样才能更好地优化iOS上的networking?

我已经在GitHub上创build了一个项目,所以我可以学习如何优化iOS应用程序的networking。 我大量使用了块和GCD,在看过去几年的WWDC 2012video和video之后,我了解到我可以用NSOperationQueue做更多。 具体来说,我可以控制并发操作(networking连接)的数量,并提供取消操作。 我正在尝试允许1,2,4,8和16个并发操作,并且我看到有趣的结果,我并不完全期望。 我正在测量结果,但我想知道是否还有更多我应该测量。

你可以在这里find示例项目:

https://github.com/brennanMKE/OptimizedNetworking

由于我使用NSURLConnection的asynchronousAPI,所以有许多并发连接的好处,因为API花费了相当长的时间来等待HTTP数据包。 以前,我的代码将从一系列项目开始下载,并按顺序请求它们,这就阻止了并发的好处。 我也一直在使用通知取消networking连接。 现在我可以通过操作来完成这个项目,我已经设置好它们来使用一个优先级和一个类别的值,这样我可以优先化和sorting下载并取消一个操作类别。 我可以select为每个视图使用一个类别,当用户离开视图时,该视图的所有操作将被使用该类别取消。 这将释放活动视图的资源。

一个使用更多并发操作的问题是CPU使用率和I / O,但是我不知道用iOS测量这些值的方法。 iOS中用于显示CPU使用率的“w”命令相当于是有用的。 我不太关心I / O,但是测量它会更全面。

我如何做networking的主要问题是响应式用户界面。 我发现我一直在做的事情导致了UI的低迷。 这种新的方法可能会有很大的帮助,但只有当我保持并发操作的数量下降。 连接types(3G,WiFi等)的最佳操作数可能会有所不同,因此检查连接types可能会导致一些优化。

如果您有兴趣通过更好的方式来加速您的应用程序中的networking通信,请尝试此示例项目,并提出其他方法来衡量性能并提供进一步优化通信的方法。 (另外请注意,我正在引用Apple示例项目MVCNetworking以及ASIHTTPRequest项目。

接下来我要做的就是总计下载的数据量,并logging下这个数量以及完成下载的总时间。

自述文件应该有助于解释项目及其工作原理。

如果这有帮助,Mugunth Kumar实际上使用可达性类检查连接types,然后在MKNetworkKit中设置NSOperationQueue max连接大小