molily: Wann schickt ein Browser ein empfangenes Cookie zurück?

Beitrag lesen

Gerade bei Javascript ist das mit der Parallelität ja relativ klar:

Nein, das ist gar nicht so klar.

Javascript wird seriell geparst,

Du meinst ausgeführt, geparst nicht notwendigerweise.

deshalb werden die Requests - so jedenfalls meine Erwartung - schön nacheinander abgearbeitet. Und zwar das zweite Javascript erst dann, wenn das erste Javascript komplett angefordert und geparst im Speicher des Browsers liegt.

Nein, das eine folgt nicht notwendig auf das andere. Synchrone Ausführung verhindert nicht paralleles Herunterladen.

Aus genau diesem Grund der Serialität von JS-Requests wird ja empfohlen, Javascript aus Performancegründen am SeitenENDE einzubinden, wenn schon das meiste im DOM geladen ist und angezeigt wird, während die spezielle Funktionalität noch am Laden ist.

Jetzt vermischt du einiges. Es sind mehrere Gründe.

Der Hauptgrund ist: Scripts blocken den HTML-Parser. Deshalb sollte man sie am Dokumentende einbinden, weil sonst das Dokument nicht weitergeparst und dargestellt wird, bis alle Scripte am Dokumentanfang (parallel oder nacheinander) heruntergeladen UND (immer nacheinander) ausgeführt sind. Und Scripte brauchen Zeit zur Ausführung.

Also kommen diese Faktoren zusammen und verzögern insgesamt den Seitenaufbau:

  • Scripts blocken den HTML-Parser
  • Scripts werden nicht immer parallel heruntergeladen, v.a. bei älteren Browsern
  • Scripts werden immer nacheinander ausgeführt (async-Attribut außen vor)
  • Die Ausführung benötigt einige Zeit

Die zweite Empfehlung ist, die Anzahl der Javascripte möglichst gering zu halten - aber das Beispiel lässt sich jetzt leider in der Diskussion nicht so drehen, dass man statt zwei Requests nur noch einen hat. ;)

Diese Empfehlung zielt heutzutage nicht mehr alleine darauf ab, dass Scripte nacheinander heruntergeladen werden. Sie zielt in Zeiten von parallelem Downloaden mehr auf die limitierte Zahl der HTTP-Verbindungen und den HTTP-Overhead ab.

Interessant für mich wären Browser auf Mac OS, Safari, Chrome, und gerne auch auf Mobilgeräten wie IPhone und Android (wobei das bei letzteren mit der Debug-Konsole wohl schwierig wird).

Mobile Safari auf iPhone hat eine, auf Android weiß ich gerade nicht, muss ich beizeiten mal nachsehen.

Mathias