提出疑问
我们为什么要监控用户的网络状态?这个从前端的出发角度来说有什么作用?
- 当用户网络状态好的时候,我们可以预加载一些资源,例如图片量比较大的网站
- 当用户网络不好的时候,我们可以相对选择加载不一样的资源,比如说网络是 5g 时,前端就加载 4k 高清图片,如果网络是 3g ,前端可以选择稍微模糊一点的时候,这样也能提高用户的体验
- 当用户断网时,前端可以给出提示“您的网络已断开”,让用户知道自己网络不行
以上说的几种情况,都涉及到一个问题:如何监控用户的网络状态?
Web Api
这里我们需要用到几个 API: navigator.connection,online,offline
下面我们以 Vue3 模拟一下网络状态的显示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <template> <a-space direction="vertical"> <a-alert :message='networkOnline ? "当前网路状态良好" : "当前网路已断开"' :type='networkOnline ? "success" : "error"' /> <a-descriptions bordered> <a-descriptions-item label="网络状态">{{ networkOnline ? networkState.info.effectiveType : '--' }}</a-descriptions-item> <a-descriptions-item label="延迟">{{ networkOnline ? networkState.info.rtt + 'ms':'--' }}</a-descriptions-item> <a-descriptions-item label="带宽">{{ networkOnline ? networkState.info.downlink + 'Mb/s':'--' }}</a-descriptions-item> </a-descriptions> </a-space> </template>
<script setup> import { reactive,ref,onMounted } from 'vue'
const networkOnline = ref(true)
const networkState = reactive({ info:{ effectiveType:'', rtt:'', downlink:'' } })
const updateOnline = () => { const {effectiveType,rtt,downlink} = navigator.connection networkOnline.value = navigator.onLine networkState.info.effectiveType = effectiveType networkState.info.rtt = rtt networkState.info.downlink = downlink }
onMounted(() => { const connection = navigator.connection || navigator.webkitConnection || navigator.mozConnection updateOnline() window.addEventListener('online', updateOnline) window.addEventListener('offline', updateOnline) connection.addEventListener('change',updateOnline) }) </script>
|
这里代码比较简单,不熟悉的同学可以查阅相关文档。
实现效果

你学到了吗,是不是很简单!