Leistung: absolute vs. relative URLs

8

Was ist schneller? Hotlinking (Inline-Linking) zu einem absolute URI oder die Ressource selbst hosten und einen relativen URI verwenden?

>

In seinem Tutorial, wie HTML5-Elemente im Internet Explorer formatiert werden können , erklärt Remy Sharp Dieses Hot-Linking verursacht eine "extra HTTP [GET] Anfrage". Ich stimme zu, wenn Sie die Direktverlinkung mit Kopieren & amp; Einfügen (Einbetten) des Skripts in den HTML-Code. Aber wenn Sie das Hot-Linking mit dem lokalen Hosting des Skripts und der Verknüpfung über einen relativen Pfad vergleichen, würde ich argumentieren, dass Hot-Linking tatsächlich (fast) etwas schneller ist, da der Browser das Absolute nicht auflösen muss URL aus dem relativen Pfad In beiden Fällen wird jedoch eine zusätzliche HTTP-GET-Anforderung ausgeführt, richtig?

    
ma11hew28 01.03.2011, 18:02
quelle

5 Antworten

11
___ qstntxt ___

Was ist schneller? Hotlinking (Inline-Linking) zu einem absolute URI oder die Ressource selbst hosten und einen relativen URI verwenden?

>

In seinem Tutorial, wie HTML5-Elemente im Internet Explorer formatiert werden können , erklärt Remy Sharp Dieses Hot-Linking verursacht eine "extra HTTP [GET] Anfrage". Ich stimme zu, wenn Sie die Direktverlinkung mit Kopieren & amp; Einfügen (Einbetten) des Skripts in den HTML-Code. Aber wenn Sie das Hot-Linking mit dem lokalen Hosting des Skripts und der Verknüpfung über einen relativen Pfad vergleichen, würde ich argumentieren, dass Hot-Linking tatsächlich (fast) etwas schneller ist, da der Browser das Absolute nicht auflösen muss URL aus dem relativen Pfad In beiden Fällen wird jedoch eine zusätzliche HTTP-GET-Anforderung ausgeführt, richtig?

    
___ answer5158516 ___

Ich würde mir vorstellen, dass die einzigen Dinge, die eine solche Situation beeinflussen, die relativen Geschwindigkeiten der betreffenden Server (für die Geschwindigkeit) sind und ob Sie erwarten, dass dieser Code auf einer anderen Site ausgeführt wird (zur Wartbarkeit).

    
___ answer5158641 ___

Angenommen, die Ressource ist nicht in das HTML-Dokument selbst eingebettet (dh sie ist verknüpft) und die Ressource befindet sich auf demselben Server mit demselben Hostnamen. Die Zeit zum Abrufen der Ressource über absolute oder relative URI sollte praktisch identisch sein . Eine weitere HTTP-Anfrage wird in beide Richtungen gesendet. Wenn Sie das "virtuell identisch" aufteilen möchten, würde ich mich auf den relativen Pfad stützen, der sehr, sehr, sehr klein ist, da der HTML-Code viel weniger analysiert werden muss, als das Pfad-Parsing (wie Sie bereits erwähnt haben) schneller (weil der Zeichenketten-Tokenizer nicht mit dem Domain-Abschnitt der Adresse / der Adresse, die kürzer ist, umgehen muss). Der Unterschied hier ist nur aus Neugierde realistisch. Ich kann mir nicht vorstellen, dass eine Seite bis zu diesem Level optimiert wird (obwohl es eine gute Faustregel sein kann? Relative Pfadangabe erlaubt es Ihnen, die Domain / den Pfad der Seite frei zu ändern ohne alle darin enthaltenen URIs neu schreiben zu müssen.)

Wenn die Ressource nicht auf demselben Server gehostet wird und der Server des referenzierenden HTML-Dokuments KeepAlive aktiviert hat, muss eine andere TCP-Verbindung initialisiert werden, damit eine Verbindung hergestellt werden kann der zweite Server (sowie eine DNS-Abfrage zum Auflösen des Hostnamens des anderen Servers, vorausgesetzt, der Zugriff erfolgt nicht über die IP-Adresse), was zu einem zusätzlichen Overhead im Vergleich zu mehreren referenzierten Ressourcen auf demselben Server führt (wo die GET-Anforderungen wären) innerhalb der bestehenden TCP-Verbindung ausgegeben werden.)

