Javascript inclus la meilleure pratique de balises dans une application Rails

Disons que je dois appeler un fichier javascript dans <head> d'un modèle ERb. Mon instinct est de faire l'habitude:

 <head> <%= javascript_include_tag :defaults %> <!-- For example --> </head> 

Dans la mise en page de ma demande. Le problème est évidemment que ces fichiers javascript sont chargés dans chaque page de ma application, qu'ils soient ou non nécessaires pour la page affichée.

Donc, ce que je me demande, c'est s'il existe un bon moyen de charger un javascript dans les en-têtes de, par exemple, tous les modèles ERb trouvés uniquement dans un répertoire spécifique.

J'utiliserais content_for .

Par exemple, spécifiez l'endroit pour l'insérer dans la mise en page de l'application:

 <head> <title>Merry Christmas!</title> <%= yield(:head) -%> </head> 

Et envoyez-le à partir d'une vue:

 <%- content_for(:head) do -%> <%= javascript_include_tag :defaults -%> <%- end -%> 

Je pense qu'il n'y a rien de mal, y compris tous les défauts de votre année car ils peuvent ensuite être mis en cache sur le navigateur de l'utilisateur.

Je suggère de ne pas ajouter javascript dans l'en-tête car il entraîne la charge de la page plus lentement. Plutôt charger les js au bas de la page, ce qui est plus rapide. http://developer.yahoo.com/performance/rules.html#js_bottom

 <body> .... <%= yield(:js) -%> </body> 

Et envoyez-le à partir d'une vue:

 <%- content_for(:js) do -%> <%= javascript_include_tag :defaults -%> <%- end -%> 

J'ai généralement le suivant dans le fichier de mise en page:

 <head> <%= javascript_include_tag :defaults %> <!-- For example --> <%= @extra_head_content %> </head> 

Et ensuite, dans les vues:

 <% (@extra_head_content ||= "") += capture do %> <%= other_content %> <% end %> 

Voir la documentation de l'API pour #capture