Web Workers. JavaScript-da Parallel Hisoblash
Web Workers haqida batafsil qo'llanma, ularning ishlashi, afzalliklari, cheklovlari va amaliy misollari bilan
So'nggi yangilanish: 2025-01-05Hozir Web Workers haqida batafsil o'rganamiz. Web Workers - bu JavaScript-da parallel hisoblashlarni amalga oshirish imkonini beruvchi kuchli texnologiyadir.
Web Workers Nima?
Web Workers - bu asosiy JavaScript oqimidan alohida fonda ishlaydigan skriptlardir. Ular JavaScript-ning bir oqimli tabiatini chetlab o'tish va parallel ravishda kod bajarish imkonini beradi.
Asosiy Xususiyatlari:
- Parallel bajarilish
- Asosiy oqimni bloklash xavfisiz
- Xabarlar orqali aloqa
- Alohida global kontekst
Web Workers Qanday Ishlaydi?
Web Workers asosiy JavaScript oqimidan alohida ishlaydi va u bilan xabarlar orqali aloqa qiladi.
Asosiy Oqimda:
const worker = new Worker('worker.js');
worker.postMessage('Salom, Worker!');
worker.onmessage = function(event) {
console.log('Workerdan xabar:', event.data);
};
Worker Faylida (worker.js):
self.onmessage = function(event) {
console.log('Asosiy skriptdan xabar:', event.data);
// Ba'zi hisob-kitoblar
const natija = 42;
self.postMessage(natija);
};
Web Workers-ning Afzalliklari
- Samaradorlik: Og'ir hisob-kitoblarni asosiy oqimni bloklash xavfisiz bajarish mumkin.
- Yaxshilangan Foydalanuvchi Tajribasi: UI oqimi uzluksiz qoladi.
- Resurslardan Samarali Foydalanish: Ko'p yadroli protsessorlardan foydalanish imkoniyati.
- Modullilik: Murakkab vazifalarni alohida worker-larga bo'lish mumkin.
Web Workers-ning Cheklovlari
- DOM-ga kirish yo'q
- Window obyektiga to'liq kirish yo'q
- Cheklangan API-lar to'plami
- Alohida global kontekst
Amaliy Misol: Fibonacci Sonlarini Hisoblash
Keling, Fibonacci sonlarini hisoblash uchun Web Worker-dan foydalanamiz.
Asosiy Fayl (main.js):
const worker = new Worker('fibonacci-worker.js');
document.getElementById('hisobla').addEventListener('click', function() {
const n = document.getElementById('son').value;
worker.postMessage(parseInt(n));
});
worker.onmessage = function(event) {
document.getElementById('natija').textContent = `Fibonacci(${event.data.n}) = ${event.data.natija}`;
};
Worker Fayli (fibonacci-worker.js):
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
self.onmessage = function(event) {
const n = event.data;
const natija = fibonacci(n);
self.postMessage({ n: n, natija: natija });
};
HTML Fayli:
<!DOCTYPE html>
<html lang="uz">
<head>
<meta charset="UTF-8">
<title>Fibonacci Hisoblagich</title>
</head>
<body>
<h1>Fibonacci Hisoblagich</h1>
<input type="number" id="son" min="0" value="10">
<button id="hisobla">Hisobla</button>
<p id="natija"></p>
<script src="main.js"></script>
</body>
</html>
Bu misolda, og'ir Fibonacci hisob-kitoblari worker-da amalga oshiriladi, shuning uchun asosiy oqim bloklanmaydi va UI sezgir qoladi.
Web Workers Turlari
- Oddiy Workers: Yuqorida ko'rib chiqqan asosiy tur.
- Shared Workers: Bir nechta oyna yoki tab-lar o'rtasida ulashilishi mumkin.
- Service Workers: Oflayn ishlash va push-bildirishnomalar uchun foydalaniladi.
Xavfsizlik Mulohazalari
- Workers faqat xavfsiz kontekstda (HTTPS yoki localhost) ishlaydi.
- Cross-origin cheklovlar qo'llaniladi.
- Workers-da eval() dan foydalanish xavfli bo'lishi mumkin.
Tez-tez So'raladigan Savollar (FAQ)
- Savol: Web Workers barcha brauzerlar tomonidan qo'llab-quvvatlanadimi? Javob: Ko'pchilik zamonaviy brauzerlar Web Workers-ni qo'llab-quvvatlaydi, lekin eski versiyalarda muammolar bo'lishi mumkin.
- Savol: Worker-da DOM-ni o'zgartirish mumkinmi? Javob: Yo'q, worker-lar DOM-ga to'g'ridan-to'g'ri kira olmaydi. Barcha DOM o'zgarishlari asosiy oqimda amalga oshirilishi kerak.
- Savol: Worker-lar qancha xotira ishlatadi? Javob: Bu brauzerga bog'liq, lekin odatda har bir worker uchun 5-10 MB atrofida.
- Savol: Worker-lar orasida ma'lumot almashish mumkinmi? Javob: To'g'ridan-to'g'ri emas. Worker-lar o'rtasidagi aloqa asosiy oqim orqali amalga oshirilishi kerak.
- Savol: Worker-da import yoki require ishlatish mumkinmi? Javob: ES6 modul worker-lari importScript() yordamida skriptlarni yuklashi mumkin, lekin Node.js-ning require tizimi qo'llab-quvvatlanmaydi.
- Savol: Worker-lar mobil qurilmalarda qanday ishlaydi? Javob: Ko'pchilik zamonaviy mobil brauzerlar worker-larni qo'llab-quvvatlaydi, lekin resurs cheklovlari tufayli samaradorlik farq qilishi mumkin.
- Savol: Worker-larni test qilishning eng yaxshi usuli qanday? Javob: Jest kabi test freymvorklari worker-larni simulyatsiya qilish uchun mock-obyektlardan foydalanishi mumkin. Shuningdek, end-to-end testlar uchun Selenium yoki Puppeteer-dan foydalanish mumkin.
- Savol: Worker-lar bilan ishlashda qanday umumiy xatolar uchraydi? Javob: Eng keng tarqalgan xatolar - bu DOM-ga kirishga urinish, katta hajmdagi ma'lumotlarni uzatish va worker hayot tsiklini noto'g'ri boshqarish.
Xulosa
Web Workers - bu JavaScript-da parallel hisoblashlarni amalga oshirish uchun kuchli vosita. Ular murakkab hisob-kitoblarni asosiy oqimni bloklash xavfisiz bajarish imkonini beradi, bu esa ilovangizning samaradorligi va foydalanuvchi tajribasini sezilarli darajada yaxshilaydi. Lekin, ularning cheklovlarini tushunish va to'g'ri foydalanish muhimdir.
Web Workers-dan foydalanishda muvaffaqiyat tilayman va ilovalaringiz yanada samarali bo'lsin!