tutorial software rails ejemplos descargar curso caracteristicas ruby-on-rails

ruby-on-rails - software - ruby on rails tutorial



Diagnosticar la causa de la representación de vista lenta (5)

No estoy seguro de cuándo comenzó esto, pero algo inusual está sucediendo en mi aplicación (ejecutada localmente en una máquina de desarrollo). De repente, veo mensajes como:

Started GET "/" for 127.0.0.1 at 2013-03-10 12:10:24 +1300 Processing by PagesController#home as HTML Rendered pages/home.html.erb within layouts/application (2.4ms) Completed 200 OK in 3242ms (Views: 3241.4ms | ActiveRecord: 0.0ms)

Como puede ver 3 segundos para cargar la página de inicio (una página relativamente simple) ... No estamos hablando de una recarga de página dura ... simplemente haciendo clic en el enlace "inicio" nuevamente desde otra página.

No estoy seguro de dónde comenzar aquí, pero esta es mi aplicación.rb:

#config/boot.rb is loaded require File.expand_path(''../boot'', __FILE__) require ''rails/all'' if defined?(Bundler) Bundler.require(*Rails.groups(:assets => %w(development test))) end module Goodsounds class Application < Rails::Application config.encoding = "utf-8" config.filter_parameters += [:password] config.assets.initialize_on_precompile = false config.assets.enabled = true config.action_controller.assets_dir = "#{File.dirname(File.dirname(__FILE__))}/public" config.assets.version = ''1.0'' config.autoload_paths += Dir["#{Rails.root}/lib/modules"] config.assets.paths += Dir["#{Rails.root}/app/assets/fonts/*"] config.assets.precompile += %w( .svg .eot .woff .ttf ) end end

... y dev.rb:

Goodsounds::Application.configure do # Settings specified here will take precedence over those in config/application.rb Paperclip.options[:command_path] = "/usr/bin/" config.action_mailer.default_url_options = { :host => ''localhost:3000'' } config.action_mailer.raise_delivery_errors = true # set delivery method to :smtp, :sendmail or :test config.action_mailer.delivery_method = :smtp # these options are only needed if you choose smtp delivery config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 } # In the development environment your application''s code is reloaded on # every request. This slows down response time but is perfect for development # since you don''t have to restart the web server when you make code changes. config.cache_classes = false # Log error messages when you accidentally call methods on nil. config.whiny_nils = true # Show full error reports and disable caching config.consider_all_requests_local = true config.action_controller.perform_caching = false # Print deprecation notices to the Rails logger config.active_support.deprecation = :log # Only use best-standards-support built into browsers config.action_dispatch.best_standards_support = :builtin # Raise exception on mass assignment protection for Active Record models config.active_re cord.mass_assignment_sanitizer = :strict # Log the query plan for queries taking more than this (works # with SQLite, MySQL, and PostgreSQL) config.active_record.auto_explain_threshold_in_seconds = 0.5 # Do not compress assets config.assets.compress = false # Expands the lines which load the assets config.assets.debug = true end

EDITAR:

OK, esto es lo que estoy viendo en una nueva reliquia. Aunque no me ayuda mucho. ¿Alguna idea?

Ah, y lo que aprendí de la línea de tiempo de Chrome:

Send Request - Details Duration 0 (at 655 ms) Resource localhost Request Method GET Receive Response - Details Duration 0.043 ms (at 4.17 s) Resource localhost Status Code 200 MIME Type text/html Receive Data - Details Duration 176.329 ms (at 4.17 s) Self Time 7.037 ms CPU Time 176.329 ms Aggregated Time 061.194 ms114.664 ms0.471 ms0 Resource localhost Encoded Data Length 303 Bytes Used Heap Size 29.1 MB (+5.7 MB) Finish Loading - Details Duration 0 (at 4.35 s) Resource localhost

Por cierto deshabilité la gema quiet_assets para ver lo que pude descubrir en la terminal ... de nuevo ... no es útil:

