Optimierung des Aufbaus von HTML-Dokumenten

Der Auf­bau eines HTML-Doku­mentes erfordert eine seman­tis­che Struk­turierung der Ele­mente. Eine Ver­schachtelung von <div>-Elementen zur Gestal­tung gilt es zu ver­mei­den. Diese lassen sich durch HTM­L5-Ele­mente mit seman­tis­ch­er Bedeu­tung erset­zen [Hog15]. Nicht ver­wen­dete Ele­mente, Kom­mentare oder Inlinestyles bieten dem Brows­er bei der Inter­pre­ta­tion des Doku­mentes keinen Vorteil und erhöhen die Dateigröße. Die Basis für gute Stylesheets ist eine durch­dachte Struk­tur mit ein­er Ver­gabe von sin­nvollen und kurzen Beze­ich­nun­gen für Klassen und IDs [Hog15].

Syn­tak­tis­che und struk­turelle Fehler, die sich neg­a­tiv auf die Ladezeit auswirken, lassen sich durch eine Vali­dierung des HTML und CSS-Quell­codes ver­hin­dern. Dazu kann die Ein­hal­tung der W3C Web-Stan­dards durch die Web-Dien­ste W3C Markup Val­i­da­tion Ser­vice und W3C CSS Val­i­da­tion Ser­vice über­prüft wer­den [Ber15].Die Ver­wen­dung von <iframe>-Elementen führt zu ein­er Block­ierung des Ren­der­ings im Brows­er und erhöht dadurch die Ladezeit der gesamten Web­seite. Das Smash­ing Mag­a­zine hat dies in einem Ver­such nachgewiesen und kon­nte eine Ver­längerung der Ladezeit um 0,20 Sekun­den fest­stellen [Joh14]. Um dies zu ver­hin­dern emp­fiehlt Steve Soud­ers, die Inhalte eines <iframe>-Elementes per JavaScript einzu­binden und dieses asyn­chron, wie in Kapi­tel 3.6.3 beschrieben, nachzu­laden [Sou09].

Einbindung externer Ressourcen

Die Ein­bindung extern­er Ressourcen im Quell­code des HTML-Doku­ments hat Ein­fluss auf die Dauer der Darstel­lung ein­er Web­seite im Brows­er. Nach dem Herun­ter­laden des HTML-Doku­mentes wer­den die Ressourcen anhand ihrer Posi­tion­ierung im Quell­code ange­fordert. Sowohl Stylesheets als auch JavaScripts block­ieren das Ren­der­ing ein­er Web­seite im Brows­er. Der Brows­er wartet mit der Darstel­lung bis das Stylesheet voll­ständig geladen wurde und zeigt bis dahin eine leere Web­seite an [WH15]. Aus diesem Grund wird emp­fohlen CSS-Dateien als Erstes in dem <head>-Element des Quell­codes ein­er Web­seite anzugeben [Sou07]. Das Stylesheet wird vom Brows­er direkt nach dem Herun­ter­laden des HTML-Doku­mentes ange­fordert und es find­et ein pro­gres­siv­er Auf­bau der Web­seite statt. Durch die schnellere Darstel­lung der Web­seite wird bei dem Nutzer der Ein­druck erweckt, dass die Web­seite bere­its fer­tig geladen wurde. Es lässt sich somit die wahrgenommene Per­for­mance der Web­seite verbessern, auch wenn zu diesem Zeit­punkt nicht alle Ressourcen voll­ständig geladen wur­den [Sou07].

Abbil­dung 3.5: Block­ierung des Ren­der­ings im Brows­er durch das Laden ein­er JavaScript-Datei

