25 Stimmen

Rails 3: gute Faustregel für wo Javascript zu setzen?

Beim Schreiben von Javascript für eine bestimmte Seite in einer Website, wenn Sie wollen, um das Javascript in eine Funktion und schließen Sie es in application.js ?

Ich habe Vorschläge gesehen darüber, dies zu tun (und minifying oder gzip-ing), um HTTP-Anfragen zu minimieren. Das macht Sinn, aber was ist mit der Wartungsfreundlichkeit? Wenn ich js-Code habe, der für eine Ansicht spezifisch ist, scheint es mehr Arbeit zu sein, sich mit einem potenziell umfangreichen application.js . Dieser Code könnte in diese Ansicht eingebettet oder in eine eigene .js (oder .js.erb o .rjs ) Datei in diesem Ansichtsordner.

Ich habe eine andere Anregung dass Rails automatisch das gesamte Javascript in einer Datei zusammenfasst. Ist dies wahr?

TLDR: wie viel oder wie wenig sollte ein Entwickler Sorgen über die Optimierung beim Schreiben von Javascript?

48voto

Eric Hu Punkte 17730

Da ich seit etwa einem Monat keine Antwort mehr gesehen habe, werde ich diese Frage nach bestem Wissen und Gewissen beantworten.

Rails 3.1 (derzeit Release Candidate 4) führt ein Ritzel , die alle Javascript in einem Rails-Projekt in eine Datei kompiliert. Es kommt sogar mit Tools zu minify und komprimieren Javascript, so dass es alle an den Client auf einmal geliefert wird.

Verwandt mit Sprockets ist die Rails 3.1 Asset-Pipeline. Wie ich verstehe, ist es eine Ordnerhierarchie/Abstraktion. Javascripts können in 3 Ordnern abgelegt werden:

/apps/assets/javscripts/
Spezifische Javascript-Dateien für die Anwendung, einschließlich application.js . Diese sollte nur das Manifest der Javascript-Dateien enthalten, die Sie in Ihr Projekt aufnehmen wollen. Die rails new Tool wird diese Datei generieren und jquery in das Manifest aufnehmen.

/lib/assets/javascripts/
Vom Entwickler geschriebene Javascript-Dateien, die eher für allgemeine Zwecke bestimmt sind. (Mein Eindruck ist, dass dies für Javascript-Bibliotheken sein würde, die Sie entwickeln, um sie in mehrere Anwendungen einzubinden)

/vendor/assets/javascripts/
Javascript-Dateien von Dritten (z. B. JQuery, Modernizr)

Alle Dateien in diesen Ordnern erscheinen auf dem Client innerhalb von /assets/ und abstrahiert die serverseitigen Dateipfade. Ich nehme an, dies soll dem Entwickler helfen, Javascript-Dateien zu organisieren.

Um meine eigene Frage zu beantworten

  • Legen Sie Javascript-Funktionen in separate Dateien, gruppieren Sie sie logisch. Meine Testanwendung zeigte, dass Unterordner innerhalb von .../assets/javascripts/ sind in Ordnung wenn und nur wenn wird der Pfad des Unterordners in das Manifest aufgenommen.
    • D.h. Putting //= subfolder/js_file im Manifest wird funktionieren. setzen //= js_file wird nicht, wenn js_file ist innen .../javascripts/subfolder/
    • DHH erwähnt in seinem Vortrag (unten verlinkt) eine "Regel der 13". Wenn die Anzahl der Javascripts in einem Ordner 13 übersteigt, wird er unübersichtlich und unhandlich. Dies wäre ein guter Zeitpunkt, um Javascript-Dateien in Unterordnern zu gruppieren.
  • Verwenden Sie den in Rails 3.1 eingebauten Minifier und Kompressor (oder installieren Sie ein bevorzugtes Gem)
  • Refactor javascript code from time to time. Funktionen verschieben nach /lib/assets/javascripts/ im Laufe der Zeit. (Das Ziel ist es, schließlich zu erkennen, wenn Sie allgemeine Javascript-Funktionen im Gegensatz zu anwendungsspezifischen Funktionen schreiben wollen, und diesen Refactor-Schritt zu eliminieren)

Weitere Ressourcen

ein Blogbeitrag über alle Änderungen in Rails 3.1
DHH's Vortrag über Rails 3.1 Änderungen, 16. Mai 2011 (~1 Std.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X