前端如何获取在线和离线状态

online 和 offline 事件

onlineoffline 事件是浏览器自带的两个事件,可以通过添加事件监听器来检测当前网络连接状态。当浏览器的网络连接发生变化,比如从在线状态切换到离线状态,或者从离线状态切换到在线状态时,这两个事件就会被触发。以下是示例代码:

window.addEventListener('online', () => {console.log('Online');
});window.addEventListener('offline', () => {console.log('Offline');
});

在上述代码中,我们分别添加了 onlineoffline 事件监听器,并在触发事件时输出相应的信息到控制台。

navigator.onLine

除了使用事件监听器之外,JavaScript 还提供了另一种方式来检测浏览器的网络连接状态,即使用 navigator.onLine 属性。该属性返回一个布尔值,表示浏览器是否处于联网状态。以下是示例代码:

if (navigator.onLine) {console.log('Online');
} else {console.log('Offline');
}

在上述代码中,我们使用了 navigator.onLine 属性来检测当前的网络连接状态,并根据返回的布尔值输出相应信息到控制台。需要注意的是,navigator.onLine 属性只能检测当前的网络连接状态,而不能监听网络连接状态的变化。
如何通过前端获取更多的网络信息 navigator.connection

什么是 navigator.connection

navigator.connection 是 Web API 中提供的一种获取网络连接相关信息的接口。该接口返回的是一个 NetworkInformation 对象,包含了多个关于用户设备网络连接状况的属性,如网络类型、带宽、往返时间等。

通过 navigator.connection API 能够获取的主要网络连接属性如下:

  • downlink: 当前网络连接的估计下行速度(单位为 Mbps)
  • downlinkMax: 设备网络连接最大可能下行速度(单位为 Mbps)
  • effectiveType: 当前网络连接的估计速度类型(如 slow-2g、2g、3g、4g 等)
  • rtt: 当前网络连接的估计往返时间(单位为毫秒)
  • saveData: 是否处于数据节省模式

除此之外,还有其他诸如 typeonchange 等属性,用于获取设备网络连接的类型和注册网络连接状态变化事件等功能。

如何使用 navigator.connection

在使用 navigator.connection API 之前,需要先进行是否支持的判断。可以通过以下方式判断浏览器是否支持该 API:

if ('connection' in navigator) {// 支持 navigator.connection API
} else {// 不支持 navigator.connection API
}

如果返回结果为 true,则表示当前浏览器支持 navigator.connection API。

使用 navigator.connection API 需要注意的是,该接口的返回值是一个只读对象,因此不能直接修改其中的属性值。同时,在某些浏览器中可能会出现某些属性不被支持的情况,需要根据实际需求进行选择和测试。

以下是一个示例代码,用于获取当前设备的网络连接信息并将其输出到控制台:

if ('connection' in navigator) {const networkInfo = navigator.connection;console.log('Network downlink:', networkInfo.downlink);console.log('Network effective type:', networkInfo.effectiveType);console.log('Network round-trip time:', networkInfo.rtt);console.log('Network data saving mode:', networkInfo.saveData);
} else {console.log('navigator.connection is not supported.');
}

总结

navigator.connection API 是一种用于获取用户设备当前的网络连接状态信息的 JavaScript 接口,能够提供多种有助于优化网络应用程序的关键性能指标,如带宽、往返时间等。通过该 API 您可以针对用户当前的网络环境进行优化,从而提高应用程序的性能和用户体验。值得注意的是,由于不同浏览器兼容性问题的存在,需要在使用前进行检测以保证代码正常运行。

