描述" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

通過JS獲取你當前的網絡狀況?建議大家學一學~

來源: 責編: 時間:2024-04-16 08:33:29 247觀看
導讀前言大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心檢測網速想要在Web端檢測網速,其實很簡單,有一個全局的對象——navigation,我們來看看它的身上都有哪些東西:圖片屬性
描述

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心JTb28資訊網——每日最新資訊28at.com

檢測網速

想要在Web端檢測網速,其實很簡單,有一個全局的對象——navigation,我們來看看它的身上都有哪些東西:JTb28資訊網——每日最新資訊28at.com

圖片圖片JTb28資訊網——每日最新資訊28at.com

屬性
JTb28資訊網——每日最新資訊28at.com

描述
JTb28資訊網——每日最新資訊28at.com

類型
JTb28資訊網——每日最新資訊28at.com

downlink
JTb28資訊網——每日最新資訊28at.com

有效帶寬估算(單位:兆比特/秒)
JTb28資訊網——每日最新資訊28at.com

number
JTb28資訊網——每日最新資訊28at.com

effectiveType
JTb28資訊網——每日最新資訊28at.com

effectiveType
JTb28資訊網——每日最新資訊28at.com

slow-2g/2g/3g/4g
JTb28資訊網——每日最新資訊28at.com

rtt
JTb28資訊網——每日最新資訊28at.com

當前連接下評估的往返時延
JTb28資訊網——每日最新資訊28at.com

number
JTb28資訊網——每日最新資訊28at.com

saveData
JTb28資訊網——每日最新資訊28at.com

用戶代理是否設置了減少數據使用的選項
JTb28資訊網——每日最新資訊28at.com

boolean
JTb28資訊網——每日最新資訊28at.com

useNetwork

我們可以自定義一個hook,用來獲取網頁當前的網絡狀態~需要具備以下要素:JTb28資訊網——每日最新資訊28at.com

1、返回的數據所需的ts類、監聽網絡變化的enumJTb28資訊網——每日最新資訊28at.com

2、獲取網絡狀態JTb28資訊網——每日最新資訊28at.com

3、監聽網絡變化,并實時更新最新的網絡狀態JTb28資訊網——每日最新資訊28at.com

第一步:所需的ts類型

說說NetworkState的各個參數:JTb28資訊網——每日最新資訊28at.com

  • since:記錄當時檢測的時間
  • oline:記錄是否有網絡
  • rtt:記錄時延
  • downlink:記錄帶寬
  • saveData:記錄用戶代理是否設置了減少數據使用
  • effectiveType:網絡連接類型
// hook返回的值interface NetworkState {  since?: Date;  online?: boolean;  rtt?: number;  downlink?: number;  saveData?: boolean;  effectiveType?: string;}// 監聽網絡變化的事件名enumenum NetworkEventType {  ONLINE = 'online',  OFFLINE = 'offline',  CHANGE = 'change',}

第二步:獲取網絡狀態

function getConnection() {  const nav = navigator as any;  if (typeof nav !== 'object') return null;  return nav.connection || nav.mozConnection || nav.webkitConnection;}function getConnectionProperty(): NetworkState {  const c = getConnection();  if (!c) return {};  return {    rtt: c.rtt,    saveData: c.saveData,    downlink: c.downlink,    effectiveType: c.effectiveType,  };}

第三步:實時更新網絡狀態

unction useNetwork(): NetworkState {  const [state, setState] = useState(() => {    return {      since: undefined,      online: navigator?.onLine,      ...getConnectionProperty(),    };  });  useEffect(() => {    const onOnline = () => {      setState((prevState) => ({        ...prevState,        online: true,        since: new Date(),      }));    };    const onOffline = () => {      setState((prevState) => ({        ...prevState,        online: false,        since: new Date(),      }));    };    const onConnectionChange = () => {      setState((prevState) => ({        ...prevState,        ...getConnectionProperty(),      }));    };    window.addEventListener(NetworkEventType.ONLINE, onOnline);    window.addEventListener(NetworkEventType.OFFLINE, onOffline);    const connection = getConnection();    connection?.addEventListener(NetworkEventType.CHANGE, onConnectionChange);    return () => {      window.removeEventListener(NetworkEventType.ONLINE, onOnline);      window.removeEventListener(NetworkEventType.OFFLINE, onOffline);      connection?.removeEventListener(NetworkEventType.CHANGE, onConnectionChange);    };  }, []);  return state;}