Started GET "/" for 127.0.0.1 at 2013-03-10 21:46:40 +1300 Processing by PagesController#home as HTML Rendered pages/home.html.erb within layouts/application (43.4ms) Completed 200 OK in 3501ms (Views: 3480.9ms | ActiveRecord: 19.4ms) Started GET "/assets/dataTables/jquery.dataTables.bootstrap.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /dataTables/jquery.dataTables.bootstrap.css - 304 Not Modified (11ms) Started GET "/assets/chosen.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /chosen.css - 304 Not Modified (5ms) Started GET "/assets/select2.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /select2.css - 304 Not Modified (4ms) Started GET "/assets/autocomplete.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /autocomplete.css - 304 Not Modified (1ms) Started GET "/assets/branches.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /branches.css - 304 Not Modified (2ms) Started GET "/assets/bubbles.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bubbles.css - 304 Not Modified (1ms) Started GET "/assets/business_show.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /business_show.css - 304 Not Modified (1ms) Started GET "/assets/chunkyfive_font.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /chunkyfive_font.css - 304 Not Modified (1ms) Started GET "/assets/consumer_show.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /consumer_show.css - 304 Not Modified (2ms) Started GET "/assets/datatable_styling.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /datatable_styling.css - 304 Not Modified (1ms) Started GET "/assets/datepicker.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /datepicker.css - 304 Not Modified (2ms) Started GET "/assets/devise_links.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /devise_links.css - 304 Not Modified (1ms) Started GET "/assets/dispenser_show.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /dispenser_show.css - 304 Not Modified (1ms) Started GET "/assets/fonts.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /fonts.css - 304 Not Modified (1ms) Started GET "/assets/forms.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /forms.css - 304 Not Modified (2ms) Started GET "/assets/gmaps4rails.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails.css - 304 Not Modified (1ms) Started GET "/assets/jquery-ui-1.10.0.custom.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jquery-ui-1.10.0.custom.css - 304 Not Modified (2ms) Started GET "/assets/jumbotrons.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jumbotrons.css - 304 Not Modified (1ms) Started GET "/assets/layout.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /layout.css - 304 Not Modified (1ms) Started GET "/assets/open_sans.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /open_sans.css - 304 Not Modified (2ms) Started GET "/assets/popover.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /popover.css - 304 Not Modified (1ms) Started GET "/assets/reviews.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /reviews.css - 304 Not Modified (1ms) Started GET "/assets/spinner.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /spinner.css - 304 Not Modified (2ms) Started GET "/assets/style_show.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /style_show.css - 304 Not Modified (2ms) Started GET "/assets/style_show_reviews.css?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /style_show_reviews.css - 304 Not Modified (2ms) Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jquery.js - 304 Not Modified (3ms) Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jquery_ujs.js - 304 Not Modified (3ms) Started GET "/assets/ui.custom.min.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /ui.custom.min.js - 304 Not Modified (1ms) Started GET "/assets/bootstrap-transition.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-transition.js - 304 Not Modified (5ms) Started GET "/assets/bootstrap-affix.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-affix.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-alert.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-alert.js - 304 Not Modified (4ms) Started GET "/assets/bootstrap-button.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-button.js - 304 Not Modified (5ms) Started GET "/assets/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-carousel.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-collapse.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-dropdown.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-dropdown.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-modal.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-modal.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-scrollspy.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-scrollspy.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-tab.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-tab.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap-tooltip.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-tooltip.js - 304 Not Modified (5ms) Started GET "/assets/bootstrap-popover.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-popover.js - 304 Not Modified (52ms) Started GET "/assets/bootstrap-typeahead.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap-typeahead.js - 304 Not Modified (3ms) Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /bootstrap.js - 304 Not Modified (13ms) Started GET "/assets/gmaps4rails/gmaps4rails.base.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails/gmaps4rails.base.js - 304 Not Modified (1ms) Started GET "/assets/gmaps4rails/gmaps4rails.bing.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails/gmaps4rails.bing.js - 304 Not Modified (2ms) Started GET "/assets/gmaps4rails/gmaps4rails.googlemaps.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails/gmaps4rails.googlemaps.js - 304 Not Modified (2ms) Started GET "/assets/gmaps4rails/gmaps4rails.mapquest.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails/gmaps4rails.mapquest.js - 304 Not Modified (2ms) Started GET "/assets/gmaps4rails/gmaps4rails.openlayers.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /gmaps4rails/gmaps4rails.openlayers.js - 304 Not Modified (2ms) Started GET "/assets/jqueryplugins/addresspicker.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/addresspicker.js - 304 Not Modified (2ms) Started GET "/assets/jqueryplugins/browser_detect.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/browser_detect.js - 304 Not Modified (3ms) Started GET "/assets/jqueryplugins/charts.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/charts.js - 304 Not Modified (2ms) Started GET "/assets/jqueryplugins/jquery.alphanumeric.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/jquery.alphanumeric.js - 304 Not Modified (1ms) Started GET "/assets/jqueryplugins/jquery.formrestrict.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/jquery.formrestrict.js - 304 Not Modified (2ms) Started GET "/assets/jqueryplugins/jquery.lazyload.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/jquery.lazyload.js - 304 Not Modified (1ms) Started GET "/assets/jqueryplugins/raty.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /jqueryplugins/raty.js - 304 Not Modified (2ms) Started GET "/assets/dataTables/jquery.dataTables.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /dataTables/jquery.dataTables.js - 304 Not Modified (13ms) Started GET "/assets/dataTables/jquery.dataTables.bootstrap.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /dataTables/jquery.dataTables.bootstrap.js - 304 Not Modified (63ms) Started GET "/assets/lib/abstract-chosen.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /lib/abstract-chosen.js - 304 Not Modified (12ms) Started GET "/assets/lib/select-parser.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /lib/select-parser.js - 304 Not Modified (12ms) Started GET "/assets/chosen.jquery.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /chosen.jquery.js - 304 Not Modified (8ms) Started GET "/assets/chosen-jquery.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /chosen-jquery.js - 304 Not Modified (9ms) Started GET "/assets/select2.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /select2.js - 304 Not Modified (7ms) Started GET "/assets/highcharts.js?body=1" for 127.0.0.1 at 2013-03-10 21:46:44 +1300 Served asset /highcharts.js - 304 Not Modified (1ms)