Das gleiche gilt für einen Server, auf dem KeepAlive nicht aktiviert ist. Eine TCP-Verbindung wird für jede angeforderte Ressource initialisiert.

    
___ tag123performance ___ Für Fragen zur Messung oder Verbesserung der Code- und Anwendungseffizienz. ___ tag123http ___ Das Hypertext Transfer Protocol (HTTP) ist ein Netzwerkprotokoll auf Anwendungsebene, das für die Übertragung von Inhalten im World Wide Web verwendet wird. ___ tag123relativepath ___ Relative-Pfade sind URI- oder Verzeichnisverknüpfungen zu Ressourcen, die sich auf eine relative Position zum aktuellen Pfad beziehen. ___ tag123absolutpath ___ globale Adresse für eine Datei, unabhängig vom Arbeitsverzeichnis des aufrufenden Prozesses ___ answer5158895 ___

Die Zeit, die der Client benötigt, um den relativen URI aufzulösen, ist absolut vernachlässigbar.

Es macht also keinen Unterschied, ob Sie eine Verknüpfung zu einer Ressource in der gleichen Domäne des Dokuments herstellen, indem Sie absolute oder relative URIs verwenden.

Der einzige Unterschied besteht darin, dass die Ressource auf einem anderen Server gehostet wird. Dann benötigen Sie eine zusätzliche TCP-Verbindung zu diesem Server, während eine zusätzliche HTTP-Anforderung an einen Server, mit dem Sie bereits eine Verbindung haben, diese Verbindung verwenden kann.

    
___ tag123hotlinking ___ Hotlinking ist die Verwendung eines verknüpften Objekts, oft ein Bild, von einer Website durch eine Webseite, die zu einer zweiten Website gehört. ___ answer5158714 ___

Dies ist eher mit etwas anderem wie tcp als http per se zu tun. Wenn Sie heutzutage zwei Objekte vom gleichen Webserver erhalten, wird Ihr Browser wahrscheinlich über dieselbe TCP-Verbindung verfügen. Das sind zwei HTTP-Transaktionen über eine TCP-Verbindung. Dies vermeidet den Aufwand, eine weitere TCP-Verbindung herzustellen. Dieser Overhead ist im Hinblick auf den Datenverkehr gering, kann jedoch viel Latenz beinhalten.

OTOH, zwei http-Transaktionen, wo sie jeweils zu verschiedenen Servern gehen, vielleicht schneller, oder vielleicht nicht. True, Sie haben den Overhead von zwei TCP-Verbindungen. In diesem Fall werden serialisiert. Sie müssen abgeschlossen sein, bevor die zweite beginnen kann. Wenn Sie jedoch viele Objekte herunterziehen, können die Verbindungen 2., 3., 4. usw. alle parallel ablaufen und das Latenzproblem maskieren. In diesem Szenario können die Dinge viel schneller gehen, da kleine Objekte möglicherweise nicht der Bandbreitenbeschränkung Ihres ISP unterliegen.

Die Gewässer sind in der Tat matschig.

Behalten Sie Latenz und Bandbreite im Auge. Es hängt wirklich von der Anzahl und Größe Ihrer Ressourcen ab.

    
___ qstnhdr ___ Leistung: absolute vs. relative URLs ___
Sripathi Krishnan 01.03.2011, 18:43
quelle
2

Die Zeit, die der Client benötigt, um den relativen URI aufzulösen, ist absolut vernachlässigbar.

Es macht also keinen Unterschied, ob Sie eine Verknüpfung zu einer Ressource in der gleichen Domäne des Dokuments herstellen, indem Sie absolute oder relative URIs verwenden.

Der einzige Unterschied besteht darin, dass die Ressource auf einem anderen Server gehostet wird. Dann benötigen Sie eine zusätzliche TCP-Verbindung zu diesem Server, während eine zusätzliche HTTP-Anforderung an einen Server, mit dem Sie bereits eine Verbindung haben, diese Verbindung verwenden kann.

    
Gumbo 01.03.2011 18:46
quelle
2

