Die fantastische, aber verwirrende Idee von Resource Hints: (a) synchron?

8

Ich habe die Google-Folien für die so genannte Voroptimierung gelesen. (Für diejenigen interessiert oder für diejenigen, die nicht wissen, was ich rede, diese Folie fasst es zusammen.)

In HTML5 können wir Seiten im Element link vorabholen und vorrendern. Hier eine Übersicht. Wir können die rel Werte verwenden dns-prefetch , subresource , prefetch und prerender .

Die erste verwirrend ist, dass offenbar nur prefetch liegt im die spec für HTML5 ( und 5.1 ), aber keiner der anderen sind. ( Yet! ) Die zweite, dass Browser-Unterstützung ist OK für ( dns- ) prefetch , aber ziemlich schlecht für die anderen. Besonders die mangelnde Unterstützung von Firefox für prerender ist nervig.

Drittens stellt sich die Frage, die ich mir stelle, folgende: Tritt das Prefetching (oder eine andere Methode) auf, sobald der Browser die Zeile liest (und dann die aktuelle Seitenladung blockiert), oder wartet es? mit dem Laden der Ressourcen im Hintergrund, bis die aktuelle Seite vollständig geladen ist?

Wenn es synchron blockierend geladen wird, gibt es eine Möglichkeit, dies asynchron oder nach dem Laden der Seite zu tun? Ich nehme an, mit einer JS-Lösung wie dieser, aber ich bin mir nicht sicher, dass es dann asynchron laufen wird.

%Vor%

Bitte beantworten Sie beide Fragen, falls zutreffend!

EDIT 17. September

Nach dem Lesen durch die Editor Entwurf von Ressourcen Hints ich folgende (Hervorhebung von mir) gefunden:

  

Ressourcenabrufe, die für die nächste Navigation erforderlich sein können   negative Auswirkungen auf die Leistung des aktuellen Navigationskontextes   aufgrund zusätzlicher Konkurrenz für CPU, GPU, Speicher und Netzwerk   Ressourcen. Um dies zu beheben, sollte der Benutzeragent Logik implementieren   reduzieren und eliminieren solche Konflikte:

     
  • Ressourcenabrufe, die für die nächste Navigation erforderlich sind, sollten niedriger sein   relative Priorität und sollte Ressource nicht blockieren oder stören   Abrufvorgänge, die für den aktuellen Navigationskontext erforderlich sind.
  •   
  • Der optimale Zeitpunkt, um einen für die nächste Navigation erforderlichen Ressourcenabruf einzuleiten, ist   abhängig vom ausgehandelten Transportprotokoll, aktuelle Benutzer   Konnektivitätsprofil, verfügbare Geräteressourcen und anderer Kontext   spezifische Variablen. Der Benutzeragent muss das Optimum bestimmen   Zeitpunkt, zu dem der Abruf eingeleitet werden soll - z. der Benutzeragent kann entscheiden   zu warten, bis alle anderen Downloads beendet sind oder wählen können   Pipeline-Anfragen mit niedriger Priorität, wenn das ausgehandelte Protokoll   unterstützt die notwendigen Primitiven. Alternativ kann der User Agent   Deaktivieren Sie den Aufruf aufgrund von Ressourcenbeschränkungen, Benutzer   Präferenzen oder andere Faktoren.
  •   

Beachten Sie, wie sehr der Benutzeragent dies oder das tun darf. Ich befürchte wirklich, dass dies zu verschiedenen Implementierungen von verschiedenen Browsern führen wird, was wiederum zu einer Divergenz führen wird.

Die Frage bleibt jedoch. Es ist mir nicht klar, ob das Laden einer externen Ressource mit prefetch oder einer anderen synchron erfolgt (und somit im Kopf, bevor der Inhalt geladen wird) oder asynchron (mit einer niedrigeren Priorität). Ich rate Letzteres, obwohl ich nicht verstehe, wie das möglich ist, weil es nichts in der link -Spezifikation gibt, die das asynchrone Laden des Inhalts von Verbindungselementen erlauben würde.

    
Bram Vanroy 16.09.2015, 08:39
quelle

1 Antwort

3

Disclaimer: Ich habe nicht viel Zeit mit diesen Spezifikationen verbracht, also ist es sehr wahrscheinlich, dass ich einen wichtigen Punkt verpasst habe.

Das heißt, mein Lesevorgang stimmt mit dem Ihren überein: Wenn eine Ressource als Ergebnis einer pre -Optimierung abgerufen wird, wird sie wahrscheinlich asynchron abgerufen, und es gibt wenig Garantie dafür, wo in der Pipeline erwartet werden sollte, dass sie abgerufen wird .

Die Absicht scheint eher beratend als präskriptiv zu sein, genau wie das CSS will-change -Attribut weist Rendering-Engines darauf hin, dass ein Element besondere Aufmerksamkeit erhalten sollte, aber nicht das Verhalten vorschreibt, oder dass ein bestimmtes Verhalten sein sollte .

  

In der Link-Spezifikation gibt es nichts, das das asynchrone Laden des Inhalts von Link-Elementen ermöglichen würde.

Nicht alle Links würden in jedem Fall Inhalte laden (ein author -Typ würde nicht dazu führen, dass der UA den Inhalt einer mailto: URL herunterlädt), und ich kann keine Erwähnung finden, wie Ressourcen in der Spezifikation abgerufen werden Ansonsten in der Diskussion um crossorigin :

  

Das genaue Verhalten für Links zu externen Ressourcen hängt von der genauen Beziehung ab, die für den relevanten Linktyp definiert ist. Einige der Attribute steuern, ob die externe Ressource angewendet werden soll oder nicht (wie unten definiert) ... Benutzeragenten entscheiden sich möglicherweise dafür, nur solche Ressourcen zu erhalten, wenn sie benötigt werden, anstatt proaktiv alle zu holen externe Ressourcen, die nicht angewendet werden.

(Betonung meiner)

Dies scheint die Tür für Ressourcen zu öffnen, die von einem link angegeben werden, um asynchron (oder überhaupt nicht) abgerufen zu werden.

    
Palpatim 17.09.2015, 14:42
quelle

Tags und Links