Ich habe mir verschiedene asynchrone Ressourcenlader angesehen und bin mir noch nicht sicher, welche ich verwenden soll. Wo ich arbeite, haben wir unterschiedliche Gruppenbemühungen, deren Klassenmodule unterschiedliche Versionen von jQuery (usw.) verwenden können. Daher können sich auch verschachtelte Abhängigkeiten unterscheiden. Ich habe keine Kontrolle darüber, daher muss ich Ressourcen dynamisch laden, die möglicherweise alternative Versionen derselben Bibliothek verwenden.
Als solche sind hier meine Anforderungen:
- Laden Sie JavaScript- und CSS-Ressourcendateien asynchron.
- Verwalten der Abhängigkeitsreihenfolge und der verschachtelten Abhängigkeiten über Versionen hinweg.
- Ermitteln Sie, ob eine Ressource bereits geladen ist.
- Muss domänenübergreifendes Laden (CDNs) zulassen
- (optional) Erlauben Sie uns, eine Ressource zu entladen.
Ich habe gesucht:
Ich kann diese Anforderungen möglicherweise selbst vortäuschen, indem ich Versionen in Variablen mit richtigem Namensraum lade und mithilfe eines Arrays verfolge, was bereits geladen ist ... aber (hoffentlich) hat dies bereits jemand erfunden.
Meine Fragen sind also:
- Welche benutzt du? Und warum?
- Gibt es andere, die meine Anforderungen vollständig erfüllen?
- Mit welchen ist es am beredtesten und am einfachsten zu arbeiten? Und warum?
UPDATE:
Für Interessierte habe ich alle oben genannten AMD-Bibliotheken (und mehr) ausprobiert. Am Ende habe ich mich für RequireJS entschieden . Insgesamt ist es einfach sauberer und einfacher ... und ich bin froh, es zu verwenden.
quelle
getScript
Funktion zur Skriptinjektion.Antworten:
Ich habe RequireJS für ernsthafte Projekte verwendet und ich liebe es, aber es ist nicht wirklich als asynchroner Loader gedacht. Es soll wirklich ein Modulsystem sein. Zu diesem Zweck wird im Dienst ein asynchrones Laden bereitgestellt. Es kann gepusht werden, um alle Ihre Anforderungen zu erfüllen, aber seine Ladedienste dienen zum Laden von Modulen, nicht von beliebigen Dateien.
Laden von JavaScript- und CSS-Ressourcendateien asynchron : Requirejs lädt alle Module, die Sie benötigen, mithilfe der Skript-Tag-Injection, also asynchron.
Verwalten der Abhängigkeitsreihenfolge und der verschachtelten Abhängigkeiten über Versionen hinweg : Hier scheint RequireJS zu glänzen. Module können Abhängigkeiten von anderen Modulen deklarieren, und die Ladereihenfolge wird aus dieser Abhängigkeitsdeklaration extrapoliert. Es gibt auch ein Auftrags-Plugin, das die Reihenfolge von Abhängigkeiten erzwingen kann.
Erkennen, ob eine Ressource bereits geladen ist : Requirejs lädt ein Modul nur einmal.
Domänenübergreifendes Laden (CDNs) muss berücksichtigt werden : Dies ist möglich, erfordert jedoch eine gewisse Konfiguration. Sie können für jedes Modul eine bestimmte URL festlegen, die den Standardspeicherort überschreibt, sodass Sie ihn auf ein CDN festlegen können.
RequireJS eignet sich am besten, wenn Sie Module im Format schreiben, und ist am wenigsten effektiv, wenn Sie es zum Laden von Roh-Javascript verwenden.
Es bietet auch einen Erstellungsprozess, der Ihre Module für die Produktion zu einer einzigen Datei zusammenführt.
quelle
Theoretisch könnten Sie einfach eine Liste der bereits geladenen Skripte behalten und eine Funktion erstellen, die noch nicht geladene Skripte lädt.
http://jsfiddle.net/BDG/Dhdu7/2/
quelle
Wenn Sie sich RequireJS ansehen und von CSS-Dateien abhängig sein möchten, können Sie das CSSP RequireJS-Plugin auschecken :
quelle