Wann verwendet man Requirejs und wann gebündeltes Javascript?

Lesezeit: 5 Minuten

Benutzer-Avatar
kunjee

Dies mag eine dumme Frage für Web-Jungs sein. Aber ich bin ein wenig verwirrt darüber. Jetzt habe ich eine Anwendung, in der ich ein paar Javascript-Dateien verwende, um verschiedene Aufgaben auszuführen. Jetzt verwende ich Javascript Bündler um alle Dateien zu kombinieren und zu minimieren. Zur Laufzeit gibt es also nur eine app.min.js-Datei. Jetzt, Requirejs wird verwendet, um Module oder Dateien zur Laufzeit zu laden. Die Frage ist also, wenn ich bereits alle Dinge in einer Datei habe, brauche ich dann requirejs? Oder was ist ein Anwendungsfall-Szenario, in dem ich requirejs und/oder Bundler verwenden kann?

Bitte lassen Sie mich wissen, wenn weitere Details benötigt werden.

  • Ich verstehe nicht, warum du beides brauchst. Tun Sie denkst du, du würdest?

    – nnnnn

    2. September 2012 um 1:50 Uhr


  • Das ist eine Verwirrung. Wann was verwenden? Oder müssen Sie sich nur für eine entscheiden?

    – Kunji

    2. September 2012 um 1:59 Uhr

  • Bietet Require neben Lazy-Loading-Javascripts nicht auch eine Abhängigkeitsinjektion, sodass die Notwendigkeit von Globals entfällt? Mir scheint, dass Require innerhalb einer gebündelten Datei immer noch nützlich ist. Liege ich falsch?

    – Papiro

    21. Mai 2018 um 14:03 Uhr

Im Allgemeinen verwenden Sie RequireJS während der Entwicklung nur in seiner Ladeform. Sobald die Site fertig und bereit für die Bereitstellung ist, verkleinern Sie den Code. Der Vorteil hier ist, dass RequireJS genau weiß, was Ihre Abhängigkeiten sind, und daher den Code leicht in der richtigen Reihenfolge verkleinern kann. Hier steht, was auf dem steht RequireJS-Website:

Wenn Sie mit der Entwicklung fertig sind und Ihren Code für Ihre Endbenutzer bereitstellen möchten, können Sie den Optimierer verwenden, um die JavaScript-Dateien miteinander zu kombinieren und zu minimieren. Im obigen Beispiel kann es main.js und helper/util.js in einer Datei kombinieren und das Ergebnis minimieren.

  • Ich weiß, das ist ein alter Thread, aber ich bin darüber gestolpert, weil ich ähnliche Zweifel hatte. Also, eine Folgefrage, wenn es Ihnen nichts ausmacht – wenn wir endlich alles in einer Datei für die Bereitstellung bündeln, wird meine gesamte Anwendung auf einmal statt stückweise (auf Abruf) geladen. Ist das nicht ein Widerspruch zu AMD?

    – Code Poet

    11. Dezember 2013 um 8:07 Uhr

  • ja, in gewissem Sinne ist es das. Aber AMD ist eher theoretisch, wobei sich requirejs auch mit realen Leistungsproblemen befasst. Jedes Modul einzeln zu laden ist definitiv sauberer und reiner, wird aber ewig dauern 🙂

    – Matt Greer

    11. Dezember 2013 um 19:56 Uhr

  • Ich habe diese Frage auch an SO gestellt, siehe stackoverflow.com/questions/20515679/…. Vielleicht ein Mittelweg zwischen den beiden Ansätzen?

    – Code Poet

    11. Dezember 2013 um 20:45 Uhr

Benutzer-Avatar
Bischof Z

Dies ist ein heiß umstrittenes Thema unter vielen erfahrenen Javascript-Entwicklern. Viele andere Sprachen haben eine “Kompilierungsphase”, in der das gesamte Programm für die Bereitstellung gebündelt wird (man denke an die .WAR-Dateien von JBoss). Programmierer mit eher traditionellem Hintergrund bevorzugen häufig diesen Ansatz.

Javascript hat in den letzten Jahren ein solches Wachstum erlebt, dass es schwierig ist, genaue Best Practices aufzuzeichnen, aber diejenigen, die die funktionalere Natur von Javascript schätzen, bevorzugen oft den Ansatz zum Laden von Modulen (wie der von require.js).

Ich schrieb Frame.js Das funktioniert ähnlich wie require.js, daher tendiere ich eher zum Modullader-Ansatz.