网络状态 以及 强网弱网相关推荐

  1. 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl

    Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...

  2. 【前端工程化】使用轮询的方式,监控网络状态,检测是否断网

    在我们的项目中会有监控网络状态的要求,比如断网了,那就给一个断网提示,常见的方法是使用navigator.onLine 这个方法 但是有的时候这个也不准,所以我们可以这样做,增加一个接口,在项目中轮询 ...

  3. 现代移动端网络短连接的优化手段总结:请求速度、弱网适应、安全保障

    1.前言 众所周之,通常我们开发一个移动端应用,会直接调用系统提供的网络请求接口去服务端请求数据,再针对返回的数据进行一些处理,或者使用iOS中的开源AFNetworking/OKHttp这样的网络库 ...

  4. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队"蔡锐"原创发表于"百度App技术"公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. ...

  5. Android 网络性能优化(4)弱网优化

    系列文章目录 1. Android 网络性能优化(1)概述 2. Android 网络性能优化(2)DNS优化 3. Android 网络性能优化(3)复用连接池 4. Android 网络性能优化( ...

  6. 优酷弱网平台落地实践

    作者:孙长浩(火炏) 弱网环境下的质量保障一直是公认的难题,实际生活中每个人都会遇到弱网环境,比如用户在景区地铁里,高铁上,电梯中,景区周边等场景使用APP大概率都会遇到弱网场景.优酷作为视频内容AP ...

  7. 弱网测试在app测试中探索

    目录 最近在搞一个智能穿戴项目. 手环手表等智能穿戴项目中最核心的功能是运动计步功能. 计步功能的业务逻辑是主要流程是通过手环设备采集运动数据,通过app提交采集的数据并发送到服务端,在服务端的算法库 ...

  8. 手机怎么模拟弱网_手游测试之模拟弱网环境测试

    为什么要做弱网环境测试? 其实现在不论是端游.手游还是页游,在国内范围来说,我们一般情况下网速都不算差了.而且随着5G的逐渐普及,相信网速对于玩家的制约会更小,玩家的体验也会有一个质的变化. 那我们为 ...

  9. 弱网测试及QNET工具介绍

    弱网测试及工具介绍 摘要:随着电梯门关闭,微博吃瓜的畅快之旅戛然而止.刚刚跨越人群挤进地铁口,却打不开入闸的二维码.在食堂找到座位坐下,正在播放的视频突然卡掉还亲切地提醒你换高清.在5g覆盖的今天,弱 ...

最新文章

  1. IASetIndexBuffer Offset
  2. Java从零开始学六(运算符)
  3. OpenGL 面剔除Face culling
  4. 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...
  5. nginx日志打印header_小水敲黑板--Nginx+Keepalived实现负载均衡和高可用
  6. Android+WebServer的GPS监控系统(设想)
  7. html table tr 动态加减行操作
  8. 入门到精通pl/sql编程(千里之行始于足下)之触发器
  9. php PHP命令行脚本接收传入参数的三种方式
  10. Windows 10 程序员计算器 HEX,DEC,OCT,BIN 的含义
  11. 2017全国计算机二级office题库,2017年计算机二级office题库(附答案)
  12. 资深HR告诉你到底怎么写一份好的简历(非常全面)
  13. 从0到一开发微信小程序(4)—小程序组件
  14. java tfidf_Hanlp分词实例:Java实现TFIDF算法
  15. uniapp 微信小程序 弹窗 用户授权
  16. 解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致
  17. 数独解法/n皇后的回溯算法
  18. 玩客云当打印机服务器,再玩一次机,我把玩客云改造成了群控系统!
  19. 5.cuBLAS开发指南中文版--cuBLAS中的Create()和Destroy()
  20. Linux USB设备热插拔检测

热门文章

  1. python面向对象中方法重写class Person (object):#说明Person继承object类 def __init__(self,name,age): sel
  2. unity学习中经常要碰到的几种数据结构
  3. 旋转木马是最残忍的游戏, 彼此追逐却有永恒的距离
  4. MyEclipse上CVS的使用说明
  5. ppst开发技术视频——ubuntu crontab 的使用方法
  6. DMA简介及编程要点
  7. Sigmoid信念网络(SBN)
  8. JS代码实现击鼓传花【队列】
  9. Liunx网络配置三大方法:网卡配置文件、nmtui、nmcli
  10. zcy算法入门笔记003-树