Web Workers API
Veb-vorker (web worker) — bu sahifaning ishlashiga (performance) ta'sir qilmasdan fonda (background) ishlaydigan JavaScript-dir.
Veb-vorker nima?
HTML sahifasida skriptlar bajarilganda, skript tugamaguncha sahifa javob bermay qolishi mumkin. Veb-vorker — bu boshqa skriptlardan mustaqil ravishda, sahifaning ishlashiga ta'sir qilmasdan fonda ishlaydigan JavaScript. Veb-vorker fonda ishlayotgan vaqtda siz xohlagan ishni davom ettirishingiz mumkin: tugmalarni bosish, narsalarni tanlash va hokazo.
Brauzer yordami
| Chrome | IE/Edge | Firefox | Safari | Opera |
|---|---|---|---|---|
| 4.0 | 10.0 | 3.5 | 4.0 | 11.5 |
Veb-vorker misoli
Quyidagi misol fonda sonlarni sanaydigan oddiy veb-vorkerni yaratadi:
Misol
let w
function startWorker() {
if (typeof Worker !== 'undefined') {
if (typeof w == 'undefined') {
w = new Worker('demo_workers.js')
}
w.onmessage = function (event) {
document.getElementById('result').innerHTML = event.data
}
} else {
document.getElementById('result').innerHTML =
"Kechirasiz, brauzeringiz Veb-vorkerlarni qo'llab-quvvatlamaydi..."
}
}
function stopWorker() {
w.terminate()
w = undefined
}Veb-vorker yordamini tekshirish
Veb-vorkerni yaratishdan oldin, foydalanuvchi brauzeri uni qo'llab-quvvatlashini tekshiring:
if (typeof Worker !== 'undefined') {
// Ha! Veb-vorker qo'llab-quvvatlanadi!
} else {
// Kechirasiz! Veb-vorker qo'llab-quvvatlanmaydi..
}Veb-vorker faylini yaratish
Endi tashqi JavaScript faylida veb-vorkerimizni yaratamiz. Bu yerda biz sanash skriptini yaratamiz. Skript "demo_workers.js" faylida saqlanadi:
let i = 0
function timedCount() {
i++
postMessage(i)
setTimeout('timedCount()', 500)
}
timedCount()Yuqoridagi kodning muhim qismi — postMessage() metodi bo'lib, u HTML sahifasiga xabar yuborish uchun ishlatiladi.
Eslatma
Odatda veb-vorkerlar bunday oddiy skriptlar uchun emas, balki ko'proq protsessor resursini talab qiladigan (CPU intensive) vazifalar uchun ishlatiladi.
Veb-vorker obyektini yaratish
Veb-vorker fayli tayyor bo'lgach, uni HTML sahifasidan chaqirishimiz kerak. Quyidagi qatorlar vorker allaqachon mavjudligini tekshiradi, agar bo'lmasa — yangi veb-vorker obyektini yaratadi va "demo_workers.js" kodi ishga tushadi:
if (typeof w == 'undefined') {
w = new Worker('demo_workers.js')
}Veb-vorkerga xabar yuborish va undan qabul qilish uchun onmessage hodisa tinglovchisini (event listener) qo'shing:
w.onmessage = function (event) {
document.getElementById('result').innerHTML = event.data
}Veb-vorkerni to'xtatish
Veb-vorker obyekti yaratilgandan so'ng, u to'xtatilgunga qadar (tashqi skript tugaganidan keyin ham) xabarlarni tinglashda davom etadi. Veb-vorkerni to'xtatish va brauzer/kompyuter resurslarini bo'shatish uchun terminate() metodidan foydalaning:
w.terminate()Veb-vorkerni qayta ishlatish
Agar vorker o'zgaruvchisini undefined qilib qo'ysangiz, vorker to'xtatilgandan so'ng kodni qayta ishlatishingiz mumkin:
w = undefinedVeb-vorkerlar va DOM
Veb-vorkerlar tashqi fayllarda bo'lganligi sababli, ular quyidagi JavaScript obyektlariga kirish huquqiga ega emas:
windowobyektidocumentobyektiparentobyekti
