如何衡量在iOS中花费的网络时间细分?

时间:2010-12-22 00:01:02

标签: iphone optimization networking ios bandwidth

我的应用上传太慢了,我想收集一些关于花费时间的实际数据。

举例来说,这是请求经过的几个阶段:

  1. 初始无线电连接(EDGE中潜在的延迟来源)
  2. DNS查找(如果没有缓存)
  3. SSL / TLS握手。
  4. HTTP请求上传,包括数据。
  5. 服务器处理时间。
  6. HTTP响应下载。
  7. 我可以解决其中的大部分问题(例如,通过虚拟请求提前启动无线电,建立虚拟HTTP 1.1连接等),但我想知道哪些实际上导致了网络运行缓慢,实际设备,使用我的实际数据,使用实际的手机信号塔。

    如果我使用WiFi,我可以使用Wireshark和一些同步时钟跟踪其中的一些,但我需要蜂窝数据。

    有没有什么好方法可以获得这个详细的细分,除非必须(gak!)使用非常低级别的套接字函数来重现我的vanilla http请求?

2 个答案:

答案 0 :(得分:0)

好的,我使用的方法并不容易,但确实有效。也许你已经尝试过了,但请耐心等待。

我得到每条消息的发送时间,每条消息的接收时间以及采取行动的时间的时间戳记日志。如果这涉及多个进程或线程,我每个都生成一个日志,然后将它们合并到一个公共时间轴。

然后我绘制出时间轴。 (一个工具会很好,但是我手工完成了。) 我所寻找的是诸如1)由于超时而重新传输的消息,2)收到消息的时间与其采取行动的时间之间的延迟。

通常,这可以识别我可以在我可以控制的代码中修复的问题。这会改善一些事情,但后来又重新做了一遍,因为我最后一次错过了一些很好的机会。

结果是,一旦消除了可预防的延迟源,就可以使异步消息传递系统运行得非常快。

有关发布性能问题的趋势是寻找改善情况的魔法修复。但是,真正神奇的解决办法是改进你的诊断技术,以便它告诉你要修复什么,因为它会与其他任何人不同。

答案 1 :(得分:0)

一个简单的解决方案是,一旦应用程序被触发,与服务器建立长轮询连接(您可以选择此连接何时需要建立先前的手,以及何时断开连接),但这是一种黑客,如果你想避免所有嗅探的数据包与iOS提供的api曝光较少。