Feat: Find closest bare server in prod instances

This commit is contained in:
rift 2024-01-05 22:27:22 -06:00
parent cc429fd8cb
commit 9c06cb2962
2 changed files with 65 additions and 0 deletions

View file

@ -1,14 +1,76 @@
import { useState } from "preact/hooks"; import { useState } from "preact/hooks";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { HeaderRoute } from "../components/HeaderRoute"; import { HeaderRoute } from "../components/HeaderRoute";
import { set } from "../util/IDB";
import { uninstallServiceWorkers } from "../util/SWHelper";
import prod from "./config.json"; // Set prod to true if you wish to load balance
import { enc } from "../aes"; import { enc } from "../aes";
import CloakedHead from "../util/CloakedHead"; import CloakedHead from "../util/CloakedHead";
import { useEffect } from "preact/hooks";
export function Home() { export function Home() {
const [isFocused, setIsFocused] = useState(false); const [isFocused, setIsFocused] = useState(false);
const [showSuggestions, setShowSuggestions] = useState(false); const [showSuggestions, setShowSuggestions] = useState(false);
const [inputValue, setInputValue] = useState(""); const [inputValue, setInputValue] = useState("");
const [suggestions, setSuggestions] = useState([]); const [suggestions, setSuggestions] = useState([]);
useEffect(() => {
const handleLoad = () => {
const firstLoad = localStorage.getItem("firstLoad") || "true";
console.log(firstLoad);
if (firstLoad == "true" && prod) {
function changeBare(url: string) {
set("bare", url);
localStorage.setItem("bare", url);
uninstallServiceWorkers();
window.location.reload();
}
async function test() {
const nonProtocolOrigin = window.location.origin.replace(
/^https?:\/\//,
""
);
// Do Tokyo-US pinging to find optimal server
const ping = async (url: string) => {
let start = Date.now();
await fetch(url);
let end = Date.now();
let total = end - start;
return total;
};
const usUrl = "https://us." + nonProtocolOrigin;
const jpUrl = "https://jp." + nonProtocolOrigin;
console.log(usUrl, jpUrl)
const [usTime, jpTime] = await Promise.all([
ping(usUrl),
ping(jpUrl)
]);
if (usTime < jpTime) {
console.log("US faster");
changeBare(usUrl);
} else {
console.log("Japan faster");
changeBare(jpUrl);
}
localStorage.setItem("firstLoad", "false");
}
test();
}
};
window.addEventListener("load", handleLoad);
return () => window.removeEventListener("load", handleLoad);
}, []);
const { t } = useTranslation(); const { t } = useTranslation();
const handleInputChange = async (event) => { const handleInputChange = async (event) => {

3
src/pages/config.json Normal file
View file

@ -0,0 +1,3 @@
{
"prod": false
}