答案 0 :(得分:16)
不知道任何实用程序或标准API,不,但您可以通过在您的网站上放置多个不同大小的图像,然后绕过缓存检索它们并观察它们加载所需的时间来完成此操作。该信息以及图像的大小为您提供了两个端点之间速度的指示。
使用多张图片的原因是你想要从小开始(比如20k),但是如果连接很快就会给你一个非常不准确的数字;因此,根据加载图像的速度,您需要选择适当大小的其他图像,以便更好地了解实际带宽(而不是设置连接的等待时间等)。
您可以使用直接JavaScript执行此操作,方法是在页外添加img
标记,并使用唯一的查询字符串来绕过缓存;但是,当您标记了“jQuery”问题时,您可能会发现使用the .ajax function(使用cache: false
设置)更方便。
你提出的速度数字只是一个指示,因为其他的事情可能正在搞乱你的时间(在另一个标签中的视频流 - 或连接到同一互联网连接的另一台电脑,甚至其他东西放慢速度)你的JavaScript的执行,就像页面上的JS重型动画一样),但它应该足以让你知道你正在使用的是什么。
答案 1 :(得分:1)
// Network connection - https://github.com/daniellmb/downlinkmax
var connectionSpeed = function()
{
// Deal with vendor prefixes
var defaultSpeed = false,
navigator = window.navigator,
connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || null;
if( ! connection )
return defaultSpeed;
// assume W3C Editor's Draft 09 October 2014
if( 'downlinkMax' in connection )
{
var downlinkMax = connection.downlinkMax;
if( ! downlinkMax )
return defaultSpeed;
if( ! isFinite(downlinkMax) )
return defaultSpeed;
return downlinkMax;
}
// assume W3C Working Draft 29 November 2012
if( 'bandwidth' in connection )
{
var bandwidth = connection.bandwidth;
if( ! bandwidth )
return defaultSpeed;
if( isNaN(speed) )
return defaultSpeed;
// standardize connection.bandwidth value by converting megabytes per second (MB/s) to megabits per second (Mbit/s)
return bandwidth * 8;
}
// assume W3C Working Draft 07 June 2011
switch( connection.type )
{
// convert connection.type value to approximate downlink values
// speed estimate is based on the median downlink value for common devices in megabits per second (Mbit/s)
case 'none':
return 0;
case '2g':
return 0.134;
case 'bluetooth':
case 'cellular':
return 2;
case '3g':
return 8.95;
case '4g':
return 100;
case 'ethernet':
return 550;
case 'wifi':
return 600;
}
return defaultSpeed;
};
答案 2 :(得分:0)
我需要类似的东西,所以我写了https://github.com/beradrian/jsbandwidth,重写了https://code.google.com/p/jsbandwidth/。
这个想法是通过Ajax进行两次调用,一次下载,另一次通过POST上传。
它应该同时适用于jQuery.ajax
或Angular $http
。