Dies ist eher mit etwas anderem wie tcp als http per se zu tun. Wenn Sie heutzutage zwei Objekte vom gleichen Webserver erhalten, wird Ihr Browser wahrscheinlich über dieselbe TCP-Verbindung verfügen. Das sind zwei HTTP-Transaktionen über eine TCP-Verbindung. Dies vermeidet den Aufwand, eine weitere TCP-Verbindung herzustellen. Dieser Overhead ist im Hinblick auf den Datenverkehr gering, kann jedoch viel Latenz beinhalten.

OTOH, zwei http-Transaktionen, wo sie jeweils zu verschiedenen Servern gehen, vielleicht schneller, oder vielleicht nicht. True, Sie haben den Overhead von zwei TCP-Verbindungen. In diesem Fall werden serialisiert. Sie müssen abgeschlossen sein, bevor die zweite beginnen kann. Wenn Sie jedoch viele Objekte herunterziehen, können die Verbindungen 2., 3., 4. usw. alle parallel ablaufen und das Latenzproblem maskieren. In diesem Szenario können die Dinge viel schneller gehen, da kleine Objekte möglicherweise nicht der Bandbreitenbeschränkung Ihres ISP unterliegen.

Die Gewässer sind in der Tat matschig.

Behalten Sie Latenz und Bandbreite im Auge. Es hängt wirklich von der Anzahl und Größe Ihrer Ressourcen ab.

    
bobbogo 01.03.2011 18:27
quelle
0

Ich würde mir vorstellen, dass die einzigen Dinge, die eine solche Situation beeinflussen, die relativen Geschwindigkeiten der betreffenden Server (für die Geschwindigkeit) sind und ob Sie erwarten, dass dieser Code auf einer anderen Site ausgeführt wird (zur Wartbarkeit).

    
Brilliand 01.03.2011 18:08
quelle
0

Angenommen, die Ressource ist nicht in das HTML-Dokument selbst eingebettet (dh sie ist verknüpft) und die Ressource befindet sich auf demselben Server mit demselben Hostnamen. Die Zeit zum Abrufen der Ressource über absolute oder relative URI sollte praktisch identisch sein . Eine weitere HTTP-Anfrage wird in beide Richtungen gesendet. Wenn Sie das "virtuell identisch" aufteilen möchten, würde ich mich auf den relativen Pfad stützen, der sehr, sehr, sehr klein ist, da der HTML-Code viel weniger analysiert werden muss, als das Pfad-Parsing (wie Sie bereits erwähnt haben) schneller (weil der Zeichenketten-Tokenizer nicht mit dem Domain-Abschnitt der Adresse / der Adresse, die kürzer ist, umgehen muss). Der Unterschied hier ist nur aus Neugierde realistisch. Ich kann mir nicht vorstellen, dass eine Seite bis zu diesem Level optimiert wird (obwohl es eine gute Faustregel sein kann? Relative Pfadangabe erlaubt es Ihnen, die Domain / den Pfad der Seite frei zu ändern ohne alle darin enthaltenen URIs neu schreiben zu müssen.)

Wenn die Ressource nicht auf demselben Server gehostet wird und der Server des referenzierenden HTML-Dokuments KeepAlive aktiviert hat, muss eine andere TCP-Verbindung initialisiert werden, damit eine Verbindung hergestellt werden kann der zweite Server (sowie eine DNS-Abfrage zum Auflösen des Hostnamens des anderen Servers, vorausgesetzt, der Zugriff erfolgt nicht über die IP-Adresse), was zu einem zusätzlichen Overhead im Vergleich zu mehreren referenzierten Ressourcen auf demselben Server führt (wo die GET-Anforderungen wären) innerhalb der bestehenden TCP-Verbindung ausgegeben werden.)

Das gleiche gilt für einen Server, auf dem KeepAlive nicht aktiviert ist. Eine TCP-Verbindung wird für jede angeforderte Ressource initialisiert.

    
Garrett Boast 01.03.2011 18:21
quelle