Son*_*tos 12 connection performance mobile mobile-browser
我必须根据他/她的连接速度做出关于内容权重的动态决定发送给客户端.
也就是说:如果客户端使用的是具有3G(或更慢)连接的移动设备,我会向他/她发送轻量级内容.如果他/她使用WiFi或更快的连接,我会向他/她发送完整的内容.
我试图测量重新加载之间的时间,向客户端发送一个标题Location: myurl.com(有关客户端的一些信息以识别它).这适用于桌面浏览器和一些完整的移动浏览器(如Obigo),但它不适用于迷你(代理)浏览器,如Opera Mini或UCWeb.这些浏览器返回我的服务器和代理服务器之间的连接时间,而不是移动设备.
如果我尝试使用<meta>标记或Javascript 重新加载页面,也会出现同样的情况document.location.
有没有办法发现或测量客户端连接的速度,或者他/她是否使用3G或WiFi等,这适用于迷你浏览器(即,我可以识别通过迷你浏览器的慢速连接)?
这是一个很好的问题.我之前没有尝试过从浏览器估算客户端速度的任何技术.不过,我确实有一个想法; 我没有花太多时间考虑这个,但希望它会给你一些想法.另外,请原谅我的冗长:
首先,在处理客户端 - 服务器性能时需要考虑两件事:吞吐量和延迟.通常,与桌面客户端相比,移动客户端将具有低带宽(因此低吞吐量).此外,移动客户端的连接可能更容易出错,因此具有更高的延迟.但是,在我有限的经验中,高延迟并不意味着低吞吐量.相反,低延迟并不意味着高吞吐量.
因此,您可能需要区分延迟和吞吐量.假设客户端发送一个时间戳(让我们称之为"A")与每个HTTP请求,服务器只是回复它.然后,客户端可以用当前时间减去此返回的时间戳,以估计进行往返的请求所花费的时间.这一次几乎包括所有内容,包括网络延迟,以及服务器完全接收您的请求所花费的时间.
现在,假设服务器在发送整个响应主体之前首先在响应头中发回时间戳"A".还假设您可以逐步读取服务器的响应(例如,非阻塞IO.有多种方法可以执行此操作.)这意味着您可以在读取服务器响应之前获取回显的时间戳.此时,客户端时间"B"减去请求时间戳"A"是您的延迟的近似值.保存这个,以及客户端时间"B".
读完响应后,响应正文中的数据量除以新客户端时间"C"减去之前的客户端时间"B"就是吞吐量的近似值.例如,假设C-B = 100ms,并且您已读取100kb数据,那么您的吞吐量为10kb/s.
再一次,移动客户端连接容易出错,并且随着时间的推移会有强度变化的趋势.因此,您可能不希望一次测试吞吐量.实际上,您还可以测量每个响应的吞吐量,并保持客户端吞吐量的移动平均值.这将降低一个请求上异常错误的吞吐量导致客户端质量降级的可能性,反之亦然.
如果此方法有效,那么您需要做的就是决定用于决定客户端获取内容的策略.例如,您可以从"低质量"模式开始,然后如果客户端在一段时间内具有足够的吞吐量,则将它们升级为高质量内容.然后,如果它们的吞吐量降低,则将它们降级为低质量.
编辑:澄清了一些事情并增加了吞吐量示例.
我认为你不应该测量速度或吞吐量。
第一个猜测可能是客户端的浏览器。计算机上有许多不同的浏览器,但它们通常与移动设备上的浏览器不同。
检查用户使用的浏览器很容易。
不过,您仍然应该提供在轻量级和完整内容之间切换的选项,因为您的猜测可能是错误的。