15

我在 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 中用于显示 CPU 使用情况的“w”命令的等效项可能很有用。我不太关心 I/O,但测量它会更全面。

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

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

接下来我可以做的是汇总下载的数据量,并记录该量以及完成下载的总时间。

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

4

1 回答 1

3

如果这有助于 Mugunth Kumar 在设置 MKNetworkKit 中的NSOperationQueue最大连接大小之前使用可达性类实际检查连接类型

于 2012-07-19T20:10:10.380 回答