Vad är Web workers (och trådar)?

Vad är Web workers (och trådar)?

Web workers är ingenting nytt. Det är en teknik för att isolera kod i bakgrunden – utan att blockera annan kod. Detta kan avsevärt öka prestandan – om tekniken används korrekt. ?

Bakgrund
Ecmascript körs vanligtvis i en “Javascrip Engine” – Chrome V8.
Som standard körs V8 i en enskild tråd. Problemet med singel-trådning är att om en del av koden tar lång tid att köra så blockeras efterföljande kod – detta kallas “blocking”. ? För att undvika “blocking” behöver ett program ha flera trådar (multi-threaded).En förutsättning för att flera trådar skall fungera är något som kallas “execution context” – ett krångligt ord för en typ av referens.

Tänk dig att du läser en bok och lägger ifrån dig boken. Referensen fungerar som en post-it med boktitel, sida och rad där du skall fortsätta läsa nästa gång du tar upp boken.

Processorn skapar illusionen av att hantera flera saker samtidigt genom att lägga lite tid på varje uppgift i taget – detta är möjligt tack vare att varje uppgift har ett “execution context”. Precis som att du kan dela en bok med en vän så kan olika kod dela på processorn – det är det som är fler-trådning (multi-threading) – som löser problemet med “blocking”. För att stödja multi-trådning i front-end skapades Web workers.

Web workers
Web Workers förväntas ha lång körtid, vara ganska krävande, ta relativt mycket prestanda under uppstart och ta upp arbetsminne. De är därför endast avsedda att skapas i begränsat antal för speciella uppgifter. En ny Web worker skapar nya trådar i operativsystemet vilket påverkar användarens hela dator – inte bara webbläsaren.

Web workers ska med andra ord användas ansvarsfullt och stängas när de är klara för att frigöra systemresurser.

Eftersom web workers är isolerade från huvudprogrammet så använder de sig av ett “messaging system” för att ta emot data och skicka tillbaka resultat. Huvudapplikationen är ansvarig för att uppdatera gränssnittet – som vanligt.

Begränsningar med Web workers

  • Alla web workers måste köras från samma domän
  • Web workers har ingen direkt åtkomst till DOM och det globala document-objektet
  • Window-objektet exponerar bara ett begränsat API – exempelvis objekten location, navigator, XMLHttpRequest
  • Begränsad lokal access – kan exempelvis inte arbeta med lokala filer


En annan sorts web worker ?