完整代碼

import { useEffect, useState } from 'react';export interface NetworkState {  since?: Date;  online?: boolean;  rtt?: number;  downlink?: number;  saveData?: boolean;  effectiveType?: string;}enum NetworkEventType {  ONLINE = 'online',  OFFLINE = 'offline',  CHANGE = 'change',}function getConnection() {  const nav = navigator as any;  if (typeof nav !== 'object') return null;  return nav.connection || nav.mozConnection || nav.webkitConnection;}function getConnectionProperty(): NetworkState {  const c = getConnection();  if (!c) return {};  return {    rtt: c.rtt,    saveData: c.saveData,    downlink: c.downlink,    effectiveType: c.effectiveType,  };}function useNetwork(): NetworkState {  const [state, setState] = useState(() => {    return {      since: undefined,      online: navigator?.onLine,      ...getConnectionProperty(),    };  });  useEffect(() => {    const onOnline = () => {      setState((prevState) => ({        ...prevState,        online: true,        since: new Date(),      }));    };    const onOffline = () => {      setState((prevState) => ({        ...prevState,        online: false,        since: new Date(),      }));    };    const onConnectionChange = () => {      setState((prevState) => ({        ...prevState,        ...getConnectionProperty(),      }));    };    window.addEventListener(NetworkEventType.ONLINE, onOnline);    window.addEventListener(NetworkEventType.OFFLINE, onOffline);    const connection = getConnection();    connection?.addEventListener(NetworkEventType.CHANGE, onConnectionChange);    return () => {      window.removeEventListener(NetworkEventType.ONLINE, onOnline);      window.removeEventListener(NetworkEventType.OFFLINE, onOffline);      connection?.removeEventListener(NetworkEventType.CHANGE, onConnectionChange);    };  }, []);  return state;}export default useNetwork;


JTb28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-83785-0.html通過JS獲取你當前的網絡狀況?建議大家學一學~

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 你的debug包在Android 14變卡了嗎

