JavaScript实现网络状态与网速监测
作者:木棉时间:2026-10-29 12:58:27浏览:417
本文介绍使用JavaScript实现网络状态监测的方法,通过定时器循环检测网络连接状态及网速快慢。代码封装了启动、停止监控功能,利用navigator.onLine判断在线状态,并提供实时网速计算逻辑,帮助开发者掌握前端网络监控实现。
JavaScript网络监测实现
本文实例介绍了利用JavaScript进行网络监测的具体实现方式,供读者参考学习。
该段代码主要用于监测网络连接是否可用,以及评估当前网速的快慢情况。
(function(){
var network = function(){
var monitor = this;
/**
* @param {Funcation} speedInterval
*/
var speedInterval = null;
/**
* @param {Function} networkInterval
*/
var networkInterval = null;
/**
* @param {Function} reNetworkInterval
*/
var reNetworkInterval = null;
var time = 5000;
/**
* 获取网络连接状态
*/
var getConnectState = function(){
return navigator.onLine ? 1 : 0;
};
/**
* 网络中断
*/
var disconnect = function(){
// TODO ...
console.log("网速中断");
window.clearInterval(reNetworkInterval);
reNetworkInterval = null;
endSpeed();
endNetwork();
window.setTimeout(function(){
reNetworkInterval = window.setInterval(function(){
if (getConnectState() == 1) {
window.clearInterval(reNetworkInterval);
reNetworkInterval = null;
startSpeed();
startNetwork();
} else {
window.clearInterval(reNetworkInterval);
reNetworkInterval = null;
disconnect();
}
}, time);
}, 2 * time);
};
/**
* 网络速度
*/
var speed = {
/**
* 网速过慢
*/
bad : function(){
// TODO ...
console.log("网速过慢");
window.setTimeout(function(){
if(getConnectState() == 1) {
window.clearInterval(networkInterval);
networkInterval = null;
startSpeed();
} else {
disconnect();
}
}, 2 * time);
},
/**
* 网速中等
*/
medium : function(){
// TODO ...
console.log("网速中等");
},
/**
* 网速极佳
*/
great : function(){
// TODO ...
console.log("网速极佳");
}
};
/**
* 开启速度监测
* @private
*/
var startSpeed = function(){
window.clearInterval(speedInterval);
speedInterval = null;
if(getConnectState() == 1) {
speedInterval = window.setInterval(function(){
var start = new Date().getTime();
if (getConnectState() == 1) {
var img = document.getElementById("networkSpeedImage");
if (!!!img) {
img = document.createElement("IMG");
img.id = "networkSpeedImage";
img.style.display = "none";
document.body.appendChild(img);
}
try {
img.src = "http://www.baidu.com/img/baidu_jgylogo3.gif?_t=" + new Date().getTime();
img.onload = function(){
var end = new Date().getTime();
var delta = end - start;
if (delta > 200) {
speed.bad();
} else if (delta > 100) {
speed.medium();
} else {
speed.great();
}
};
} catch(e){
speed.bad();
}
} else {
// TODO 网络断开
disconnect();
}
}, time);
}else {
// TODO 网络断开
disconnect();
}
};
/**
* 停止速度监测
* @private
*/
var endSpeed = function(){
window.clearInterval(speedInterval);
speedInterval = null;
};
/**
* 开启网络连接监测
* @private
*/
var startNetwork = function(){
if (getConnectState() == 1) {
networkInterval = window.setInterval(function(){
if (getConnectState() == 0) {
disconnect();
}
}, time);
} else{
disconnect();
}
};
/**
* 结束网络连接监测
* @private
*/
var endNetwork = function(){
window.clearInterval(networkInterval);
networkInterval = null;
};
/**
* 网络监控开始
*/
this.start = function(){
startNetwork();
startSpeed();
};
/**
* 停止网络监控
*/
this.stop = function(){
endSpeed();
endNetwork();
};
};
window.network = new network();
}).call(this);
// 调用的时候,直接调用network.start();
希望本文提供的JavaScript程序设计思路能对读者有所帮助。
作者最新文章
JavaScript怎么准确判断数据类型:typeof、instanceof与Object.prototype.toString
2026-11-05 17:09:21
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
