当前位置: 首页 > 面试题库 >

如何在JavaScript中检测互联网速度?

楚宇
2023-03-14
问题内容

如何创建一个JavaScript页面来检测用户的互联网速度并将其显示在页面上?诸如 “您的互联网速度为?? / ??”之类的信息 Kb / s”


问题答案:

可能在某种程度上但不是很准确,其想法是加载具有已知文件大小的图像,然后在其onload事件中测量触发该事件之前经过的时间,然后将此时间除以图像文件大小。

可以在这里找到示例:使用javascript计算速度

应用了建议的修复的测试用例:

//JUST AN EXAMPLE, PLEASE USE YOUR OWN PICTURE!

var imageAddr = "http://www.kenrockwell.com/contax/images/g2/examples/31120037-5mb.jpg";

var downloadSize = 4995374; //bytes



function ShowProgressMessage(msg) {

    if (console) {

        if (typeof msg == "string") {

            console.log(msg);

        } else {

            for (var i = 0; i < msg.length; i++) {

                console.log(msg[i]);

            }

        }

    }



    var oProgress = document.getElementById("progress");

    if (oProgress) {

        var actualHTML = (typeof msg == "string") ? msg : msg.join("<br />");

        oProgress.innerHTML = actualHTML;

    }

}



function InitiateSpeedDetection() {

    ShowProgressMessage("Loading the image, please wait...");

    window.setTimeout(MeasureConnectionSpeed, 1);

};



if (window.addEventListener) {

    window.addEventListener('load', InitiateSpeedDetection, false);

} else if (window.attachEvent) {

    window.attachEvent('onload', InitiateSpeedDetection);

}



function MeasureConnectionSpeed() {

    var startTime, endTime;

    var download = new Image();

    download.onload = function () {

        endTime = (new Date()).getTime();

        showResults();

    }



    download.onerror = function (err, msg) {

        ShowProgressMessage("Invalid image, or error downloading");

    }



    startTime = (new Date()).getTime();

    var cacheBuster = "?nnn=" + startTime;

    download.src = imageAddr + cacheBuster;



    function showResults() {

        var duration = (endTime - startTime) / 1000;

        var bitsLoaded = downloadSize * 8;

        var speedBps = (bitsLoaded / duration).toFixed(2);

        var speedKbps = (speedBps / 1024).toFixed(2);

        var speedMbps = (speedKbps / 1024).toFixed(2);

        ShowProgressMessage([

            "Your connection speed is:",

            speedBps + " bps",

            speedKbps + " kbps",

            speedMbps + " Mbps"

        ]);

    }

}


<h1 id="progress">JavaScript is turned off, or your browser is realllllly slow</h1>

与“真实”速度测试服务快速比较显示,使用大尺寸图像时,相差0.12 Mbps。

为了确保测试的完整性,您可以在启用Chrome开发者工具限制的情况下运行代码,然后查看结果是否符合限制。 (贷记给user284130)

要记住的重要事项:

  1. 使用的图像应适当优化和压缩。如果不是,则Web服务器对连接的默认压缩可能会显示比实际更大的速度。另一种选择是使用不可压缩的文件格式,例如jpg。

  2. 上述缓存无效化机制可能不适用于某些CDN服务器,可以将其配置为忽略查询字符串参数,从而更好地在映像本身上设置缓存控制标头。



 类似资料:
  • 问题内容: 在Java中能否确定可用的总CPU速度以及系统总内存?到网络的网络连接速度也很棒。 问题答案: 这实际上取决于您的操作系统,因为Java将告诉你 一点 关于底层机器。不幸的是,根据您的操作系统,您必须使用不同的方法。 如果您使用的是Linux,请查看文件系统以获取CPU信息。通常具有丰富的信息。网络(IO)将通过命令反映出来。 如果您使用的是Windows,WMI是一个有用的工具,它可

  • 问题内容: 这就是我在香草javascript中检查互联网连接的方式: 我的项目中有角度控制器和模块。我应该在上面的代码放在哪里?它应在全局上下文中执行,而不应分配给某个控制器。也许有某种全局控制器? 问题答案: 首先,我建议您听在线/离线活动。 您可以在AnguarJS中以这种方式进行操作: 注意:我在方法中包装了根范围变量的更改,以通知Angular某些更改。 之后,您可以: 在控制器中: 在

  • 我的应用程序基于 Web 视图。我添加了带有重试按钮的布局,没有互联网活动。如果wifi或移动数据关闭,则应用程序显示带有重试按钮的布局。但是,如果在没有活动互联网连接的情况下连接wifi或移动数据,则它不会显示布局,而是显示错误页面。我应该怎么做才能检测活跃的互联网连接并克服这个问题? 我的代码:

  • 问题内容: 我想看看是否有人在使用Java时有一种简单的方法来检测是否存在Internet连接。当前的应用程序在Windows的WinInit DLL中使用了“InternetGetConnectedState”方法,但是我的应用程序需要跨平台才能进行Mac操作,并且这种方法将无法使用。我完全不知道JNI可以在Java中使用DLL,它很快变得令人沮丧。 我唯一想到的方法是尝试打开与网站的URL连接

  • 问题内容: 是否有Apple框架捆绑包来检测是否存在互联网连接?当前,当我的应用程序尝试在没有互联网连接的情况下对用户的位置进行地理位置定位时会崩溃。 我对Swift和ios编程有些陌生-抱歉。 问题答案: 这不是一个完善的网络检查库,但是我发现了这种简单的方法来检查网络可用性。我设法将其翻译为Swift,并在这里完成了最终代码。 它适用于3G和WiFi连接。我还通过一个工作示例将其上传到了我的G

  • 进行与互联网间的连接测试,并显示结果。 名称* 目前使用的互联网连接之连接名称 SSID* 接入点的SSID 获取IP地址 显示是否可获取IP地址 互联网连接 显示是否可与互联网连接 登陆PlayStation®Network 显示是否能登陆PlayStation®Network NAT类型 显示PS Vita与互联网的连接方式 使用游戏的通信功能等时,可确认与其它PS Vita间的连接稳定性。