Por cierto, según una sugerencia en reddit precompilé activos y ejecuté el servidor. Al ver fantásticas velocidades:

Processing by PagesController#home as HTML Rendered pages/home.html.erb within layouts/application (1.1ms) Completed 200 OK in 6ms (Views: 5.4ms | ActiveRecord: 0.0ms)

Ok, no estoy seguro si esto proporciona alguna ayuda o no, pero la mayor demora ocurre entre estas dos líneas de código en la pila:

From: /home/funkdified/.rvm/gems/ruby-1.9.3-p392@goodsounds/gems/actionpack-3.2.13.rc1/lib/action_controller/metal/implicit_render.rb @ line 5 ActionController::ImplicitRender#send_action: 3: def send_action(method, *args) 4: ret = super => 5: default_render unless response_body 6: ret 7: end [2] pry(#<PagesController>)> next

MAYOR RETRASO

From: /home/funkdified/.rvm/gems/ruby-1.9.3-p392@goodsounds/gems/actionpack-3.2.13.rc1/lib/action_controller/metal/implicit_render.rb @ line 6 ActionController::ImplicitRender#send_action: 3: def send_action(method, *args) 4: ret = super 5: default_render unless response_body => 6: ret 7: end



Echa un vistazo a NewRelic.com : cuesta, pero la NewRelic.com prueba gratuita te permitirá analizar completamente tu aplicación y averiguar dónde están los cuellos de botella.

Además de New Relic, ejecuta los controles habituales, por ejemplo, ¿cuándo comenzó? ¿Qué has cambiado recientemente? ¿Has actualizado Rails y / o gemas? Echa un vistazo y ejecuta algunas versiones anteriores desde tu control de origen e intenta averiguar qué commit ha causado el problema.

¿El problema ocurre con todos los navegadores? Intenta encender el visor de línea de tiempo de Chrome y podrás ver si el navegador se está quedando atrapado en un fragmento de JavaScript en particular.

También intente cambiar el servidor web de desarrollo local a delgado, ¿el problema persiste?

¡Buena suerte!


El mismo problema me ha surgido en los rieles 4.1+. La respuesta de Abram es solo parcialmente completa.

Puede dejar config.assets.debug = true pero debería desactivar la característica de verificación de nuevos activos

# Adds additional error checking when serving assets at runtime. # Checks for improperly declared sprockets dependencies. # Raises helpful error messages. config.assets.raise_runtime_errors = false

La solución con config.assets.debug deshabilitado solo funciona porque compila activos una vez y los activos se verifican una vez. La verificación de activos es donde se gasta la mayor parte del tiempo.


Ok, lo descubrí (por fin). Sin cambiar ninguno de mis activos reales, ahora veo que esto es desarrollo:

Started GET "/" for 127.0.0.1 at 2013-03-11 23:14:33 +1300 Processing by PagesController#home as HTML Rendered pages/home.html.erb within layouts/application (1.3ms)

Resulta que el retraso fue causado por config.assets.debug = true dentro de development.rb. Establecer esto en false resuelve el problema.

Parece que el equipo central de Rails debatió apagar esto por defecto , pero decidió no hacerlo. En el futuro, me encantaría que pongan algo en la sección de comentarios de development.rb para informar a los usuarios del potencial de retrasos significativos.

Puedo sugerir lo siguiente:

# Expands the lines which load the assets # May cause significant delays in view rendering

¡Genial, me escucharon murmurar y actualizar los rieles !


Si vienes de los rieles 3.2.13, ten en cuenta que un grupo de personas ha experimentado este problema y volver a 3.2.12 parece resolverlo. Puede encontrar más información aquí en github .

En mi caso, deshabilitar config.assets.debug aceleró un poco, pero volviendo a 3.2.12 el tiempo de solicitud disminuyó de alrededor de 4 segundos a alrededor de 250 ms.