2010-12-22 58 views
4

从我的应用程序上传速度太慢,我想收集一些真实的数据,以了解在哪里花费时间。我如何测量在iOS中花费的网络时间的细分?

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

  1. 初期无线连接
  2. DNS查询(在EDGE延迟显著源)(如果没有被缓存)
  3. SSL/TLS握手。
  4. HTTP请求上传,包括数据。
  5. 服务器处理时间。
  6. HTTP响应下载。

我可以解决其中的大部分问题(例如,通过虚拟请求,建立一个虚拟的HTTP 1.1连接等等),但我想知道哪些实际上对网络有贡献实际设备上的慢度,以及我的实际数据,使用实际的蜂窝塔。

如果我使用的是WiFi,我可以使用Wireshark和一些同步时钟跟踪一堆这些,但我需要手机数据。

有没有什么好的方法来获得这个详细的故障,短(gak!)使用非常低级套接字函数来重现我的香草http请求?

+0

当你说慢我们说话有多慢? – 2010-12-22 00:33:44

+0

大约3-10s。但为了达到特定的目的,我真的希望将其削减至1-3秒。服务器处理只是其中的一小部分。我可以在启动时间和上传大小之间进行一些权衡(例如,通过执行更昂贵,积极的数据压缩)。我根据记录的EDGE/3G延迟和带宽做了一些信封,但我宁愿根据真实的观察数据做出这样的决定。 – 2010-12-22 00:38:19

回答

0

好吧,我用的方法不容易,但它确实有效。也许你已经试过这个,但忍耐着我。

我得到了每个消息的发送时间,每个消息的接收时间以及其执行时间的时间戳日志。如果这涉及到多个进程或线程,我会每个生成一个日志,然后将它们合并到一个共同的时间线中。

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

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

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

在发布有关性能的问题以寻找魔法修复以改善情况方面存在倾向。但是,真正的魔法是修正你的诊断技术,所以它会告诉你要修复的东西,因为它会与其他人不同。

0

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