consdata.com
Blog techniczny Blog biznesowy Dział HR
EN
javascript

Czy wiesz, czym jest i jak działa WebWorker?

author Piotr Grobelny
23 lutego 2024

JavaScript, który wywołujemy na naszych stronach w postaci skryptów jest jednowątkowy. Jeżeli zdecydujemy się używać go do wykonywania zasobożernych obliczeń, może spowodować to, że interfejs użytkownika stanie się nieresponsywny.

Z pomocą przychodzą nam webworkery. Jest to natywny mechanizm HTML5 API, który możemy wykorzystać bez żadnych dodatkowych bibliotek. Polega on na oddelegowywaniu operacji do specjalnie utworzonych wątków działających niezależnie od naszej aplikacji.

Aby utworzyć nowy wątek należy stworzyć instancję klasy Worker:

var worker = new Worker('worker.js');

Dane można wysyłać do niego metodą postMessage():

worker.postMessage(dataToSend);

Z kolei sam worker musi nasłuchiwać na dane za pomocą listenera (znajduje się on w skrypcie worker.js przekazanym jako parametr do konstruktora)

self.addEventListener('message', (event) => {
    // obsługa wejścia
});

Worker utworzony w ten sposób zostaje zakończony razem z zamknięciem strony, która powołała go do życia. Możemy również sami go zakończyć za pomocą polecenia:

worker.terminate();

Workery mają pewne ograniczenia:

  • nie mamy dostępu do naszej struktury DOM, ani obiektów window i document,
  • obiekt location jest tylko do odczytu, nie będziemy mogli z poziomu workera przekierowywać strony, ani tworzyć nowej zakładki,
  • worker nie może istnieć sam w oderwaniu od strony, która go utworzyła.

Poniżej kilka typowych przykładów wykorzystania webworkerów:

  • obliczenia w tle: webworkery są wykorzystywane do wykonywania długotrwałych obliczeń w tle, takich jak przetwarzanie dużych zestawów danych czy złożone algorytmy, które mogłyby spowolnić działanie interfejsu użytkownika,
  • manipulacja na multimediach: webworkery są stosowane do manipulacji obrazami, dźwiękiem i wideo w tle. Mogą pomóc w przetwarzaniu, optymalizacji, tworzeniu miniatur czy konwersji formatów,
  • asynchroniczne żądania sieciowe: webworkery pozwalają na wykonywanie asynchronicznych żądań sieciowych, takich jak pobieranie danych z serwera czy przetwarzanie odpowiedzi HTTP,
  • WebAssembly: webworkery są również używane w połączeniu z WebAssembly, umożliwiając wykonywanie bardziej zaawansowanych obliczeń, które są zoptymalizowane pod kątem wydajności.

Przydatne linki

  • Can I use dla Web Workers: https://caniuse.com/webworkers
  • Dokumentacja na MDN: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API?retiredLocale=pl
Najnowsze wpisy

  • Dostępność w PDF - dokumenty bez barier
  • Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?
  • Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

newsletter

techniczny

Zapisz się

Podobne wpisy

post-image
WCAG

Dostępność w PDF - dokumenty bez barier

author
Kacper Hoffman 28 kwi 2025
post-image
angular

Czy wiesz, że z pomocą @starting-style można animować elementy z display: none za pomocą samego CSS?

author
Piotr Tatarski 7 kwi 2025
post-image
angular

Czy wiesz, że w Angular 17 została wprowadzona alternatywa dla *ngSwitch?

author
Dorian Mejer 10 mar 2025
Dołącz do nas

  • SENIOR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 14 900 - 20 590 PLN brutto
    B2B 19 680 - 27 220 PLN netto
  • REGULAR FULLSTACK DEVELOPER (JAVA + ANGULAR) Poznań (hybrydowo) lub zdalnie UoP 11 300 - 15 900 PLN brutto
    B2B 14 950 - 21 000 PLN netto
  • ZOBACZ WSZYSTKIE OGŁOSZENIA

Zapisz się na

newsletter

techniczny

consdata.com
  • Kontakt

    • sales@consdata.com
    • +48 61 41 51 000

  • Biuro

    • K9Office
      Krysiewicza 9/14
      61-825 Poznań
      Polska

  • Rozwiązania

    • Eximee
    • Kouncil
  • Blog Dołącz do nas
Copyright © 2024 Consdata. All rights reserved. Privacy Policy & Cookies
Chcemy używać plików cookie oraz skryptów podmiotów trzecich do polepszania funkcjonowania tej strony Zgadzam się