Middle
Veb işçiləri nədir və onlar nə üçün lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Web işçiləri, istifadəçi interfeysinin əsas axınından ayrılmış fon axınlarında skriptlərin icrası üçün bir yoldur.
Əsas məqsədləri:
- Performansı artırmaq: Resurs tələb edən vəzifələri (mürəkkəb hesablamalar, böyük məlumat həcmlərinin emalı, parsing) əsas axından köçürmək, bu axın interfeysinin çəkilməsini və istifadəçi hadisələrinin işlənməsini təmin edir. Bu, səhifənin donmasını qarşısını alır və tətbiqin cavabvermə qabiliyyətini yaxşılaşdırır.
- Paralelizm: Bir vaxtda bir neçə vəzifənin yerinə yetirilməsinə imkan verir, çox nüvəli prosessorlardan daha səmərəli istifadə etməyə kömək edir.
Web işçilərinin üç növü mövcuddur:
- Dedicated Workers: Müəyyən bir səhifəyə bağlıdır və yalnız ona əlçatandır.
- Shared Workers: Bir neçə səhifə və ya eyni domenin tabları tərəfindən istifadə oluna bilər.
- Service Workers: Şəbəkə proxy kimi işləyir, şəbəkə sorğularını ələ keçirir və offline funksionallıq, push bildirişləri və digər qabaqcıl veb tətbiqlərinin (PWA) imkanlarını həyata keçirməyə imkan verir.
İş prinsipləri:
- Ayrı kontekst: İşçi öz qlobal obyektinə və brauzer API-nin alt toplusuna malikdir (DOM,
window,document,parent-ə giriş yoxdur). - Xəbər mübadiləsi: Əsas axın və işçi arasında qarşılıqlı əlaqə
postMessage()vəonmessagehadisə idarəedicisi vasitəsilə həyata keçirilir. Məlumatlar dəyər (kopyalanmış) və ya istinad (Transferable Objects) vasitəsilə ötürülür.
Dedicated Worker istifadəsinin nümunəsi:
// main.js (əsas axın)
const worker = new Worker('worker.js'); // İşçi yaradılması
worker.onmessage = (event) => {
// İşçidən gələn mesajın işlənməsi
console.log('İşçidən alınan:', event.data);
};
worker.postMessage('Mürəkkəb əməliyyata başla'); // İşçiyə mesaj göndər
// worker.js (işçi faylı)
onmessage = (event) => {
// Əsas axından gələn mesajın işlənməsi
console.log('Əsas axından alınan:', event.data);
// Mürəkkəb vəzifənin yerinə yetirilməsi
let result = 0;
for (let i = 0; i < 1000000000; i++) {
result += i;
}
// Nəticənin geri göndərilməsi
postMessage(result);
};