如何在iOS上更好地优化网络?

如何在iOS上更好地优化网络?,ios,networking,nsoperationqueue,Ios,Networking,Nsoperationqueue,我已经在GitHub上创建了一个项目,这样我就可以学习如何为我的iOS应用程序优化网络。我大量使用了blocks和GCD,在观看了WWDC 2012视频和过去几年的视频后,我了解到我可能可以用NSOperationQueue做更多的事情。具体来说,我可以控制并发操作(网络连接)的数量,并提供操作的取消。我正在试验允许1、2、4、8和16个并发操作,我看到了我完全没有预料到的有趣结果。我正在测量结果,但我想知道是否还有更多我应该测量的 您可以在此处找到示例项目: 因为我使用的是NSURLConn

我已经在GitHub上创建了一个项目,这样我就可以学习如何为我的iOS应用程序优化网络。我大量使用了blocks和GCD,在观看了WWDC 2012视频和过去几年的视频后,我了解到我可能可以用NSOperationQueue做更多的事情。具体来说,我可以控制并发操作(网络连接)的数量,并提供操作的取消。我正在试验允许1、2、4、8和16个并发操作,我看到了我完全没有预料到的有趣结果。我正在测量结果,但我想知道是否还有更多我应该测量的

您可以在此处找到示例项目:

因为我使用的是NSURLConnection的异步API,所以拥有多个并发连接有很多好处,因为API会花费相当多的时间等待HTTP数据包。以前,我的代码将从一组项目开始,按顺序下载并请求它们,这会妨碍并发的好处。我还一直在使用通知取消网络连接。现在我可以通过操作来完成这个项目,我已经设置了优先级值和类别,这样我就可以对下载进行优先级排序和取消操作类别。我可以选择为每个视图使用一个类别,当用户离开视图时,该视图的所有操作都将使用该类别取消。这将为活动视图释放资源

使用更多并发操作的一个问题是CPU使用率和I/O,但我不知道如何使用iOS测量这些值。iOS中显示CPU使用情况的“w”命令的等效项可能很有用。我不太关心I/O,但测量它会更全面

我在网络方面的主要问题是一个快速响应的用户界面。我发现我一直在做的事情让UI变得迟钝。这种新方法可能会有很大帮助,但前提是我要减少并发操作的数量。最佳操作数可能因连接类型(3G、WiFi等)而异,因此检查连接类型可能会导致一些优化

如果您对加速应用程序中网络通信的更好方法感兴趣,请尝试此示例项目,并建议我可以衡量性能的其他方法,并提供进一步优化通信的方法。(还要注意,我引用的是苹果的样例项目MVCNetworking以及ASIHTTPRequest项目

我接下来要做的是合计下载的数据量,并将该数据量与完成下载的总时间一起记录下来


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

如果这有助于Mugunth Kumar在设置NSOperationQueue max connection size(NSOperation队列最大连接大小)之前使用可访问性类检查连接类型,请参见

+1、努力和有趣的内容。如果您查看我在github上的项目,请参阅是一个帮助类,为您管理操作。我在应用商店的两个应用程序中使用了这段代码,并取得了巨大成功,我经常向队列中添加100多个操作。请注意,iOS与NSOperationsQueue密切合作以管理负载。我从未看到对主线程有任何影响。谢谢。谢谢。@DavidH我已经完成了您的项目,并将我看了一下,看看能从中学到什么。谢谢。OperationsRunner就是这个类。本质上,你可以将它添加到任何你想管理操作的类中。它非常小,并且只有几个方法需要处理。有一些示例NSConcurrent子类,一个要构建的基类和一个WebFetcher,它们也很小。是的,我找到了MVCNet工作示例远不是一个简单的解决方案。我现在看到大量使用NSOperationQueue的16个并发操作。根据Quinn“爱斯基摩人”的说法,你不应该将你的网络建立在连接类型(WiFi、3G、Edge等)上但我更应该衡量下载速度来决定。我还对iPod、iPhone和iPad的并发操作数指标感兴趣。我将查看MKNetworkKit。虽然我倾向于同意,但我可以看到预先知道我们在边缘网络上的优势,最大下载速度可能只需要1分钟-最多2个净操作队列。测量d/l速度可能会增加第一次检查。如果某些假设不正确,我们可以根据当前吞吐量进行调整。使用我的示例应用程序,我计划跟踪性能,以显示各种场景的统计数据。我可能会将一些核心数据放在一起,以保持运行正常y的结果,以便对所有历史记录进行总结。这可能会揭示进一步优化的方法。速度会影响下载时间。连接类型会影响并发连接的数量(主要是由于ISP限制).在进行了一系列测试后,我发现限制3G网络的连接数量实际上弊大于利。