我在 GitHub 上创建了一个项目,以便我可以学习如何优化 iOS 应用程序的网络。我大量使用了块和 GCD,在观看 WWDC 2012 视频和过去几年的视频后,我了解到我可以使用 NSOperationQueue 做更多事情。具体来说,我可以控制并发操作(网络连接)的数量并提供操作取消。我正在尝试允许 1、2、4、8 和 16 个并发操作,并且看到了我完全没有预料到的有趣结果。我正在测量结果,但我想知道是否还应该测量更多内容。
您可以在这里找到示例项目:
https://github.com/brennanMKE/OptimizedNetworking https://github.com/brennanMKE/OptimizedNetworking
由于我使用 NSURLConnection 的异步 API,因此拥有多个并发连接有很多好处,因为该 API 花费相当多的时间等待 HTTP 数据包。以前,我的代码将从一系列项目开始下载并按顺序请求所有项目,这阻碍了并发的好处。我还一直在使用通知来取消网络连接。现在我可以通过操作来处理这个项目,并且我已将它们设置为使用优先级值和类别,以便我可以对下载进行优先级排序和排序以及取消操作类别。我可以选择为每个视图使用一个类别,当用户离开视图时,该视图的所有操作都将使用该类别取消。这将为活动视图释放资源。
使用更多并发操作的一个问题是 CPU 使用率以及 I/O,但我不知道如何使用 iOS 来测量这些值。相当于 iOS 中显示 CPU 使用情况的“w”命令可能很有用。我不太关心 I/O,但测量它会更全面。
我在网络方面的主要问题是响应式用户界面。我发现我一直在做的事情让UI变得迟缓。这种新方法可能会有很大帮助,但前提是我要减少并发操作的数量。最佳操作次数可能会因连接类型(3G、WiFi 等)而异,因此检查连接类型可能会带来一些优化。
如果您对加速应用程序中的网络通信的更好方法感兴趣,请尝试此示例项目并建议我可以衡量性能的其他方法,并提供进一步优化通信的方法。 (另请注意,我引用了 Apple 示例项目 MVCNetworking 以及 ASIHTTPRequest 项目。
接下来我可能要做的就是合计下载的数据量,并记录该数据量以及完成下载的总时间。
自述文件应该有助于解释该项目及其工作原理。
如果这有助于 Mugunth Kumar 在设置 NSOperationQueue 最大连接大小之前使用可达性类实际检查连接类型MK网络套件 https://github.com/MugunthKumar/MKNetworkKit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)