consdata.com
Technical blog Business blog HR department
PL
javascript

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

author Piotr Grobelny
23 February 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
Newest posts

  • Reliable event delivery in Apache Kafka based on retry and DLQ
  • Event Tracking - finding a needle in a haystack
  • Kouncil - a modern Kafka frontend
Join us

  • 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

technical

newsletter

Sign up

Podobne wpisy

post-image
kouncil

Reliable event delivery in Apache Kafka based on retry and DLQ

Why is there no DLQ in Kafka? Most popular queueing systems such as RabbitMQ or ActiveMQ have built-in systems responsible for reliable message delivery. So why doesn't Kafka offer one?...

author
Jacek Grobelny 13 Sep 2021
post-image
kouncil

Event Tracking - finding a needle in a haystack

Event tracking allows for tracking and visualising the path of a given event or process through Kafka topics.

author
Marcin Mergo 8 Sep 2021
post-image
kouncil

Kouncil - a modern Kafka frontend

Kouncil is a modern Kafka frontend equipped with features essential for developers.

author
Jacek Grobelny 30 Aug 2021
Join us

  • 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

Sign up for a

technical

newsletter

consdata.com
  • Contact

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

  • Office

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

  • Solutions

    • Eximee
    • Kouncil
  • Blog Join us
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ę