192 votes

config.les actifs.compiler=true dans les Rails de la production, pourquoi pas?

La valeur par défaut application Rails installés en rails new a config.assets.compile = false de la production.

Et de la façon habituelle de faire les choses consiste à exécuter rake assets:precompile avant de déployer votre application, assurez-vous que tous les actifs actifs pipeliniers sont compilés.

Donc ce qui arrive si j'ai mis en config.assets.compile = true de la production?

Je n'ai pas besoin d'exécuter precompile plus. Ce que je crois va arriver, c'est la première fois qu'un actif est demandé, il sera compilé. Ce sera un gain de performance que la première fois (et cela signifie que vous avez généralement besoin d'un js de l'exécution dans la production de le faire). Mais à part ces inconvénients, après l'immobilisation a été paresseusement compilé, je pense que tous les accès ultérieurs à l'actif aura pas de gain de performance, les performances de l'application sera exactement le même qu'avec précompilés actifs après cette phase initiale, le premier hit paresseux compilation. est-ce vrai?

Est-ce que je suis absent? D'autres raisons de ne pas fixer config.assets.compile = true de la production? Si j'ai un JS de l'exécution dans la production, et je suis prêt à prendre le compromis de la dégradation des performances pour le premier accès d'un actif en échange de ne pas avoir à courir en precompile, cela fait-il sens?

270voto

Richard Hulse Points 7610

J'ai écrit que peu de la guide.

Vous ne voulez certainement pas à vivre de la compilation de la production.

Lorsque vous avez de la compilation, c'est ce qui se passe:

Chaque requête pour un fichier dans /actifs est passé à Pignons. Sur la première demande pour chaque atout, il est compilé et mis en cache dans ce que Rails est à l'aide de cache (généralement le système de fichiers).

Sur les demandes ultérieures de Pignons reçoit la demande et a pour consulter les empreintes digitales, nom de fichier, vérifiez que le fichier (image) ou de fichiers(css et js) qui composent l'actif n'ont pas été modifiés, et puis si il y a une version en cache de servir.

C'est tout dans le dossier des actifs, et dans n'importe quel fournisseur/de l'actif des dossiers utilisés par les plugins.

C'est beaucoup de frais généraux que, pour être honnête, le code n'est pas optimisé pour la vitesse.

Cela aura un impact sur la vitesse de l'actif d'aller sur le fil pour le client, et aura un impact négatif sur le temps de chargement des pages de votre site.

Comparer avec la valeur par défaut:

Lorsque des actifs sont précompilés et compiler est éteint, les actifs sont compilés et les empreintes digitales à l' public/assets. Les pignons retourne un tableau de correspondance de la plaine d'empreintes digitales, les noms de fichiers pour les Rails, les Rails et écrit ce pour le système de fichiers. Le fichier manifeste (YML dans Rails 3 ou JSON avec une étude randomisée de nom dans les Rails 4) est chargé en Mémoire par les Rails lors du démarrage et de mise en cache pour une utilisation par l'actif des méthodes d'assistance.

Cela rend la génération de pages avec la bonne empreintes digitales actifs très rapide, et le service de fichiers eux-mêmes sont des web-serveur-de-la-système de fichiers rapide. À la fois beaucoup plus rapide que de vivre de la compilation.

Pour obtenir le maximum de profit de la canalisation et de la prise d'empreintes digitales, vous devez définir les futures têtes sur votre serveur web, et d'activer la compression gzip pour les fichiers css et js. Les pignons écrit au format gzip versions des actifs que vous pouvez configurer votre serveur à utiliser, en supprimant la nécessité pour elle de le faire pour chaque demande.

Cela actifs pour le client aussi vite que possible, et dans la plus petite taille possible, accélérant le côté client d'affichage des pages, et à la réduction à l'avenir d'en-tête) des demandes.

Donc, si vous êtes en direct de la compilation c'est:

  1. Très lent
  2. Manque de compression
  3. Aura un impact sur le temps de rendu de pages

Rapport

  1. Aussi vite que possible
  2. Comprimé
  3. Supprimer la compression entendu à partir du serveur (en option).
  4. Minimiser les temps de rendu de pages.

Edit: (Réponse à la suivre jusqu'commentaire)

Le pipeline peut être changé à précompiler sur la première demande, mais il ya certains grands barrages pour le faire. La première est qu'il y a une table de recherche pour les empreintes digitales, les noms ou les méthodes d'aide sont trop lents. En vertu d'une compilation sur demande senario il y aurait besoin d'être d'une certaine façon à ajouter à la table de recherche comme chaque nouveau actif est compilé ou à la demande.

Aussi, quelqu'un aurait à payer le prix de la lenteur de la livraison de l'actif pour une période indéterminée jusqu'à ce que tous les actifs sont compilés et mis en place.

Par défaut, lorsque le prix de la compilation de tout ce qui est payé en ligne en une seule fois, n'a pas d'impact public et s'assure que tout fonctionne avant de les choses vont vivre.

Le deal-breaker, c'est qu'il ajoute beaucoup de complexité pour les systèmes de production.

7voto

dbKooper Points 682

Pour avoir moins de frais généraux grâce à la Pré-compilation chose.

Precompile everything initially with these settings in production.rb
# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/

ensuite, vous pouvez simplement utiliser les images et les feuilles de style comme "/assets/la feuille de style.css"*.html.erb ou "/assets/web.png"

6voto

William Denniss Points 3781

Pour toute personne utilisant les Heroku:

Si vous déployez pour Herkou, il va faire la précompiler pour vous automatiquement lors de la déployer si compilé les actifs ne sont pas inclus (c - public/assets non validées) donc pas besoin d' config.assets.compile = true, ou de commettre précompilé actifs.

Heroku est docs sont ici. Un CDN est recommandé de supprimer la charge sur le dyno de ressources.

1voto

Mohammed Saleem Points 71

Ensemble config.asset.compile = false

Ajouter à votre Gemfile

group :assets do gem 'turbo-sprockets-rails3' end

Installer le bundle

Exécutez rake assets:precompile

Ensuite, Démarrez votre serveur

0voto

Sergio Tulentsev Points 82783

De l'officiel du guide:

Sur la première demande, les actifs sont regroupés et mis en cache comme indiqué dans le développement ci-dessus, et le manifeste des noms utilisés dans les helpers sont modifiés de façon à inclure le hachage MD5.

Les pignons définit également le Contrôle du Cache HTTP en-tête max-age=31536000. Ce signal tous les caches entre votre serveur et le navigateur du client que ce contenu (le fichier servi) peut être mis en cache pour 1 an. L'effet de ceci est de réduire le nombre de requêtes pour cet actif à partir de votre serveur; l'actif a une bonne chance d'être dans le cache du navigateur local ou certains intermédiaires cache.

Ce mode utilise plus de mémoire, effectue plus pauvres que la valeur par défaut et n'est pas recommandé.

Aussi, précompiler étape n'est pas mal du tout si vous utilisez Capistrano pour votre déploie. Il prend soin de lui pour vous. Vous venez d'exécuter

cap deploy

ou (selon votre configuration)

cap production deploy

et vous êtes tous ensemble. Si vous n'avez toujours pas l'utiliser, je vous recommande vivement de vérifier it out.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X