下一篇: 正則表達式中 “$” 并不是表示 “字符串結束”

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久久久久91香蕉国产| 99国产精品国产精品久久| 国产精品a级| 国产精品一区久久| 国内揄拍国内精品久久| 亚洲第一在线| 一区二区三区欧美在线| 香蕉乱码成人久久天堂爱免费| 久久久九九九九| 欧美日韩国产二区| 国产视频亚洲精品| 亚洲人成网在线播放| 亚洲一级黄色| 久久久久久欧美| 欧美色另类天堂2015| 国产色视频一区| 91久久在线| 亚洲欧美在线看| 男人的天堂成人在线| 国产精品久久久久久久浪潮网站| 含羞草久久爱69一区| 欧美精品v日韩精品v韩国精品v| 亚洲欧美日本精品| 永久免费精品影视网站| 欧美精品在线观看| 国产伦精品一区| 国产欧美精品一区二区三区介绍| 在线观看视频欧美| 亚洲一区在线观看视频| 免费成人av在线| 国产精品网站视频| 亚洲精品日日夜夜| 欧美中文在线观看国产| 欧美日韩国产免费| 在线不卡a资源高清| 亚洲欧美日韩综合aⅴ视频| 美女精品自拍一二三四| 国产精品入口日韩视频大尺度| 亚洲国产精品日韩| 久久国产精品99国产精| 国产精品草草| 亚洲精品国产欧美| 久久青草福利网站| 国产欧美视频一区二区| 一区二区三区高清在线| 美女诱惑一区| 国精品一区二区| 亚洲欧美国产高清| 欧美视频手机在线| 欧美精品乱人伦久久久久久 | 国产精品久久久一区麻豆最新章节| 好男人免费精品视频| 午夜精品亚洲| 国产精品高清网站| 99re这里只有精品6| 久久嫩草精品久久久精品一| 国产欧美日韩视频在线观看| 亚洲视频在线一区| 欧美日韩免费看| 亚洲国产精品悠悠久久琪琪 | 国产精品高潮呻吟久久av黑人| 亚洲日本va午夜在线影院| 久久久久久婷| 国产亚洲欧洲一区高清在线观看| 亚洲一级在线观看| 欧美日韩一二三区| 一本久久综合| 欧美日韩中文字幕在线| 亚洲美女免费精品视频在线观看| 美女999久久久精品视频| 狠狠色噜噜狠狠色综合久| 久久黄色影院| 韩国女主播一区| 久久久久久久一区二区三区| 国产一区二区三区在线观看网站| 欧美在线播放高清精品| 国产午夜亚洲精品不卡| 欧美尤物一区| 国产在线一区二区三区四区| 久久精品国产精品 | 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日本免费一区二区三区| 日韩午夜高潮| 欧美日韩亚洲一区二区三区四区| 日韩视频免费| 欧美日韩中文字幕| 亚洲欧美电影在线观看| 国产精品一二三视频| 午夜免费久久久久| 国产日韩欧美视频在线| 久久本道综合色狠狠五月| 国产一区二区按摩在线观看| 久久久久久久久一区二区| 很黄很黄激情成人| 男人的天堂成人在线| 亚洲精品国产精品乱码不99按摩| 欧美日韩国产系列| 亚洲一区精彩视频| 国产情侣久久| 久久躁狠狠躁夜夜爽| 亚洲精品一级| 国产精品久久久久毛片软件| 欧美在线观看视频一区二区三区| 精品成人一区二区三区| 欧美激情久久久久久| 一本色道久久综合一区| 国产精品欧美风情| 久久精品国产综合| 亚洲黄网站黄| 国产精品国产三级国产专区53 | 正在播放亚洲一区| 国产日韩欧美在线| 麻豆国产va免费精品高清在线| 亚洲日本成人网| 国产精品久久精品日日| 久久成人一区二区| 亚洲激情社区| 国产精品九九久久久久久久| 久久精品亚洲一区二区| 亚洲精品一区二区三区婷婷月| 国产精品色婷婷| 久久婷婷久久| 一区二区三区日韩| 国产综合视频| 欧美日韩影院| 久久久久久久波多野高潮日日| 亚洲精品久久久久久久久| 国产精品欧美日韩久久| 久久亚洲图片| 亚洲视频网在线直播| 国产一区二区三区四区在线观看| 欧美精品一区在线发布| 欧美亚洲综合网| 最新国产拍偷乱拍精品| 国产乱码精品1区2区3区| 麻豆精品精华液| 亚洲主播在线播放| 亚洲国产成人精品久久久国产成人一区| 欧美日韩精品免费观看视频完整| 欧美一区二区视频在线| 亚洲精品久久久久久下一站| 国产精品成人一区二区| 噜噜噜噜噜久久久久久91| 亚洲性线免费观看视频成熟| 精品999网站| 国产精品久久久久久亚洲调教 | 国产欧美日韩不卡免费| 欧美高清hd18日本| 亚洲欧美日韩精品久久| 亚洲欧洲一区| 国内精品久久久久久久影视麻豆| 欧美日韩在线影院| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美成人精品| 亚洲剧情一区二区| 伊人婷婷欧美激情| 国产精品色婷婷久久58| 欧美人妖在线观看| 久久亚洲免费| 午夜伦理片一区| 一区二区三区你懂的| 亚洲国产精品v| 国内精品久久久久久久影视麻豆| 欧美视频日韩| 欧美精品网站| 欧美**人妖| 久久久久久久久久久久久女国产乱| 一区二区国产精品| 亚洲欧洲综合另类在线| 激情文学综合丁香| 国产区精品在线观看| 国产精品高潮久久| 欧美日韩在线一区二区| 欧美激情在线有限公司| 另类欧美日韩国产在线| 久久久国产精彩视频美女艺术照福利 | 亚洲丰满在线| 黄色亚洲免费| 国产一区二区黄| 国产精品一区二区三区四区| 欧美日韩一视频区二区| 欧美日韩hd| 欧美激情亚洲视频| 欧美xxxx在线观看| 麻豆成人综合网| 久久婷婷国产综合国色天香| 久久精品欧洲| 久久国产主播| 久久久久久伊人| 久久久久久亚洲综合影院红桃| 久久精品国产综合精品| 欧美影院成年免费版| 欧美亚洲日本国产| 欧美一级久久久| 欧美在线www| 久久av一区二区三区漫画| 欧美一区二区三区免费视| 欧美影院一区| 久久精品成人| 久久伊人免费视频| 免费精品视频| 欧美激情女人20p| 欧美日韩国产成人在线91| 欧美日韩在线直播|