Um Ihre Frage direkt zu beantworten, ja, es ist das eine oder andere.

Die meisten, die dafür plädieren, Ihre Skripte in eine einzige Datei zu packen, glauben, dass dies eine stärkere Komprimierung ermöglicht und daher effizienter ist. Ich glaube, dass die Effizienzvorteile des Paketierens in den meisten Fällen vernachlässigbar sind, weil: (1) Modulladezeiten über die gesamte Sitzung verteilt werden, (2) einzelne Module auf nahezu den gleichen Prozentsatz komprimiert werden können, (3) einzelne Module zwischengespeichert werden können Server und Router separat, und (4) das Laden von Skripten nur dann, wenn sie benötigt werden, ermöglicht es Ihnen letztendlich, weniger Code für einige Benutzer und insgesamt mehr Code zu laden.

Wenn Sie auf lange Sicht einen Vorteil des dynamischen Skriptladens sehen, verwenden Sie es. Wenn nicht, bündeln Sie Ihre Skripts in einer einzigen Datei.

  • Obwohl ich die Vorteile verstehe, die Dateien getrennt aufzubewahren, denke ich, dass das Bündeln auch die Anzahl der erforderlichen HTTP-Verbindungen reduziert. Mit zunehmender Verfügbarkeit von Pipelining in Browsern und Servern mag dies weniger wichtig sein, aber es ist derzeit eine ziemlich große Sache.

    – Andreas Theken

    24. August 2013 um 12:17 Uhr

  • Der HTTP-Verbindungsaufwand kann schnell ansteigen, wenn die App groß ist. Wenn wir unsere App im entpackten Modus ausführen und jede JS-Datei einzeln laden, dauert es ungefähr 15 bis 30 Sekunden, nur um die Seite zu laden. Im gepackten Modus ist es etwa eine Sekunde.

    – Matt Greer

    14. September 2013 um 17:18 Uhr


  • Eine einzelne gepackte, zwischengespeicherte Datei ist offensichtlich viel schneller als das Abrufen von Dutzenden oder Hunderten von Dateien, bei denen Sie nie wirklich sicher sein können, ob sie geladen wurden oder wie lange es dauert, sie zu laden. es ist daher besser, alles auf dem Client abzulegen. In den meisten Fällen wird diese einzelne Datei sowieso nicht die Größe von 1 MB überschreiten, wahrscheinlich viel weniger, nachdem sie verkleinert und gezippt wurde. also Single-File-FTW.

    – vsync

    11. Oktober 2015 um 15:30 Uhr

  • Tausende stark typisierte Klassen und eine .swf-Datei, ftw.

    – Triynko

    19. November 2015 um 14:17 Uhr


Es hängt von Ihrer Anwendung ab. Wenn Sie eine serverseitige App mit nur bescheidenem Javascript (weniger als 100 KB minimiert) erstellen und sich für eine vollständige Bündelung entscheiden, wird es Ihnen wahrscheinlich gut gehen.

Aber wenn Sie eine Javascript-App erstellen und eine Menge Code darin haben, dann werden Ihre Bedürfnisse andere sein.

In meiner App bündele ich beispielsweise alle Kerndateien. Es gibt jQuery, Underscore, Backbone, meine wichtigsten App-Dateien, mein Benutzer-Login-System, mein Layout-System, meine Benachrichtigungen und mein Chat-System, alle sind Teil meiner großen Anfangsdatei.

Aber ich habe auch viele andere Module, die nicht Teil des ursprünglichen Pakets sind, die danach geladen werden.

Die Foren, das Wiki, Wysiwyg, Farbwähler, Drag/Drop, Kalender und einige Animationsdateien sind Teil der zweiten Kategorie. Sie müssen vernünftige Entscheidungen darüber treffen, was häufig verwendet und sofort benötigt wird und was verzögert werden kann.

Wenn ich alles sofort einfüge, kann ich mehr als ein MB Javascript erreichen, was verrückt wäre und den anfänglichen Start unannehmbar langsam machen würde.

Die zweite Kategorie beginnt danach mit dem Herunterladen initSuccess Ereignis wird aus der ursprünglichen Datei ausgelöst.

Aber die zweite Kategorie ist intelligenter als die erste, da sie das Wichtige zuerst lädt. Wenn Sie sich beispielsweise das Wiki ansehen, wird das Wiki geladen, bevor der Farbwähler geladen wird.

1092730cookie-checkWann verwendet man Requirejs und wann gebündeltes Javascript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy