【问题标题】:How can I measure the breakdown of network time spent in iOS?如何衡量在 iOS 中花费的网络时间细分?
【发布时间】:2010-12-22 00:01:02
【问题描述】:

从我的应用上传速度太慢,我想收集一些真实数据,了解时间花在哪里。

例如,以下是请求经历的几个阶段:

  1. 初始无线电连接(EDGE 中延迟的重要来源)
  2. DNS 查找(如果未缓存)
  3. SSL/TLS 握手。
  4. HTTP 请求上传,包括数据。
  5. 服务器处理时间。
  6. HTTP 响应下载。

我可以解决其中的大部分问题(例如,通过较早地通过虚拟请求启动无线电、建立虚拟 HTTP 1.1 连接等),但我想知道哪些实际上导致了网络缓慢,on实际设备,我的实际数据,使用实际的手机信号塔。

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

有没有什么好的方法可以得到这个详细的分类,而不是必须(gak!)使用非常低级的套接字函数来重现我的普通 http 请求?

【问题讨论】:

  • 当你说慢的时候我们说话有多慢?
  • 大约 3-10 秒。但是出于我的特定目的,我真的很想将其减少到 1-3 秒。服务器端处理只是其中很小的一部分。我可以在启动时间和上传大小之间做出一些权衡(例如,通过进行更昂贵、更激进的数据压缩)。我根据记录的 EDGE/3G 延迟和带宽做了一些粗略的判断,但我更愿意根据真实的观察数据做出这样的决定。

标签: iphone optimization networking ios bandwidth


【解决方案1】:

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

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

然后我绘制时间线。 (工具会很好,但我是手工完成的。) 我要寻找的是 1) 因超时而重新传输的消息,2) 收到消息和对其采取行动的时间之间的延迟。

通常,这可以确定我可以在我可以控制的代码中修复的问题。这改善了一些事情,但后来我又重新做了一遍,因为我上次错过了一些东西的可能性很大。

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

在发布有关性能的问题时,有一种趋势是寻找神奇的修复方法来改善这种情况。但是,真正的神奇修复是改进您的诊断技术,以便它告诉您要修复什么,因为它与其他人的不同。

【讨论】:

  • 我不确定我是否完全遵循如何将您的建议应用于我的问题,但是...问题是,一旦我开始,我对幕后的了解并不多iOS 中的 https 请求。如果我这样做了,我确实会记录所有内容,注意时间等。问题是我试图找出在我看不到的部分中发生的情况的细分。而且我绝对不是在寻找神奇的修复——我在寻找数据! :)
  • @Josh:这很难。曾经有一个小工具可以监控网络连接上的流量。那就是我要挖掘的地方。当你真正能做的就是猜测和尝试时,这很难。
  • 是的...如果是 wifi,我只需通过计算机上的临时连接路由流量,然后使用 WireShark 嗅探数据包。我想知道是否可以通过将 femptocell 插入我控制的路由器来做类似的事情......
  • @JoshBleecherSnyder:你有没有找到一个好的解决方案?我也对这个确切的诊断数据感兴趣......
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多