|
@@ -1,38 +1,36 @@
|
|
|
const IMAGE_URL = `${process.env.REACT_APP_SOCKET_SERVER_URL}/test256.png`;
|
|
|
const IMAGE_SIZE_BYTES = 141978;
|
|
|
|
|
|
-const calculateSpeed = (startTime: number, endTime: number) => {
|
|
|
+const getSpeed = (
|
|
|
+ imageSize: number,
|
|
|
+ startTime: number,
|
|
|
+ endTime: number,
|
|
|
+): number => {
|
|
|
const duration = (endTime - startTime) / 1000;
|
|
|
- const imageSizeInBits = IMAGE_SIZE_BYTES * 8;
|
|
|
- let speed = imageSizeInBits / duration;
|
|
|
- // source: en.wikipedia.org/wiki/Data-rate_units#Conversion_table
|
|
|
- const suffix = ["B/s", "kB/s", "MB/s", "GB/s"];
|
|
|
- let index = 0;
|
|
|
- while (speed > 1000) {
|
|
|
- index++;
|
|
|
- speed = speed / 1000;
|
|
|
+ if (duration > 0) {
|
|
|
+ return imageSize / duration;
|
|
|
}
|
|
|
- return `${speed.toFixed(index > 1 ? 1 : 0)} ${suffix[index]}`;
|
|
|
+ return 0;
|
|
|
};
|
|
|
|
|
|
-const processImage = (): Promise<string> => {
|
|
|
+const processImage = (): Promise<number> => {
|
|
|
return new Promise((resolve) => {
|
|
|
const image = new Image();
|
|
|
let endTime: number;
|
|
|
image.onload = () => {
|
|
|
endTime = new Date().getTime();
|
|
|
- const speed = calculateSpeed(startTime, endTime);
|
|
|
+ const speed = getSpeed(IMAGE_SIZE_BYTES, startTime, endTime);
|
|
|
resolve(speed);
|
|
|
};
|
|
|
|
|
|
image.onerror = () => {
|
|
|
- resolve("-1");
|
|
|
+ resolve(-1);
|
|
|
};
|
|
|
|
|
|
const startTime = new Date().getTime();
|
|
|
image.src = `${IMAGE_URL}?t=${startTime}`;
|
|
|
});
|
|
|
};
|
|
|
-export const getNetworkSpeed = async (): Promise<string> => {
|
|
|
+export const getNetworkSpeed = async (): Promise<number> => {
|
|
|
return await processImage();
|
|
|
};
|