Requirejs domReady Plugin vs Jquery $ (Dokument) .ready ()?
Ich bin mit RequireJS und initialisiert werden muss, etwas auf DOM-ready. Nun, RequireJS bietet die domReady
pluginaber wir haben schon die jQuery -$(document).ready()
die mir zur Verfügung steht, da ich gefragt, jQuery.
Also habe ich zwei Optionen:
- Verwenden Sie die
domReady
plugin:require(['domReady'], function (domReady) { domReady(function () { //Do my stuff here... }); });
- Verwenden
$(document).ready()
:$(document).ready(function() { //Do my stuff here... });
Welche soll ich wählen und warum?
Beiden Optionen scheint zu funktionieren wie erwartet. Ich bin nicht zuversichtlich, in der jQuery ist eine, weil RequireJS tut seine Magie; das heißt, seit RequireJS wird dynamisch hinzufügen von Skripten, bin ich besorgt, dass die DOM-ready auftreten, bevor alle dynamisch angeforderten Skripts geladen werden. In der Erwägung, RequireJS wird eine Last auf zusätzliche JS nur für domReady
wenn ich jQuery schon erforderlich.
Fragen
- Warum RequireJS bieten eine
domReady
plugin, wenn wir können, haben die jQuery -$(document).ready();
? Ich sehe keinen Vorteil, einschließlich eine andere Abhängigkeit. - Wenn die nur füttern müssen, warum dann nicht eine zur Verfügung, die für cross-browser-AJAX?
Soweit ich weiß, ein Modul, das erfordert domReady
werden nicht abgerufen bzw. ausgeführt werden, nachdem das Dokument fertig ist, und Sie könnte das gleiche zu tun erfordern die jQuery sowie:
require(['jQuery'], function ($) {
$(document).ready(function () {
//Do my stuff here...
});
});
Mehr klar, auf meine Frage: was ist der Unterschied zwischen dem Erfordernis domReady
oder jQuery
?
InformationsquelleAutor der Frage Yugal Jindle | 2013-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es scheint, alle wichtigen Punkte wurden bereits getroffen, aber ein paar details fielen durch die Ritzen. Vor allem:
domReady
Es ist ein plugin und ein Modul. Wenn Sie es in den Anforderungen-array w/a trailing
!
dein Modul wird nicht ausgeführt, bis es "sicher" zu interagieren w/DOM:Beachten Sie, dass das laden und ausführen sind verschiedene; Sie wollen alle Ihre Dateien zu laden, so bald wie möglich, es ist die Ausführung der Inhalte, die Zeit-sensibel sind.
Wenn du weglassen, die
!
ist, dann ist es nur ein normales Modul, das passiert zu sein eine Funktion, die einen Rückruf, der nicht ausgeführt werden soll, bevor der DOM ist sicher interagieren mit:Vorteil bei der Verwendung von domReady als plugin
Code, hängt davon ab, ein Modul, das wiederum hängt davon ab
domReady!
hat einen sehr wesentlichen Vorteil: Es braucht nicht zu warten, bis das DOM fertig zu sein!Sagen, dass wir einen code-block Ein, das hängt davon ab, Modul B, das hängt davon ab
domReady!
. Modul B wird nicht geladen, bevor der DOM fertig ist. In turn, A wird nicht ausgeführt, bevor B geladen wurde.Wenn Sie auf
domReady
als reguläres Modul in B, es würde auch notwendig sein, das Eine hängtdomReady
sowie wickeln Ihren code innerhalb einerdomReady()
Aufruf der Funktion.Darüber hinaus bedeutet dies, dass
domReady!
genießt, die gleichen Vorteile gegenüber$(document).ready()
.Wieder die Unterschiede zwischen domReady und $(document).ready()
Beide erschnüffeln, ob/wenn das DOM bereit ist, in im wesentlichen der gleichen Weise.
Re Angst vor jQuery feuern zur falschen Zeit
jQuery wird Feuer bereit callback-auch wenn der DOM geladen ist, bevor jQuery tut (Ihr code sollte nicht egal, was zuerst Eintritt.).
InformationsquelleAutor der Antwort fncomp
Versuch einer Beantwortung Ihrer wichtigsten Frage:
Sie tun zwei verschiedene Dinge, wirklich. RequireJS'
domReady
Abhängigkeit bedeutet, dass dieses Modul benötigt das DOM vollständig geladen, bevor Sie ausgeführt werden kann (und kann daher gefunden werden, in einer beliebigen Anzahl von Modulen, die in Ihrer Anwendung, wenn Sie dies wünschen), während$(document).ready()
stattdessen feuert aus seiner callback-Funktionen, sobald der DOM fertig ist laden.Der Unterschied mag subtil sein, aber denken Sie an dies: ich habe ein Modul, dass kombiniert werden muss, um den DOM in irgendeiner Weise, so kann ich entweder davon abhängen
domReady
und es paar at-Modul-definition-Zeit, oder legen Sie eine$(document).ready()
am Ende mit einem callback auf eine init-Funktion für das Modul. Ich würde sagen der erste Ansatz cleaner.Mittlerweile, wenn ich zu einem Ereignis, das passieren muss, um Recht als der DOM fertig ist, die
$(document).ready()
Fall wäre das go-to, da dies nicht insbesondere davon abhängen, RequireJS getan wird, laden der Module, sofern die Abhängigkeiten der code, den Sie hier aufrufen es aus erfüllt sind.Es ist auch zu Bedenken, dass Sie nicht notwendigerweise mit RequireJS jQuery. Jede Bibliothek-Modul, das die Bedürfnisse DOM-Zugriff (aber nicht darauf, jQuery) wäre dann noch nützlich, indem Sie
domReady
.InformationsquelleAutor der Antwort Gert Sønderby
Beantwortung Ihrer Kugeln in der Reihenfolge des Auftretens:
Wenn es darauf ankommt, sind Sie overthinking. Es ist ein Mechanismus zum ausführen von javascript auf domReady. Wenn Sie nicht über jQuery würde ich befürworten das domReady-plugin. Da hast du jQuery dann nicht mehr laden Skripts zu tun, etwas, das bereits vorhanden ist.
Klarheit Update
Den domReady-plugin speichert Funktionen zu rufen, wenn das Dokument ist 'bereit'. Wenn es bereits geladen dann werden Sie sofort ausgeführt.
JQuery sammelt Funktionen und bindet ein deferred-Objekt der dom als 'bereit'. Wenn der dom fertig ist das deferred Objekt gelöst werden und die Funktionen werden ausgelöst. Wenn der dom-ist schon 'fertig' und dann das latente wird schon gelöst werden, damit die Funktion wird sofort ausgeführt.
Dies bedeutet, dass effektiv, Sie tun genau das gleiche.
InformationsquelleAutor der Antwort awbergs
Nach einigen versuchen mit requirejs mit mehreren Modulen schlage ich vor, mit domReady.
Bemerkte ich, dass die Funktion im Zusammenhang mit $(document).bereit(...) wird nicht aufgerufen, wenn mehrere Module geladen sind, durch requirejs. Ich vermute, dass dom ist immer bereit, bevor alle requirejs-code ausgeführt wird und jquery-ready-callback-handler aufgerufen wird, bevor es gebunden mit Benutzer-definierter Funktion, d.h. innerhalb von main-Modul code.
InformationsquelleAutor der Antwort Marcin Nowakowski
Fand ich ich Tue dies als Teil des Haupt-Eintrag, so dass alle meine javascript ist garantiert, dass das DOM bereit ist und das jquery geladen wird. Nicht sicher, wie groß diese ist, so Ihre Kritik ist jederzeit willkommen aber hier ist mein main.js:
InformationsquelleAutor der Antwort Bil Simser