JavaScript實(shí)現(xiàn)獲取設(shè)備網(wǎng)絡(luò)連接信息
前言
作為前端開(kāi)發(fā),做好用戶體驗(yàn)是很重要的,日常開(kāi)發(fā)中我們經(jīng)??梢杂龅接脩艟W(wǎng)速慢導(dǎo)致靜態(tài)資源加載慢,從而給影響用戶體驗(yàn)。這里有一種優(yōu)化思路,我們可以通過(guò)JS來(lái)獲取網(wǎng)絡(luò)信息,比方說(shuō)使用的是WI-FI還是蜂窩,下載速度大致是多少呀?來(lái)達(dá)到優(yōu)化的目的,下面介紹這樣一個(gè)API
介紹
Navigator.connection是一個(gè)只讀的對(duì)象,它會(huì)提供一個(gè)一個(gè) NetworkInformation 對(duì)象來(lái)獲取設(shè)備的網(wǎng)絡(luò)連接信息。例如用戶設(shè)備的當(dāng)前帶寬或連接是否被計(jì)量,這可以用于基于用戶的連接來(lái)選擇高清晰度內(nèi)容或低清晰度內(nèi)容。
使用方法
const connectionInfo:NetworkInformation = navigator.connection
NetworkInformation定義
type NetworkInformation = {
readonly downlink:number // Mbps
readonly effectiveType: EffectiveConnectionType
onchange: EventHandler
readonly rtt:number // round trip time --> ms
}
// 每一個(gè)定義的枚舉類型都有對(duì)應(yīng)的參數(shù)范圍的要求
enum EffectiveConnectionType {
"2g",
"3g",
"4g",
"slow-2g"
};How to use
// Get the connection type.
var type = navigator.connection.type;
// Get an upper bound on the downlink speed of the first network hop
var downlink = navigator.connection.downlink;
function changeHandler(e) {
// Handle change to connection here.
}
// Register for event changes.
navigator.connection.onchange = changeHandler;
// Alternatively.
navigator.connection.addEventListener('change', changeHandler);這是一個(gè)實(shí)驗(yàn)性的API,它的適用范圍:

在項(xiàng)目中使用
Vue
// 在組件掛載完畢
onMounted(() => {
const effectiveType = navigator.connection.effectiveType
switch (effectiveType) {
case '4g':
// 加載高質(zhì)量資源
this.imgSrc = higherSrc
break;
case '3g':
// 加載稍低質(zhì)量資源
this.imgSrc = lowerSrc
break;
case '2g':
// ...
break;
default:
//...
break;
}
})React
// 在組件掛載完畢后,只需執(zhí)行一次
useEffect(()=>{
const effectiveType = navigator.connection.effectiveType
switch (effectiveType) {
case '4g':
// 加載高質(zhì)量資源
setImgsrc(higherSrc)
break;
case '3g':
// 加載稍低質(zhì)量資源
setImgsrc(lowerSrc)
break;
case '2g':
// ...
break;
default:
//...
break;
}
},[])總結(jié)
這個(gè)API可以根據(jù)用戶的網(wǎng)速,來(lái)加載對(duì)應(yīng)質(zhì)量的資源,從而為用戶帶來(lái)更好的體驗(yàn),需要注意的是,這是一個(gè)實(shí)驗(yàn)性質(zhì)的API,支持的瀏覽器版本有限,使用的時(shí)候可以作為漸進(jìn)增強(qiáng)來(lái)提高用戶體驗(yàn)。
參考資料
以上就是JavaScript實(shí)現(xiàn)獲取設(shè)備網(wǎng)絡(luò)連接信息的詳細(xì)內(nèi)容,更多關(guān)于JavaScript獲取網(wǎng)絡(luò)信息的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章
相關(guān)文章
echarts柱狀圖背景重疊組合而非并列的實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于echarts柱狀圖背景重疊組合而非并列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
如何通過(guò)JavaScript來(lái)實(shí)現(xiàn)頁(yè)面間數(shù)據(jù)傳遞
這篇文章主要給大家介紹了關(guān)于如何通過(guò)JavaScript來(lái)實(shí)現(xiàn)頁(yè)面間數(shù)據(jù)傳遞的相關(guān)資料,在前端開(kāi)發(fā)中我們常常需要從一個(gè)跳到另一個(gè)頁(yè)面,并且將當(dāng)前頁(yè)面的數(shù)據(jù)傳遞過(guò)去,需要的朋友可以參考下2023-11-11
js HTML5 Ajax實(shí)現(xiàn)文件上傳進(jìn)度條功能
這篇文章主要介紹了javascript實(shí)現(xiàn)文件上傳進(jìn)度條功能的相關(guān)資料啊,感興趣的朋友可以參考一下2016-02-02
詳解JavaScript的數(shù)據(jù)類型以及數(shù)據(jù)類型的轉(zhuǎn)換
這篇文章主要介紹了JavaScript的數(shù)據(jù)類型以及數(shù)據(jù)類型的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
JS判斷字符串是否為整數(shù)的方法--簡(jiǎn)單的正則判斷
今天小編就為大家分享一篇JS判斷字符串是否為整數(shù)的方法--簡(jiǎn)單的正則判斷,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
js 如何實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查
JavaScript操作數(shù)據(jù)庫(kù)JS操作Access數(shù)據(jù)庫(kù),跟其他語(yǔ)言操作差不多,總結(jié)了一下習(xí)慣代碼,需要的朋友可以參考下2012-11-11
js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效
這篇文章主要為大家詳細(xì)介紹了js+css3實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09

