어떻게 JavaScipt로 네트워크 속도를 측정합니까
5220 단어 JS네트워크 속도를 측정하다
앞말
그렇습니다. 최근에 현재 네트워크 속도를 판단하여 전방 제어 범위에서 단계별로 대형 파일을 요청하는 라이브러리를 작성하려고 했습니다.이 동동 나는 지금 한 줄의 코드도 아직 쓰지 않았는데, 갑자기 이 수요의 사고방식이 좀 실제적이지 않다는 것을 발견한 것 외에 또 다른 원인은 내가 갑자기 자신에게 물었기 때문이다. 전단에서 인터넷 속도를 어떻게 판단해야 하는가??!
전단 판단 네트워크 속도의 원리 총결
(주: 아래 구할 네트워크 속도 단위는 기본적으로 KB/S) 관련 자료를 보면 다음과 같은 몇 가지로 나눌 수 있습니다.
1. img를 통해 Ajax 요청을 로드하거나 실행하여 네트워크 속도를 계산합니다.
서비스 측과 같은 도메인의 파일, 예를 들어 그림 등을 요청함으로써 전방에서 요청을 시작하고 응답을 받는 두 시점은 각각 Date를 통과합니다.now는 날짜 때문에 start와 end를 표시합니다.now는 1970년 1월 1일(UTC)에서 현재 시간이 지나간 밀리초의 수를 나타낸다. 그래서 우리는 end-start를 통해 시간차(ms)를 구하고 계산을 통해
파일 크기(KB)* 1000/(end -start)
네트워크 속도를 계산할 수 있습니다(KB/S).
요청 파일은 img로 로드하거나 AJAX로 로드하는 두 가지 방법이 있습니다.
2.window.navigator.connection.downlink 네트워크 속도 조회
우리는 또한 일부 H5의 선진 API를 통해 실현할 수 있다. 예를 들어 여기서 우리가 사용할 수 있는 것은 윈도우이다.navigator.connection.downlink에서 조회를 합니다. 그러나 알다시피 이런 API는 모두 덕성, 즉 흔히 말하는 호환성 문제입니다. 그래서 우리는 일반적으로 예비 수단으로 능력 검사를 통해 사용할 수 있으면 사용하고 사용할 수 없으면 다른 방법을 통과합니다.그리고 downlink의 단위는 mbps이고 KB/S로 바뀌는 공식은
navigator.connection.downlink * 1024/8
1024를 타면 이해할 수 있는데 왜 뒤에 8을 빼야 합니까?이것은 mbps의 b는bit(비트)를 가리키고, KB/s의 B는Byte(바이트), 1바이트(b)=8비트(bit)를 가리키기 때문에 8개를 제외해야 한다
3. 일반적으로 요청 파일을 통해 네트워크 속도를 측정한다
한 번에 오차가 있을 수 있기 때문에 우리는 여러 번 요청하고 균일치를 계산할 수 있다.
전단에서 네트워크 속도를 판단하는 방법과 그 장단점
img 로드 속도 측정
function getSpeedWithImg(imgUrl, fileSize) {
return new Promise((resolve, reject) => {
let start = null;
let end = null;
let img = document.createElement('img');
start = new Date().getTime();
img.onload = function (e) {
end = new Date().getTime();
const speed = fileSize * 1000 / (end - start)
resolve(speed);
}
img.src = imgUrl;
}).catch(err => { throw err });
}
Ajax 속도 측정
function getSpeedWithAjax(url) {
return new Promise((resolve, reject) => {
let start = null;
let end = null;
start = new Date().getTime();
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
end = new Date().getTime();
const size = xhr.getResponseHeader('Content-Length') / 1024;
const speed = size * 1000 / (end - start)
resolve(speed);
}
}
xhr.open('GET', url);
xhr.send();
}).catch(err => { throw err });
}
downlink 속도 측정
function getSpeedWithDnlink() {
// downlink
const connection = window.navigator.connection;
if (connection && connection.downlink) {
return connection.downlink * 1024 / 8;
}
}
종합 속도 측정
function getNetSpeed(url, times) {
// downlink
const connection = window.navigator.connection;
if (connection && connection.downlink) {
return connection.downlink * 1024 / 8;
}
//
const arr = [];
for (let i = 0; i < times; i++) {
arr.push(getSpeedWithAjax(url));
}
return Promise.all(arr).then(speeds => {
let sum = 0;
speeds.forEach(speed => {
sum += speed;
});
return sum / times;
})
}
이상 코드는 npm 패키지를 보내서 다운로드할 수 있습니다
npm i network-speed-test
사용법
import * from 'network-speed-test';
getSpeedWithImg("https://s2.ax1x.com/2019/08/13/mPJ2iq.jpg", 8.97).then(
speed => {
console.log(speed);
}
)
getSpeedWithAjax('./speed.jpg').then(speed => {
console.log(speed);
});
getNetSpeed('./speed.jpg', 3).then(speed => {
console.log(speed);
});
getSpeedWithDnlink();
npm 패키지 주소
https://www.npmjs.com/package/network-speed-test
Github 주소
https://github.com/penghuwan/network-speed-test
이상은 자바스크립트로 네트워크 속도를 측정하는 방법에 대한 상세한 내용입니다. 자바스크립트로 네트워크 속도를 측정하는 것에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.