【发布时间】:2011-12-07 17:05:30
【问题描述】:
我熟悉使用 Reachability 来确定 iOS 设备上使用的互联网连接类型(如果有)。不幸的是,这并不是连接质量的良好指标。信号强度低的 Wifi 非常粗略,低于 3 格的 3G 是一场灾难(更不用说只允许 EDGE 连接的网络)。
如何确定我的连接质量,以便帮助我的用户决定他们是否应该在当前连接上下载更大的文件?
【问题讨论】:
标签: ios
我熟悉使用 Reachability 来确定 iOS 设备上使用的互联网连接类型(如果有)。不幸的是,这并不是连接质量的良好指标。信号强度低的 Wifi 非常粗略,低于 3 格的 3G 是一场灾难(更不用说只允许 EDGE 连接的网络)。
如何确定我的连接质量,以便帮助我的用户决定他们是否应该在当前连接上下载更大的文件?
【问题讨论】:
标签: ios
一种实用的方法是在应用程序开始时下载一个托管在可靠的全球 CDN 上的中等大小的文件。您事先知道文件大小,您只需要测量它所花费的时间,进行简单的计算,然后您就可以估算出连接的质量。
例如,jQuery UI 源代码,未经压缩的 gzip 压缩后大约有 90kB。在我的 Mac 上从 http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js 下载它需要 327 毫秒。所以可以假设我至少有一个可以处理大约 300kB/s 的良好连接(事实上,它可以处理更多)。
诀窍是在原始文件大小和网络延迟之间找到良好的平衡,因为像这样的小文件永远无法达到完整的下载速度。另一方面,在启动应用程序后立即下载 1MB 肯定会惩罚大多数用户,即使它可以让您更精确地测量连接速度。
【讨论】:
Cyrille 的回答是一个很好的务实回答,但最终在 mobile 上下文中并不是一个很好的解决方案,原因如下:
您还在原始帖子中建议您希望您的用户决定根据您提供给他们的信息他们是否应该下载。但我认为这不是与移动用户交互的好方法——你不应该要求他们做出复杂的决定。如果绝对必要,仅在您认为文件可能存在问题时询问他们是否要下载该文件,但请保持简单 - “您要下载 XYZ 文件(100 MB)吗?”我个人什至会避免这样做。
最好的解决方案是监控和调整,而不是下载测试文件。在进行过程中测量连接的性能,跟踪您所拥有的有关连接性能的信息的“新鲜度”,并且仅在基于持续性能的情况下向您的用户展示做出的决定似乎有必要的连接。
编辑:例如,如果您确定了您认为代表可容忍下载性能的耐心阈值,请跟踪用户执行的每次下载,以确定是否已达到该阈值。这样一来,您将使用真实世界的活动作为“连接质量”的决定因素,而不是通过测试下载阻塞用户连接,这最终是关于连接质量的最终用户体验。如果您决定为用户提供取消下载的功能,那么您就可以很好地“输入”用户的实际耐心阈值,并且可以通过随后在他们开始下载之前为他们提供选择来调整您的功能以适应这种情况。如果您已经切换到这种“确认”模式,但发现文件开始下载速度更快,您可以动态退出确认模式。
【讨论】:
Rob 的回答非常好,但是对于更具体的实现,请从 (https://developer.apple.com/library/archive/samplecode/SimplePing/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000716)Apple's Simple Ping example source code 开始
为您要监控连接质量的服务器指定域。使用 ping 库定期“ping”它(根据您的 UI 需要说 1 或 10 秒)。衡量获得对您的 ping 的响应(或者如果它永远不会返回)所需的时间,以评估连接质量以与您的用户通信。
【讨论】: