Was ist der Unterschied / Vorteil / Nachteil des Schreibens eines Skripts am Ende der Seite und des Schreibens des Skripts?
$(document).ready(function(){});
javascript
jquery
Sourav
quelle
quelle
Antworten:
An und für sich sehr wenig, so oder so wird das DOM für Sie betriebsbereit sein (ich war darüber nervös, bis ich dies von Google gelesen habe ). Wenn Sie den Trick zum Ende der Seite verwenden, wird Ihr Code möglicherweise ein bisschen früher aufgerufen, aber nichts, was von Bedeutung ist. Noch wichtiger ist jedoch, dass diese Auswahl sich darauf bezieht, wo Sie Ihr JavaScript mit der Seite verknüpfen.
Wenn Sie Ihr
script
Tag in das Tag aufnehmenhead
und sich darauf verlassenready
, trifft der Browser auf Ihrscript
Tag, bevor es dem Benutzer etwas anzeigt. Unter normalen Umständen kommt der Browser zum Stillstand und lädt Ihr Skript herunter, startet den JavaScript-Interpreter und übergibt ihm das Skript. Er wartet dann, während der Interpreter das Skript verarbeitet (und dann überwacht jQuery auf verschiedene Arten damit das DOM bereit ist). (Ich sage "im normalen Verlauf", weil einige Browser die Attributeasync
oderdefer
aufscript
Tags unterstützen.)Wenn Sie Ihr
script
Tag am Ende desbody
Elements einfügen, erledigt der Browser dies erst, wenn Ihre Seite dem Benutzer größtenteils bereits angezeigt wird. Dies verbessert die wahrgenommene Ladezeit für Ihre Seite.Um die bestmögliche Ladezeit zu erzielen, platzieren Sie Ihr Skript am Ende der Seite. (Dies ist auch die Richtlinie der Yahoo-Leute .) Und wenn Sie das tun, müssen Sie es nicht verwenden
ready
, obwohl Sie es natürlich könnten, wenn Sie möchten.Dafür gibt es jedoch einen Preis: Sie müssen sicher sein, dass die Dinge, die der Benutzer sehen kann, für die Interaktion bereit sind. Indem Sie die Download-Zeit verschieben, nachdem die Seite weitgehend angezeigt wurde, erhöhen Sie die Wahrscheinlichkeit, dass der Benutzer mit der Seite interagiert, bevor Ihr Skript geladen wird. Dies ist eines der Gegenargumente, um das
script
Tag am Ende zu setzen. Häufig ist dies kein Problem, aber Sie müssen auf Ihrer Seite nachsehen, ob dies der Fall ist und wenn ja, wie Sie damit umgehen möchten. (Sie können ein kleines Inline-script
Element in dashead
einfügen, das einen dokumentweiten Ereignishandler einrichtet, um dies zu bewältigen. Auf diese Weise erhalten Sie die verbesserte Ladezeit, aber wenn Wenn sie versuchen, etwas zu früh zu tun, können Sie ihnen das entweder sagen oder besser das, was sie tun wollten, in die Warteschlange stellen und es tun, wenn Ihr vollständiges Skript fertig ist.)quelle
Ihre Seite wird langsamer geladen, indem
$(document).ready()
Skripte im gesamten DOM verteilt werden (anstatt am Ende alle), da jQuery zuerst synchron geladen werden muss.$ = jQuery
. Sie können$
Ihre Skripte also nicht verwenden, ohne zuvor jQuery geladen zu haben. Dieser Ansatz zwingt Sie, jQuery am Anfang der Seite zu laden, wodurch das Laden der Seite angehalten wird, bis jQuery vollständig heruntergeladen ist.Sie können
async
jQuery auch nicht laden, da in vielen Fällen Ihre$(document).ready()
Skripte versuchen, ausgeführt zu werden, bevor jQuery vollständig asynchron geladen ist, und einen Fehler verursachen, da dieser noch$
nicht definiert ist.Davon abgesehen gibt es eine Möglichkeit, das System zu täuschen. Im Wesentlichen
$
gleich einer Funktion, die$(document).ready()
Funktionen in eine Warteschlange / ein Array schiebt . Laden Sie dann am Ende der Seite jQuery, durchlaufen Sie die Warteschlange und führen Sie sie jeweils einzeln aus$(document).ready()
. Auf diese Weise können Sie jQuery auf den unteren Rand der Seite verschieben, aber weiterhin$
darüber im DOM verwenden. Ich persönlich habe nicht getestet, wie gut das funktioniert, aber die Theorie ist solide. Die Idee gibt es schon eine Weile, aber ich habe sie sehr, sehr selten umgesetzt gesehen. Aber es scheint eine großartige Idee zu sein:http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax
quelle