feat: Optimized variable loading and storage in IndexedDB and localStorage

- Added parallel saving of required variables to both IndexedDB and localStorage using Promise.all for improved performance.
- Implemented a recursive check for missing variables with a retry mechanism for reliable loading.
- Enhanced error handling for script loading and storage processes.
- Streamlined loading scripts sequentially and storing in IndexedDB and localStorage upon successful loading.
This commit is contained in:
ISA
2024-10-30 08:04:33 +01:00
parent d151a3d1df
commit cbfd865323

View File

@@ -54,6 +54,38 @@ export async function loadWindowVariables() {
});
};
const saveToIndexedDB = async (key, value) => {
const request = indexedDB.open("CPLDatabase", 1);
request.onupgradeneeded = () => {
const db = request.result;
if (!db.objectStoreNames.contains("cplVariables")) {
db.createObjectStore("cplVariables");
}
};
return new Promise((resolve, reject) => {
request.onsuccess = () => {
const db = request.result;
const tx = db.transaction("cplVariables", "readwrite");
const store = tx.objectStore("cplVariables");
store.put(value, key);
tx.oncomplete = resolve;
tx.onerror = reject;
};
request.onerror = reject;
});
};
const saveVariables = async () => {
const savePromises = requiredVars.map(async (variable) => {
if (window[variable] !== undefined) {
localStorage.setItem(variable, window[variable]);
await saveToIndexedDB(variable, window[variable]);
}
});
await Promise.all(savePromises);
};
const scripts = ["de.js", "kueData.js", "Start.js", "System.js"];
// Lade die Skripte nacheinander
@@ -61,7 +93,7 @@ export async function loadWindowVariables() {
.reduce((promise, script) => {
return promise.then(() => loadScript(script));
}, Promise.resolve())
.then(() => {
.then(async () => {
const checkVariables = () => {
const missingVars = requiredVars.filter(
(variable) => window[variable] === undefined
@@ -69,13 +101,11 @@ export async function loadWindowVariables() {
return missingVars;
};
// Einmalige Überprüfung nach dem Laden aller Skripte
const initialMissingVars = checkVariables();
if (initialMissingVars.length === 0) {
console.log(
"Alle Variablen von CPL geladen. in loadWindowVariables.js"
);
console.log("Alle Variablen von CPL geladen.");
await saveVariables();
resolve();
} else {
console.log(
@@ -83,15 +113,15 @@ export async function loadWindowVariables() {
initialMissingVars
);
// Falls Variablen fehlen, starte ein Intervall zur wiederholten Überprüfung
const maxChecks = 10;
let checkCount = 0;
const checkInterval = setInterval(() => {
const checkInterval = setInterval(async () => {
const remainingMissingVars = checkVariables();
if (remainingMissingVars.length === 0) {
clearInterval(checkInterval);
console.log("Alle fehlenden Systemvariablen sind jetzt geladen.");
await saveVariables();
resolve();
} else if (checkCount >= maxChecks) {
clearInterval(checkInterval);