使用javascript的带宽实用程序

时间:2010-12-28 15:35:57

标签: javascript jquery client

3 个答案:

答案 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