T-Rex: JS Komprimierung - Organisation

Moin,

hab ja in der Vergangenheit zwei Themen gestartet. Einmal die Komprimierung von JS Dateien und einmal die richtige organisation von JS Dateien.
Heute möchte ich beide Themen zusammen bringen.

Hat eine komprimierte Datei alle javascripten die irgendwo auf der seite gebraucht werden. Wenn z.B. eine bestimmte Javascript Datei nur auf einer Seite gebraucht wird, wird diese dann trotzdem in die komprimierte Javascript datei eingebunden?

Gruß
der komprimierte
Tx

  1. Hi,

    Hat eine komprimierte Datei alle javascripten die irgendwo auf der seite gebraucht werden. Wenn z.B. eine bestimmte Javascript Datei nur auf einer Seite gebraucht wird, wird diese dann trotzdem in die komprimierte Javascript datei eingebunden?

    Kommt drauf an.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Kommt drauf an.

      MfG ChrisB

      Das dacht ich mir...
      Auf was? Gib deinen Erfahrungsschatz frei.
      Wie sieht die alternative aus? 1 Datei mit viel Javascript und kleinere JS werden weiterhin einfach so eingebunden?

      Gruß
      einfach so
      T-Rex

      1. Auf was?

        Darauf wie man es macht :-)

        Ich sehe in deiner Frage keinen Anhaltspunkt, um was es da geht. Komprimierst du selber? Nutzt du irgendeinen Mechanismus der das für dich macht?

        1. Sag du es mir.
          Also ich hab schon viele Sachen gesehen. Sogar Leute die auf eine .php Datei verweisen. Diese baut dann anscheinend das jeweilige js zusammen, komprimiert es und liefert es als js datei aus. Hoffentlich werden dann irgendwelche cache Methoden benutzt, sonst wäre das sehr Zeit intensive.

          Ich mache aktuell gar nichts, sondern suche immer noch nach einem optimalen Weg. Jedes mal wenn ich denke ich hätte ihn kommt ein Argument welche den optimalen weg suboptimal wirken lässt.

          Gruß
          optimlaer
          T-Rex

          1. Hallo,

            Ich mache aktuell gar nichts, sondern suche immer noch nach einem optimalen Weg. Jedes mal wenn ich denke ich hätte ihn kommt ein Argument welche den optimalen weg suboptimal wirken lässt.

            Guck dir mal an wie es die Leute von Sprockets, da kann man sicherlich einiges von lernen. Sprockets wird seit Rails 3.1 auch in der Rails Assets Pipeline benutzt.

            Jeena

  2. Hat eine komprimierte Datei alle javascripten die irgendwo auf der seite gebraucht werden. Wenn z.B. eine bestimmte Javascript Datei nur auf einer Seite gebraucht wird, wird diese dann trotzdem in die komprimierte Javascript datei eingebunden?

    Wenn das kein Problem darstellt, kannst du das machen. Wenn doch, so gibt es verschiedene Möglichkeiten, um Module und deren Abhängigkeiten zu definieren. Das erlaubt das einfache Packaging, da der Abhängigkeitsbaum maschinell erzeugt werden kann. Und im Browser können Codepakete und andere Dateien automatisch on-demand nachgeladen werden.

    Ein populäres Beispiel ist hier die AMD-Modulspezifikation, der RequireJS-Module-Loader und der r.js-Optimizer, der Pakete erzeugen kann. Es gibt noch weitere Modulstandards (z.B. CommonJS, simplified CommonJS) sowie weitere Module-Loader (curl, Almond).

    In der Regel erzeugt man für JavaScript-Webanwendungen ein größeres Startpaket, welches zumindest für die erste Seite den nötigen Code enthält. Wenn es allerdings große Module gibt, die nicht initial benötigt werden, so würde man dafür ein weitere Pakete schnüren das on-demand laden. Was natürlich etwas dauert, sodass für den Benutzer eine Verzögerung entsteht.

    Siehe auch http://addyosmani.com/writing-modular-js/.

    Mathias

    1. Danke für die vielen Links.
      Hab mir den letzten Artikel mal ein wenig durchgeschaut. Ich denke das prinzip baut dabei auf einen "prelude" auf, der dynamisch das Javascript nach läd was man braucht.

      Umgeht man so den Browser Cache nicht? Werden die Dateien trotzdem noch gecached?

      In der Beziehung wäre eine autoload Funktion wie in php echt ne tolle Sache!

      Gruß
      Preluder
      T-Rex

      1. Umgeht man so den Browser Cache nicht?

        Nein. Es werden ganz normale HTTP-Requests abgesendet.

        Werden die Dateien trotzdem noch gecached?

        Klar, wenn der Server entsprechende Caching-Header sendet.

        In der Beziehung wäre eine autoload Funktion wie in php echt ne tolle Sache!

        Das ist etwas ganz anderes und das gibt es in JavaScript aus verschiedenen Gründen nicht.

        Ein Autoloader springt an, wenn auf eine nicht definierte Klasse verwiesen wird. Die Klasse wird dann synchron von der Festplatte geladen und dessen Code ausgeführt – i.d.R. ist das die lokale, physische Platte des Rechners, der gerade den Code ausführt. Das ist bei JavaScript schon einmal ganz anders, da alles über HTTP asynchron geladen wird. Außerdem gibt ECMAScript einen solchen Mechanismus nicht her.

        Klassen haben eindeutige Pfade, belegen aber auch immer einen globalen Namen im Programm. Gut, in PHP und Co. gibt es Namensräume und Module, was man in JavaScript auch abbilden könnte. Der Vorteil von AMD und CommonJS ist jedoch, dass man Objekte unter einem beliebigen lokalen Namen importieren kann.

        Mathias