Skip to content

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

ChromeIE/EdgeFirefoxSafariOpera
4.010.03.54.011.5

Veb-vorker misoli

Quyidagi misol fonda sonlarni sanaydigan oddiy veb-vorkerni yaratadi:

Misol

js
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:

js
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:

js
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:

js
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:

js
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:

js
w.terminate()

Veb-vorkerni qayta ishlatish

Agar vorker o'zgaruvchisini undefined qilib qo'ysangiz, vorker to'xtatilgandan so'ng kodni qayta ishlatishingiz mumkin:

js
w = undefined

Veb-vorkerlar va DOM

Veb-vorkerlar tashqi fayllarda bo'lganligi sababli, ular quyidagi JavaScript obyektlariga kirish huquqiga ega emas:

  • window obyekti
  • document obyekti
  • parent obyekti