Link Prefetching


Link Prefetching bezeichnet den Vorabruf (engl.: to prefetch) von Ressourcen in den Cache-Speicher des Browsers (Client). Die grundsätzliche Annahme beim Linkprefetching lautet: Wenn ein Nutzer eine Website besucht, wird er möglicherweise weitere Ressourcen dieser Website aufrufen. Das Laden dieser Ressourcen kann beschleunigt werden, indem die Website dem Browser Prefetching-Hinweise (engl.: prefetching hints) gibt. Dies erfolgt durch Angaben im Quellcode der Website. Das rel-Attribut wird mit dem Wert "prefetch" entweder im Header oder innerhalb eines Links im Body der Website notiert. Link Prefetching ist vor allem dann sinnvoll, wenn der Website-Betreiber sich relativ sicher ist, dass bestimmte Ressourcen vom Nutzer als nächstes geladen werden. Er muss also das Nutzerverhalten erfassen und auswerten. Andere Bezeichnungen für Link Prefetching sind Prebrowsing und Prerendering.

Allgemeine Informationen zum Thema

Besucht ein Nutzer eine Website, kommunizieren Client und Server im Hintergrund, um den Content möglichst schnell zu laden. Wurde die Website fertig geladen, beginnt die sogenannte Idle Time (deutsch: Leerlaufzeit) des Browsers: Der Browser befindet sich im Leerlauf; er kommuniziert nur mit dem Server, wenn der Nutzer durch Klicks oder Tastenbefehle interagiert. In dieser Zeit kommt das Link Prefetching zum Einsatz. Wurden Ressourcen mit dem prefetch-Wert ausgezeichnet, beginnt der Browser damit, diese in den Zwischenspeicher zu laden. Es können Bilder, CSS-Dateien oder paginierte Websites geladen werden, um einen schnelleren Abruf durch den Client zu ermöglichen.[1]

Das ursprüngliche Konzept des Link Prefetching stammt von Mozilla. Es wurde als Empfehlung für HTML5 beim W3C vorgeschlagen und ist zumindest teilweise bereits implementiert. Ein ähnliches, aber leicht abgewandeltes Konzept wird vom Google Chrome Browser unterstützt. Hier wird von Prerendering gesprochen. Der Internet Explorer hingegen verwendet DNS-Prefetching, Prerendering und Lazy Load, um die Performance zu optimieren. Der Browser Safari von Apple verwendet offenbar keine Prefetching-Mechanismen.[2]

Funktionsweise

Je nach Browser gibt es unterschiedliche Mechanismen, die den Vorabruf von Ressourcen ermöglichen. Das Konzept des Vorabrufes von Daten ist allerdings ähnlich.

  • Link Prefetching: Beim Link Prefetching werden ausschließlich Ressourcen vorab geladen, die mit dem Wert prefetch und dem rel-Attribut ausgezeichnet wurden: "rel="prefetch". Es kann also nur das geladen werden, was mithilfe dieses Attribut-Wert-Paares auch referenziert werden kann. In den meisten Fällen sind das Links zu weiteren Websites, Bildern oder CSS-Dateien. Anzumerken ist, dass lediglich die referenzierte Ressource geladen wird und nicht die Dateien, die mit dieser Ressource in Verbindung stehen. Es werden also keine Skripte, CSS-Dateien oder Frames geladen, die sich auf der vorgeladenen Website befinden. Diese Art von Prefetching wurde ab 2003 nur im Mozilla Firefox verwendet. Mittlerweile unterstützen alle gängigen Browser das eigentliche Link Prefetching.
  • DNS Prefetching: Auch der Vorabruf von Domainnamen ist mit dem Befehl "rel="dns-prefetch""möglich. DNS Prefetching löst einen DNS Server in computerlesbare Zeichen (IP-Adressen) auf, um die Leerlaufzeit des Browsers effektiv zu nutzen. Die obligatorische DNS Auflösung muss dann nicht mehr beim Aufruf einer Website realisiert werden.
  • Prerendering: Prerendering ist wesentlich umfassender als Prefetching. Es werden alle Ressourcen in den Cache geladen, die über den Befehl "rel="prerender"" referenziert wurden. Das beinhaltet auch CSS, JavaScript und sogar das DOM). Prerendering ist mit dem Laden einer Website in einem versteckten Browser-Tab vergleichbar: Die komplette Ressource wird geladen. Dies ist nur sinnvoll, wenn der Website-Betreiber sich zu 100% sicher ist, dass der Nutzer die Website aufruft.
  • Lazy Load: Der Internet Explorer kann Bilder vorab laden, die mit dem Lazy Load Tag ausgezeichnet wurden. Dies erfolgt üblicherweise innerhalb des img-Tags hinter der Quelle, die mit dem src-Tag angegeben wird: "<img src="bild.jpg" lazyload>".[3]
  • Subresources: Für die Browser Chrome und Opera existiert eine Prefetching-Lösung, die bestimmte Ressourcen priorisiert. Mit dem Befehl "rel="subresource"" kann im Header eines HTML-Dokumentes eine Ressource angegeben werden, die unbedingt vom Client geladen werden soll. Zum Beispiel CSS-Dateien, Fonts oder Skripte, die ohnehin benötigt werden. Der Unterschied zum Link Prefetching besteht darin, dass diese Ressourcen geladen werden, auch wenn der Browser sich nicht in der Leerlaufzeit befindet.[4]