Wird hinge­gen ein JavaScript am Anfang des HTML-Doku­mentes einge­bun­den, führt dies zu ein­er Ver­schlechterung der vom Nutzer wahrgenomme­nen Per­for­mance, wie die Abbil­dung 3.5 zeigt. Der Brows­er unter­bricht das Ren­der­ing der Web­seite, bis die Datei voll­ständig über­tra­gen wurde [WH15]. Dieses Ver­hal­ten kann durch die Ein­bindung der JavaScript-Datei am Ende des HTML-Doku­mentes, vor dem abschließen­den <body>-Element, umgan­gen wer­den, sofern dies keine Beein­träch­ti­gung der Funk­tion­al­ität des Skriptes darstellt [Sou07]. Dadurch lässt sich, neben einem pro­gres­siv­en Ren­der­ing und par­al­le­len Down­loads, ein schnelleres Laden rel­e­van­ter Ressourcen für die Darstel­lung der Web­seite erre­ichen [Sou07].Die Ein­bindung von Social Media But­tons über vorge­fer­tigte Skripte extern­er Anbi­eter stellt die Per­for­manceop­ti­mierung vor eine Her­aus­forderung. Nur sel­ten kön­nen diese am Ende des HTML-Doku­mentes inte­gri­ert und asyn­chron geladen wer­den. Daher ist zu über­prüfen, ob sich die Inte­gra­tion durch eine Ver­linkung real­isieren lässt, um die Anzahl von HTTP-Anfra­gen zu reduzieren und die Ladezeit, durch die Ver­mei­dung zusät­zlich­er DNS-Lookups, zu ver­ringern [CIW15].

Verteilung statischer Ressourcen auf mehrere Domains

Die Begren­zung der max­i­malen Anzahl par­al­lel­er Verbindun­gen seit­ens des Browsers gilt pro Domain. Durch die Ver­wen­dung sep­a­rater Domains zur Aus­liefer­ung sta­tis­ch­er Ressourcen lässt sich diese Anzahl erhöhen und die Ladezeit der Web­seite reduzieren [WH15]. Gle­ichzeit­ig ist es möglich auf das Set­zen von nicht erforder­lichen Cook­ies für Bilder, Stylesheets und JavaScripts zu verzicht­en [KR13]. Es ist uner­he­blich, ob die Ressourcen der Domains über den gle­ichen Web­serv­er oder über ein CDN aus­geliefert wer­den [Sou09]. Chris­t­ian Wenz emp­fiehlt die Nutzung von zwei bis max­i­mal vier ver­schiede­nen Domains, auf­grund der erforder­lichen Zeit für die Durch­führung von zusät­zlichen DNS-Lookups [WH15]. Steve Soud­ers gibt zu bedenken, dass eine zu hohe Anzahl par­al­lel­er Verbindun­gen, durch die Ver­wen­dung mehrerer Domains und mod­ern­er Brows­er, eine Über­las­tung des Web­servers begün­sti­gen kann [Sou09].

Bei dem Laden von Ressourcen ein­er exter­nen Domain lässt sich eine Verbesserung der Zeit für den DNS-Lookup mit der Angabe dns-prefetch in dem HTML-Attrib­ut rel erzie­len. Mit dieser Angabe wird der Brows­er aufge­fordert den angegebe­nen Domain­na­men zur IP-Adresse aufzulösen anstatt zu warten, bis in dem HTML-Quell­code eine Ressource über die Domain ange­fordert wird [CIW15]. Die Angabe wird auss­chließlich von mod­er­nen Browsern unter­stützt und erfol­gt inner­halb des <head>-Elements der HTML-Datei, wie anhand des fol­gen­den Quell­codes gezeigt wird.

<link href=“//ajax.googleapis.com“ rel=“dns-prefetch“ />

Diese Vorge­hensweise ist bei der Ver­wen­dung extern­er Links, mehrerer Domains oder eines Con­tent Deliv­ery Net­work sin­nvoll und kann die Ladezeit der gesamten Web­seite beschle­u­ni­gen [CIW15]. Darüber hin­aus lassen sich durch dns-prefetch Ressourcen für eine Web­seite vor­laden, die mit hoher Wahrschein­lichkeit im Anschluss durch den Nutzer aufgerufen wird, beispiel­sweise bei mehrteili­gen Artikeln eines Blogs [Skv14].