Ist $ (Dokument) bereits erforderlich?

111

Ich habe diese Frage im Stackoverflow gesehen, habe aber nicht das Gefühl, dass sie überhaupt beantwortet wurde.

Ist $(document).readynotwendig?

Ich verknüpfe alle meine Javaskripte am Ende der Seite, sodass sie theoretisch alle ausgeführt werden, nachdem das Dokument sowieso fertig ist.

Joshua Robison
quelle
3
Ältere Browser genießen möglicherweise nicht das parallele Herunterladen, das neuere Browser verwenden. Dies ist der Hauptgrund dafür, dass Ihre Skripte ganz unten stehen. Es ermöglicht speziell, dass Ihr HTML und CSS zuerst in älteren Browsern gerendert werden. An diesem Punkt haben Sie die Wahl, wie Sie feststellen möchten, dass das DOM geladen ist. Zwei beliebte Methoden zum Starten Ihres js sind window.onload & $ (document) .ready (in Verbindung mit jQuery). Es gibt andere Optionen und leicht zu suchende, offensichtliche Nachteile von window.onload. Der Punkt ist $ (Dokument). Funktioniert bereits meistens und ist einfach zu bedienen.
BradChesney79

Antworten:

125

Ist $(document).readynotwendig?

Nein

Wenn Sie alle Ihre Skripte direkt vor dem </body>schließenden Tag platziert haben, haben Sie genau das Gleiche getan.

Wenn das Skript nicht auf das DOM zugreifen muss, spielt es keine Rolle, wo es geladen wird, und zwar über mögliche Abhängigkeiten von anderen Skripten hinaus.

Bei vielen CMS haben Sie nicht viel Auswahl, wo die Skripte geladen werden. Daher ist es eine gute Form für modularen Code, das document.readyEreignis zu verwenden. Möchten Sie wirklich zurückgehen und alten Code debuggen, wenn Sie ihn an anderer Stelle wiederverwenden?

Off-Topic:

Als Randnotiz: Sie sollten jQuery(function($){...});anstelle von verwenden, $(document).ready(function(){...});da dies den Alias ​​dazu zwingt $.

zzzzBov
quelle
Sind Sie sicher, dass es das "genau Gleiche" ist? Ich hatte den Eindruck, dass Ihr CSS (oder anderer parallel zum Haupt-HTML geladener Code) möglicherweise noch nicht vollständig analysiert wurde.
Zach Lysobey
6
@ZachL, das Dokument ist möglicherweise bereit, bevor CSS vollständig analysiert wurde. document.ready ist nicht dasselbe wie das onloadEreignis, bei dem Bilder und andere externe Assets vollständig geladen wurden.
zzzzBov
Danke für die Klarstellung.
Zach Lysobey
5
Dieses "Nein" hat mich nur 3 Stunden Arbeit gekostet.
Stellen Sie
1
Ich bin jedoch nicht unbedingt damit einverstanden, den Alias ​​zu erzwingen, insbesondere wenn noConflict()er aus irgendeinem Grund verwendet werden muss.
Jay Blanchard
22

Nein, wenn Ihr Javascript das letzte ist, bevor Sie es schließen, müssen Sie diese Tags nicht hinzufügen.

Als Randnotiz ist eine Abkürzung für $ (Dokument) .ready der folgende Code.

$(function() {
// do something on document ready
});

Diese Frage könnte gut sein. Hast du es gelesen? jQuery: Warum document.ready verwenden, wenn externes JS am Ende der Seite?

Schildkrötenpickel
quelle
6
Die Frage lautet im Wesentlichen "Muss ich überhaupt ein Dokument bereit haben, wenn ich meine Skripte am unteren Rand des Körpers platziere?", Nicht "Gibt es eine Abkürzung zum Schreiben? $(document).ready()".
nnnnnn
4

Nein, es ist nicht erforderlich, vorausgesetzt, Sie wissen, dass keine verzögerten Vorgänge stattfinden - und in den meisten Fällen werden Sie wissen, ob Sie das, woran Sie arbeiten, von oben nach unten entwickelt haben.

- Wenn Sie den Code eines anderen eingeben, ohne ihn gründlich zu prüfen, wissen Sie es nicht.

Fragen Sie sich also, ob Sie ein Framework oder einen Editor verwenden, der Ihnen bei der Struktur hilft? Bringen Sie den Code eines anderen ein und haben sich nicht die Mühe gemacht, jede Datei durchzulesen? Sind Sie bereit, die Matrix für Betriebssystem, Browser und Browserversion zum Testen Ihres Codes durchzugehen? Haben Sie müssen jede einzelne Unze Geschwindigkeit aus dem Code drücken?

document.ready () macht viele dieser Fragen irrelevant. document.ready () wurde entwickelt, um Ihnen das Leben zu erleichtern. Es kommt zu einem kleinen (und ich wage zu sagen akzeptablen) Leistungseinbruch.

BradChesney79
quelle
Nur etwas, das ich gesehen habe - eine Ihrer Änderungen wurde abgelehnt, aber für mich sieht es gut aus. Vielleicht möchten Sie diese erneut einreichen
Qantas 94 Heavy
1

Ich habe im Internet Referenzen / Blogposts über die Verwendung von jquery's gesehen document.ready. Meiner Meinung nach sind beide gültig, wenn Sie es verwenden oder Ihr gesamtes Javascript am Ende der Seite platzieren. Und jetzt wäre die Frage, welche besser wäre? Es ist nur eine Frage des Programmierstils.

Krishna Chytanya
quelle
0

Nein, das ist nicht nötig. Sie können entweder das Skript-Tag direkt vor das Body-Closing-Tag setzen oder, wenn Sie IE9 + unterstützen, natives JS verwenden.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
mbokil
quelle