MISE À JOUR 2 Il s'agit d'un bug ou d'une fonctionnalité connus avec la façon dont Ruby 1.9.2 charge les fichiers. http://twitter.com/#!/rails/status/72801149769621504Le temps de démarrage du serveur de l'application Rails 3 est long
mise à jour: Cela a commencé comme une question, mais après avoir travaillé sur ce point pour un peu je pense qu'il pourrait ne pas être réparable. Je pensais que je posterais ceci au cas où quelqu'un d'autre voit la même chose et se demande ce qui se passe à l'intérieur des rails et du bundler.
Quelqu'un d'autre voit-il de longs temps de chargement dans ses applications Rails 3? J'ai placé des temporisations dans environment.rb, application.rb, boot.rb et railties/lib/rails/initializable.rb. Le temps est mesuré en secondes et le temps écoulé est le temps écoulé depuis la dernière heure enregistrée. Le temps de chargement de la production prend un peu plus de temps. En partie à cause de moins de matériel et aussi de eager_load! (et peut-être de Thin vs Mongrel). On dirait que Bundler prend une grosse partie du temps de chargement et je suppose que c'est à prévoir. J'ai testé l'une des applications en dev et prod, et une application vide en dev. J'ai testé 2 serveurs d'application juste pour voir si c'était Thin le causant. Je vois aussi des choses similaires avec Passenger dans prod (qui le rend inutilisable b/c de comportement de reproduction en 2.2.15). J'ai testé contre Rails de bord et la performance en dev était légèrement pire 14.5s vs 14.2s. Si je supprime mes dépendances de test, cela économise 2-3 secondes, mais cela n'aide pas lorsque j'exécute des tests. Je suppose qu'il est juste un peu ennuyeux d'attendre 5 minutes pour que toutes mes instances Thin redémarrent et j'attends 15 secondes avant que mes tests ne soient exécutés, mais c'est un compromis acceptable à ce stade en raison de la productivité que je gagne avec Rails. des idées pour accélérer les choses, je suis tout ouïe. Voici les résultats des tests:
Note: mon application Rails 2.3 chargés en moins de 3 secondes dev (bien que je l'ai converti un peu du code aux moteurs et a ajouté haml et twitter_oauth gemmes depuis le passage à rails3)
** Tous les tests effectués avec Rails et Ruby 3RC 1.9.2rc2
Prod avec Thin - CentOS 5.5, Rackspace serveur cloud 2 Go instance
App test n ° 1 avec 24 dépendances de pierres précieuses
start env.rb - Total=0 start app.rb - 0.00110546 elapsed. Total=0.001180052 start boot.rb - 0.000600488 elapsed. Total=0.00178644 end boot.rb - 0.7935529 elapsed. Total=0.795507318 start require rails/all - 0.000189127 elapsed. Total=0.795701199 end require rails/all - 1.086998364 elapsed. Total=1.882735263 start Bundler require - 0.000109708 elapsed. Total=1.88285043 end Bundler require - 8.955853243 elapsed. Total=10.838746673 end app.rb - 0.062975913 elapsed. Total=10.901753753 # /railties-3.0.0.rc/lib/rails/initializable.rb start run initializers - 0.000145906 elapsed. Total=10.901910186 load_environment_config - 0.116689774 elapsed. Total=11.018632298 initialize_cache - 0.246161343 elapsed. Total=11.320543397 active_record.initialize_database - 0.080047485 elapsed. Total=11.400961893 bootstrap_hook - 1.034189984 elapsed. Total=12.451309104 active_support.initialize_time_zone - 1.969821814 elapsed. Total=14.448777651 action_controller.set_configs - 0.594991537 elapsed. Total=15.044692126 will_paginate.active_record - 0.324460921 elapsed. Total=15.386837641 will_paginate.action_view - 1.904889132 elapsed. Total=17.328981523 add_view_paths - 0.087811847 elapsed. Total=17.42011881 load_init_rb - 0.151282681 elapsed. Total=17.709093173 load_init_rb - 0.362241273 elapsed. Total=18.071865548 load_config_initializers - 0.144051305 elapsed. Total=18.217433492 build_middleware_stack - 2.569453884 elapsed. Total=20.826842081 eager_load! - 4.165919064 elapsed. Total=24.99280168 finisher_hook - 0.48795935 elapsed. Total=25.480807439 repopulate_roles - 0.504085662 elapsed. Total=25.984901297 end run initializers - ~0.00005 elapsed. Total=25.985617783 end env.rb - ~0.00006 elapsed. Total=25.985683903
Dev avec Mongrel - Max OS X 10.5.8, 2,66 Core2duo, 4 Go de RAM
App Test n ° 1 avec 24 gem dépendances
start boot.rb (Bundler.setup) - 2.0e-05 elapsed. Total=3.1e-05 end boot.rb (Bundler.setup) - 2.352435 elapsed. Total=2.352915 start app.rb - 0.084945 elapsed. Total=2.437866 start require rails/all - 0.000181 elapsed. Total=2.438049 end require rails/all - 0.489425 elapsed. Total=2.927485 start Bundler.require(:default, Rails.env) - 5.6e-05 elapsed. Total=2.927544 end Bundler.require(:default, Rails.env) - 5.16162 elapsed. Total=8.089177 end app.rb - 0.025972 elapsed. Total=8.11516 start env.rb - 0.084153 elapsed. Total=8.199329 # /railties-3.0.0.rc/lib/rails/initializable.rb start run_initializers - 0.002709 elapsed. Total=8.202042 initialize_cache - 0.089231 elapsed. Total=8.518005 bootstrap_hook - 0.602342 elapsed. Total=9.192564 active_support.initialize_time_zone - 0.901676 elapsed. Total=10.10115 action_controller.set_configs - 0.375864 elapsed. Total=10.477565 will_paginate.active_record - 0.207447 elapsed. Total=10.694479 will_paginate.action_view - 1.041412 elapsed. Total=11.75974 load_init_rb - 0.051938 elapsed. Total=11.879547 load_init_rb - 0.082936 elapsed. Total=12.001311 load_init_rb - 0.18798 elapsed. Total=12.189555 load_config_initializers - 0.079461 elapsed. Total=12.269971 build_middleware_stack - 1.390042 elapsed. Total=13.729273 finisher_hook - 0.082274 elapsed. Total=13.811648 repopulate_roles - 0.350287 elapsed. Total=14.161941 end run_initializers - 3.0e-06 elapsed. Total=14.177869 end env.rb - 0.000127 elapsed. Total=14.178002
Dev avec Mongrel Test App # 2 avec 2 dépendances joyau
start boot.rb (Bundler.setup) - Total=0 end boot.rb (Bundler.setup) - 1.724158 elapsed. Total=1.724199 start app.rb - 0.041006 elapsed. Total=1.765211 start require rails - 0.000151 elapsed. Total=1.765364 end require rails - 0.360051 elapsed. Total=2.125426 start Bundler.require(:default, Rails.env) - 5.5e-05 elapsed. Total=2.125485 end Bundler.require(:default, Rails.env) - 0.008396 elapsed. Total=2.133889 end app.rb - 0.007805 elapsed. Total=2.141704 start env.rb - 0.16541 elapsed. Total=2.307128 start run_initializers - 0.00031 elapsed. Total=2.307442 load_active_support - 0.24045 elapsed. Total=2.579421 active_support.initialize_time_zone - 0.206237 elapsed. Total=2.837663 action_controller.deprecated_routes - 0.210291 elapsed. Total=3.048634 build_middleware_stack - 0.220663 elapsed. Total=3.273035 end run_initializers - 3.0e-06 elapsed. Total=3.29339 end env.rb - 8.7e-05 elapsed. Total=3.293483
Il est très gentil de votre part de partager les résultats de votre expérience. Je ne suis pas sûr de la version de Ruby que vous utilisez, mais je suppose que Ruby> = 1.9 accélérera un peu les choses. –
J'utilise Ruby 1.9.2. La performance est le résultat du chargement des gemmes et seulement de la modularité de l'ossature des rails. Plus vous avez de dépendances, plus il vous faudra de temps pour démarrer votre application, ce qui est logique. Je doute que l'équipe de base puisse faire beaucoup pour accélérer cela ... du moins pas à court terme. – johnmcaliley
Je me demande pourquoi Rails 2 sans approche si modulaire a démarré tellement plus vite ... Alors peut-être la question devrait être: pourquoi est-ce que ça prend autant de temps pour que le bundler charge toutes les dépendances? Est-ce que cela résout ces problèmes ou les charge-t-il aveuglément? Je suppose que si nous pouvions désactiver toutes les intelligences du bundle et 'charger' les dépendances cela accélérerait les choses ... –