Asynchrones JavaScript: Wie die Event-Loop asynchronen Code im Browser erlaubt

In der Regel läuft der Code von Webseiten in nur einem Thread, modernen Multicore-Prozessoren zum Trotz. Ein Programmiermodell erlaubt "asynchronen" Code.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 20 Kommentare lesen
, Bild: Thorsten Hübner

(Bild: Thorsten Hübner)

Lesezeit: 14 Min.
Von
  • Lars Hupel
Inhaltsverzeichnis

Diese Webseite verlangsamt Ihren Browser – so oder so ähnlich vermelden es Chrome, Firefox & Co., wenn ein Skript zu viel Rechenzeit benötigt und dadurch der ganze Tab (früher der ganze Browser) ins Stocken gerät. Der Grund hierfür ist schnell erklärt: Noch genau wie damals, als JavaScript im Netscape Navigator das Licht der Welt erblickte, teilt sich der JavaScript-Code die Ausführungszeit in einem Tab mit dem Rendering und der Ereignisbehandlung. Daraus folgt unter anderem, dass keine Klicks oder Tastatureingaben verarbeitet werden, solange eine JavaScript-Funktion rödelt.

Mehr zu JavaScript und Projekten:

In Zeiten, in denen selbst billige Smartphones vier oder mehr Kerne haben, mag das überraschen. Warum verteilen sich JavaScript- und Browser-Code nicht schon längst auf diverse Threads? Und wenn sie es nicht tun, warum frieren Browser nicht viel häufiger ein? Moderne Websites lassen allerhand Skripte laufen, bei guter Programmierung lahmt der Browser trotzdem nicht – und bei schlechter Programmierung helfen auch mehr Kerne nicht.

Denn mehr Kerne bieten nur dann mehr Performance, wenn die Rechenleistung auch abgerufen werden kann. Die allermeisten Webseiten sind nicht CPU-intensiv, sondern I/O-intensiv. Das heißt, die Recheneinheiten langweilen sich, während die Seite auf Antwort vom Server, Interaktionen des Nutzers oder Daten von der Webcam wartet.