D'après ce que j'ai compris, tout votre JavaScript est fusionné en un seul fichier. Rails fait cela par défaut lorsqu'il ajoute //= require_tree .
au bas de votre application.js
fichier manifeste.
Cela semble être un véritable gain de temps, mais je suis un peu préoccupé par le code JavaScript spécifique à la page. Ce code est-il exécuté sur chaque page ? La dernière chose que je souhaite, c'est que tous mes objets soient instanciés pour chaque page alors qu'ils ne sont nécessaires que sur une seule page.
De plus, n'y a-t-il pas un potentiel pour un code qui entre en conflit aussi ?
Ou vous mettez un petit script
en bas de la page qui appelle simplement une méthode qui exécute le code javascript de la page ?
N'avez-vous plus besoin de require.js alors ?
Merci
EDIT : J'apprécie toutes les réponses... et je ne pense pas qu'elles touchent vraiment au problème. Certaines parlent de style et ne semblent pas avoir de rapport avec le problème... et d'autres ne font que mentionner... javascript_include_tag
... dont je sais qu'il existe (évidemment...) mais il semblerait que la méthode Rails 3.1 consiste à regrouper tout votre JavaScript dans un seul fichier plutôt que de charger des JavaScript individuels en bas de chaque page.
La meilleure solution que j'ai trouvée est d'envelopper certaines fonctionnalités dans des fichiers div
tags avec id
ou class
es. Dans le code JavaScript, vous vérifiez simplement si le bouton id
o class
est sur la page, et s'il l'est, vous exécutez le code JavaScript qui lui est associé. Ainsi, si l'élément dynamique ne se trouve pas sur la page, le code JavaScript ne s'exécute pas, même s'il a été inclus dans le fichier massif. application.js
fichier emballé par Sprockets.
La solution que je propose ci-dessus présente l'avantage que si un champ de recherche est inclus dans 8 des 100 pages, il ne fonctionnera que sur ces 8 pages. Vous n'aurez pas non plus à inclure le même code sur 8 des pages du site. En fait, vous ne devrez plus jamais inclure de balises script manuelles sur votre site.
Je pense que c'est la réponse réelle à ma question.
11 votes
"La méthode Rails 3.1 consiste à regrouper tout votre Javascript dans un seul fichier plutôt que de charger des Javascript individuels en bas de chaque page" - Seulement parce que l'équipe centrale de Rails est, et a toujours été, très mauvaise dans la gestion de JavaScript. Les petits fichiers sont généralement meilleurs (voir mes commentaires ailleurs). Lorsqu'il s'agit de JavaScript, la méthode Rails est rarement la bonne (à l'exception du pipeline d'actifs, qui déchire, et de l'encouragement de CoffeeScript).
0 votes
Donc vous allez inclure vos fichiers js spécifiques à chaque page sur chaque page ? Je pense que c'est du gaspillage, je suis plus d'accord avec la réponse de ClosureCowboy.
1 votes
Avez-vous jeté un coup d'œil à la réponse acceptée pour cette question ? stackoverflow.com/questions/6571753/
0 votes
Psh pense que je vais m'en tenir à Require.js :) Il y a un compilateur pour RequireJS qui regroupe les fichiers qui sont référencés par votre module.
0 votes
@beefjerky "Donc vous allez inclure vos fichiers js spécifiques à la page sur chaque page ?" Certainement pas. Sur chaque page, je n'inclus que les fichiers JS dont j'ai réellement besoin pour cette page. S'ils sont correctement modularisés, ils seront rapidement mis en cache par le navigateur.
0 votes
@Ziggy C'est peut-être cohérent, mais ce n'est pas bon. :)
0 votes
Pour ceux qui veulent comprendre pleinement comment cela fonctionne et ce qui est le mieux, veuillez lire railsapps.github.io/rails-javascript-include-external.html . C'est de loin la meilleure documentation que j'ai vue sur ce sujet. C'est une excellente lecture, non seulement pour Rails mais aussi pour toute personne travaillant dans le domaine du développement web. C'est pourquoi il est préférable de faire les choses à la manière de Rails. Je vais sûrement utiliser Unholy Rails pour mes futures questions. --Note : Il s'agit de mon commentaire à une question similaire pour ceux qui l'ont déjà vu auparavant @MarnenLaibow-Koser Je pense que vous allez vraiment aimer cette lecture.
0 votes
@DutGRIFF Bien que cette discussion soit l'une des meilleures que j'aie vues sur un sujet souvent mal compris, elle encourage exactement le genre de gros fichiers JS que je préconise d'éviter. Lisez-le pour sa discussion sur le pipeline, mais ignorez ses recommandations.
1 votes
@DutGRIFF En d'autres termes : non, il n'est pas préférable de faire les choses à la manière de Rails dans ce cas (ou du moins, ne mettez pas tout dans
application.js
), et en fait, la référence que vous avez fournie explique pourquoi il en est ainsi : le téléchargement est la partie la plus lente du processus d'exécution des JS. De nombreux petits fichiers sont plus faciles à mettre en cache qu'un gros fichier. Les gens de Unholy Rails ne semblent donc pas se rendre compte que leurs recommandations sont incompatibles avec les principes auxquels ils essaient d'adhérer, et que leurs recommandations ne doivent donc pas être prises au sérieux.0 votes
Je suis d'accord avec une grande partie de ce que vous dites. Je peux certainement voir où un grand site avec beaucoup de scripts spécifiques de page aurait des problèmes avec le fichier JS de cuisine-écran mais une fois qu'il cache il pourrait être une bonne chose pour le reste de ce site. Je n'aimerais pas avoir à charger un fichier JS extrêmement volumineux sur mon appareil mobile (Internet lent) juste pour suivre un lien vers un autre site. Par exemple, pour payer ma facture Harley. Bonne information. Merci.
1 votes
@DutGRIFF Non, un gros fichier JS ne serait normalement pas une bonne chose, même une fois mis en cache. Voir mes commentaires ailleurs sur cette page : les petits fichiers peuvent mieux cibler des pages spécifiques, et peuvent être mis en cache à une granularité plus fine. Je ne vois pas de bon cas d'utilisation pour un grand fichier unique, à moins qu'il n'y ait pas de code spécifique à la page. du tout .
0 votes
Même chose pour Rails 3 : stackoverflow.com/questions/3437585/
0 votes
Si vous utilisez le pipeline d'actifs et l'implémentation de coffee script, vous pouvez convertir js en coffeescript ici. js2coffee.org