3.07.2024 г.
Логване на информация с Web Workers от Vue 3 към сървъра
Web Workers са малки, но мощни скриптове, които работят на 'заден план' в браузъра. И понеже не пречат на рендирането на приложението Ви, може да ги товарите с разни задачи, които да изпълняват.
Ползвам Web Workers по два начина - В първия не връщат информация обратно към приложението и след свършване на работа се самоунищожават. При втория връщат резултат и тогава приложението се грижи, дали и кога Web Worker-а да се унищожи. Тук ще разгледаме само първия начин на работа, а за втория ще напиша отделна статия.
LOG WORKER
Най-често използвам първия начин на работа Web Workers за логване на информацията от приложението към сървъра, но не само.
Създавам директория, която се казва workers
и в нея създавам файл - в нашия случай LOGS.ts
. Файла винаги е с главни букви, за да го разпознавам лесно при импорта и е с говоримо име. С времето съм възприел, че всеки вид задача, която изпълнява даден Web Worker, трябва да е в отделен файл.
// workers/LOGS.ts
import axios from "axios";
self.onmessage = async (event) => {
const { message, code, type } = event.data;
await axios.post("/api/log", { type: `${message}`, statusCode: code }, { contentType: "text/plain" });
/**
* Log Worker does not return data,
* so we close the worker after the POST request,
* even if there is an error with writing to the server,
* the worker will close.
*/
self.close();
};
За да използвате Web Workers във Вашето приложение, много трябва да внимавате с импорта му. За Vue 3 с Composition API и <script lang='ts' setup>
има специална директива worker
, подобна на query string
в адреса към файла.
import LOGS from "~/workers/LOGS?worker";
Използването е лесно и най-често го извиквам в try-catch
блок, за да запиша грешките на сървъра.
// criticalJob.vue
<script lang='ts' setup>
import LOGS from "~/workers/LOGS?worker";
const doSomeCriticalJob = async (id: string) => {
try {
// await do some critical job
} catch (error) {
const logsWorker = new LOGS();
logsWorker.postMessage({ message: `Critical Job with ID: ${id} got error: ${error}`, code: 500, type: "error" });
}
};
</script>
<template></template>
Ако имате мнение или въпроси за статията, не се колебайте да ги споделите.
Премахване на наклонената черта от адресната линия в Nuxt
Всяка страница във Вашия уеб сайт трябва да е с уникално съдържание. Ако имате втора страница с същото съдържание, то тежестта на информацията за търсачките се разделя между двете и това силно намалява шансовете им за по-ранно показване в резултатите от търсенето.
Electron, TypeScript и Parcel
Документацията на Electron е изцяло за JavaScript, но това не пречи да си използвате TypeScript, с който да генерира този JavaScript. Трябва да се спазват няколко простички правила, и то основно в пътищата на зареждане на файловете. Подготвил съм и малко допълнение за front-end частта. Вместо стандартната за Electron HTML страница ще направя малка компилация с Parcel.