Nachteile des Link Prefetching

Das Prefetching von Links verbessert die Performance von Websites im Bereich von Millisekunden. Es hat aber auch einige Nachteile:[5]

  • Link Prefetching kann Auswirkungen auf die Internet-Bandbreite haben, wenn andere Anwendungen diese ebenfalls für sich nutzen. Bei einer Abrechnung via Datenvolumen können Kosten für den Nutzer entstehen, ohne dass dieser sich für das Herunterladen der Daten entschieden hat.
  • Da Link Prefetching standardmäßig in Browsern implementiert ist, berührt das Verfahren Aspekte wie Transparenz und informelle Selbstbestimmung. Denn es gibt keine nutzerfreundliche Möglichkeit, Prefetching abzuschalten – zumindest nicht in der normalen Oberfläche des Mozilla Browsers. Zudem werden unter Umständen Cookies von vorgeladenen Websites im Browsercache hinterlegt, ohne dass der Nutzer diesen explizit zugestimmt hat. Dadurch wird ein späteres Tracking ermöglicht.
  • Prefetching kann dazu führen, dass Statistiken verfälscht werden. Wenn die Prefetch-Befehle nicht vom Analyse-Programm erfasst oder die Logfiles nicht bereinigt werden, zählt der Server oder das Analyse-Programm den virtuellen Zugriff als Besucher.
  • Zu viele Prefetching-Anweisungen können die Server belasten, auf die zugegriffen wird.[6]
  • Es entstehen möglicherweise Sicherheitslücken, da die Prefetch-Hinweise oft auf externe Anbieter verweisen. Das bedeutet, dass andere Websites, die abgerufen wurden, unter Umständen für DDoS-Angriffe instrumentalisiert wurden.

Im Einzelfall sollten Website-Betreiber abwägen, welche Ressourcen sinnvollerweise vorab abgerufen werden und wie viel Leistungsgewinn in Form von Millisekunden sie dadurch gewinnen.

Prefetching abschalten

Serverseitig kann das Prefetching unterbunden werden, indem die Anfrage im Header auf die Zeichenkette „X-moz: prefetch“ hin überprüft wird. Klientseitig kann beim Firefox eine Änderung vorgenommen werden, indem "about:config" in die Adresszeile des Browser eingetippt wird und dort die Einstellungen verändert werden.

Im Benutzerprofil des Browsers können zudem die Präferenzen geändert werden: In der Datei prefs.js kann die Zeile "user_pref("network.prefetch-next", false);" hinzugefügt werden. Mozilla geht davon aus, dass bei Fehlfunktionen des Prefetchers die Implementierung nicht richtig arbeitet. Deshalb gibt es für weniger ambitionierte Nutzer keinerlei Möglichkeiten, Prefetching auf einfache Weise in der Benutzeroberfläche abzuschalten.[7] Beim Google Chrome Browser kann das Prerendering unter erweiterte Einstellungen abgeschaltet werden.

Bedeutung für die Suchmaschinenoptimierung

Die Auswirkungen des Link Prefetching beschränken sich auf den Page Speed, da Prefetch-Befehle üblicherweise von Suchmaschinen nicht als Direktive interpretiert werden. Die Ladezeit einer Website ist zwar ist ein indirektes Rankingsignal, sie kann aber auch durch andere Tricks und Strategien verringert werden (Vgl. Page Speed).[8] Inwiefern sich Prefetching auf die Ladezeit einer Website auswirkt, ist von mehreren Faktoren abhängig. Zum Beispiel von der Frage, welche Ressourcen referenziert werden und wie groß diese Daten sind. Auch die Anzahl der Prefetching-Hinweise auf einer Website dürfte sich bemerkbar machen. Empfehlenswert ist in jedem Fall ein unbedenkliches DNS-Prefetching, da hier lediglich die DNS-Adressen in IP-Adressen aufgelöst werden. Vermutlich nutzt auch die Suchmaschine Google eine Art des DNS Prefetchings, um die SERPs schneller bereitzustellen.[9] Der Einsatz von Link Prefetching sollte dann nur für Einzelfälle, bei denen sich Vorteile für den Nutzer ergeben, in Erwägung gezogen werden.

Einzelnachweise

  1. HTML5 Link Prefetching davidwalsh.name. Abgerufen am 19.10.2015
  2. Prebrowsing stevesouders.com. Abgerufen am 06.10.2015
  3. Link prefetching wikiwand.com. Abgerufen am 06.10.2015
  4. Prefetching, preloading, prebrowsing css-tricks.com. Abgerufen am 06.10.2015
  5. Google, Firefox und Link-Prefetching techtalk.vernetzt.org. Abgerufen am 06.10.2015
  6. HTML5 Link Prefetching (or "The Most Dangerous Tag") cloudspace.com. Abgerufen am 01.03.2017
  7. Link prefetching FAQ developer.mozilla.org. Abgerufen am 06.10.2015
  8. SEO and other impacts of using rel=“dns-prefetch” webmasters.stackexchange.com. Abgerufen am 19.10.2015
  9. DNS Prefetching chromium.org. Abgerufen am 19.10.2015

Weblinks