大致搜索了一下,js监控网速都是通过下载来算出网络速度,所以基于网上的一些js案例,简单写了一个小程序版的网络监控
需要添加download域名哦
还有记得关闭setTimeout哦
// 下载事件
var downloadTask
// 下载开始时间
var start
// 下载结束时间
var end
// 重复下载
var networkTimeOut
// 当前是否有网络连接
var networkConnected
var networkSpeed = {
// 开始
startNetwork: function(options) {
this.network();
wx.getNetworkType({
success: function (res) {
// 返回网络类型, 有效值:
// wifi/2g/3g/4g/unknown(Android下不常见的网络类型)/none(无网络)
console.log('返回网络类型, 有效值:', res)
if (res.networkType != 'none'){
// 当前是否有网络连接
networkConnected = true;
}
}
})
wx.onNetworkStatusChange(function (res) {
console.log('当前是否有网络连接',res.isConnected)
console.log(res.networkType)
// 当前是否有网络连接
networkConnected = res.isConnected;
})
},
// 下载
network: function(options) {
console.log('开始下载')
var self = this;
start = new Date().getTime()
if (!networkConnected){
self.networkCallback({
networkType: 3,
networkContent: '没有网络,请检查网络连接'
})
networkTimeOut = setTimeout(() => {
self.network();
}, 1000);
return;
}
downloadTask = wx.downloadFile({
url: "下载地址",
success: function(res) {
end = new Date().getTime()
// 根据下载文件大小来确定数值,我下载的内容大概700B
if ((end - start) > 200) {
console.log('网络差');
self.networkCallback({
networkType: 0,
networkContent: '网络较差'
})
} else if (end - start > 100) {
console.log('网络一般');
self.networkCallback({
networkType: 1,
networkContent: '网络一般'
})
} else {
console.log('网络好');
self.networkCallback({
networkType: 2,
networkContent: '网络良好'
})
}
networkTimeOut = setTimeout(() => {
self.network();
}, 1000);
},
fail: function(res) {
console.log('网络差');
self.networkCallback({
networkType: 0,
networkContent: '网络较差'
})
networkTimeOut = setTimeout(() => {
self.network();
}, 1000);
}
})
// 监听downloadFile进度
downloadTask.onProgressUpdate(function(res) {
// console.log('下载进度', res.progress)
// console.log('已经下载的数据长度', res.totalBytesWritten)
// console.log('预期需要下载的数据总长度', res.totalBytesExpectedToWrite)
if (res.progress < 100) {
end = new Date().getTime()
if ((end - start) > 200) {
console.log('网络差');
self.networkCallback({
networkType: 0,
networkContent: '网络较差'
})
}
}
})
},
// 关闭
stopNetwork: function(options) {
console.log('关闭网络测速');
clearTimeout(networkTimeOut)
downloadTask.abort()
},
/**
* 网络状态回调
* @param {options}
* networkType Number 是 0:网络较差 网络一般 2:网络良好 3:网络断开
* networkContent String 是 网络状态文案
*/
networkCallback: function(options) {
},
};
module.exports = networkSpeed;
以下是使用方法
// 网络监测
const networkSpeed = require('../../utils/networkSpeed.js');
onLoad: function(options) {
// 开始网络监测
networkSpeed.startNetwork();
// 网络监测回调
networkSpeed.networkCallback = this.networkCallback;
},
// 网络监测回调
networkCallback: function(options) {
});
},
onUnload: function() {
// 停止网络监测
networkSpeed.stopNetwork();
},