Tengo una gran vista, que tarda mucho tiempo en terminar de representar el contenido. ¿Cuál es el mejor método para crear perfiles, qué parte de la vista toma más tiempo? He leído sobre ruby-prof, pero no estoy seguro de dónde ubicarlo, para perfilar el renderizado de la vista. Si existen otras opciones, quiero conocerlas también.Vista de perfil en Rails
Respuesta
Si no lo hizo, consulte primero la carpeta log
en la carpeta de la aplicación. Contiene archivos de registro para cada entorno de su aplicación.
Con el fin de perfilar una aplicación rieles, ponga sus pruebas a la carpeta your_app/test/profile
Esto no proporciona información acerca de qué parte de la vista toma más tiempo, y env/logs de la aplicación solo da tiempos difíciles, por ejemplo, cuánto tiempo tomó un parcial para representar. – astropanic
NewRelic y los registros son útiles, pero a veces se necesitan más. NewRelic tiene una herramienta gratuita que puede ayudarlo a cavar localmente, y herramientas como ruby-prof le brindarán información, pero puede ser difícil saber qué hacer con ella.
Encontré una página de registro en la aplicación de un cliente que era ridículamente lenta, sin motivo aparente. Los registros confirmaron que fue lento, y que la lentitud no se debió a la DB, pero no me ayudó a ver cuál era el problema.
https://github.com/brynary/rack-bug/
es más fácil de usar que ruby-prof, y se puede activar/desactivar rápidamente cuando se necesita para sumergirse en algo. Lo uso todo el tiempo cuando ayudo a las personas a ajustar sus aplicaciones de Rails. Me ayudó a entender qué parcial era lento, y con un poco de prueba y error, descubrí que era el menú desplegable para zonas horarias en la página de registro
En una página estaba (la versión lenta): <% = time_zone_select: usuario,:. time_zone, tzinfo :: Country.get ("US") zonas, {}%>
y otro fue: <% = f.time_zone_select: TIME_ZONE, ActiveSupport :: TimeZone.us_zones, : predeterminado => "Hora del Pacífico (EE. UU. & Canadá)"%>
Mis números de antes/después:
orig template render 1392.91
fixed template render 165.56
fixed on REE instead of 1.8.7 100.70
No profundicé más, ya que tenía otros problemas que corregir, pero sería posible almacenar en caché las zonas horarias y obtener una respuesta aún más rápida.
¿cómo terminaste arreglando esto? Estamos viendo lo mismo: hay 4 páginas en nuestra aplicación que procesan zonas horarias (solo en EE. UU.) Y, de manera consistente, tardan más de 1200ms en renderizarse. Saca la línea y es como 140ms en total. –
Acabo de usar ActiveSupport :: TimeZone.us_zones en lugar de zonas TZInfo :: Country.get ("EE. UU.). –
Impar: en realidad estábamos usando ActiveSupport :: TimeZone.us_zones. Por si fuera poco, esto podría ayudar, de hecho agregamos un inicializador a la aplicación para cargar las zonas horarias, simplemente configúralo como una variable local. Lo que encontramos es que la primera llamada para cargar las zonas horarias tomó para siempre, pero después de eso fueron ágiles. Por lo tanto, agregar la llamada al inicializador solucionó el problema para nosotros: toma un segundo extra para cargar la aplicación, pero no afecta el rendimiento. –
Es bastante fácil, en realidad. Acabo de encontrar y solucionó un problema de rendimiento con una plantilla HAML usando ruby-prof
. La parte pertinente de la plantilla se veía algo así como:
- @collection.each do |x|
= render :partial => 'name', :locals => {:object => x}
Me aseguré ruby-prof
fue en el Gemfile y temporalmente cambió eso a:
- require 'ruby-prof'
- RubyProf.start
- @collection.each do |x|
= render :partial => 'name', :locals => {:object => x}
- result = RubyProf.stop
- printer = RubyProf::CallStackPrinter.new(result)
- file = File.open('profile.html', 'w')
- printer.print(file)
- file.close
continuación, arranque la aplicación, golpeó la página un par de veces y abra el recién creado profile.html
en mi navegador para ver qué parte estaba causando el problema.
gracias por esto - Me quedé atrapado con un problema de visión lenta, e hice exactamente esto para encontrar mi problema. FWIW: mi problema era una tabla de entradas con una columna que podría editarse utilizando best_in_place. ¡Resulta que tener un campo de bip con una gran lista de opciones para cada fila no se renderiza tan rápido! –
La manera más fácil de llegar rápidamente al cuello de botella es utilizando el modo NewRelics Developer que funciona localmente.
- Asegúrese de que tiene
ruby-prof
ynewrelic_rpm
en su Gemfile. - Vaya a
localhost:3000/newrelic
y empezar de perfiles (en la barra de la derecha) - Hacer una solicitud real a la página de la aplicación que quiere medir, posiblemente varias veces para asegurarse de que no se mide alguna almacenamiento en caché & cosas.
- Navegue de regreso al modo de desarrollador newrelic, seleccione el seguimiento de solicitud.
- Ordene la tabla por la columna "self". Esto es crucial ya que la clasificación predeterminada por tiempo total es engañosa.
- Mire en las 10 principales llamadas, cómo se llaman y es probable que encuentre el cuello de botella.
Descargo de responsabilidad: He introducido esta función de clasificación en el modo de desarrollador de newrelic, por lo que soy parcial. Sin embargo, inténtalo si mismo.
- 1. Caché de vista de preconstrucción en Rails
- 2. ¿Cómo puedo crear un perfil de una solicitud en Ruby on Rails?
- 3. Perfil Objeto + Ver Modelo + Actualizar Perfil de usuario MVC C#
- 4. Uso de varios controladores en una vista en Rails
- 5. Comprobación de nil en vista en Ruby on Rails
- 6. Rails 3: Variable de pantalla del controlador en la vista
- 7. Perfil de Maven - Activar el perfil según el embalaje
- 8. Configuración de aprovisionamiento perfil
- 9. perfil código de Java
- 10. Aplicación de perfil WPF
- 11. En Rails, ¿cómo renderizas JSON usando una vista?
- 12. Dos controladores para una vista compartida en Ruby on Rails
- 13. ¿Cómo puedo hacer un perfil de arranque de una aplicación de Rails?
- 14. Rails 3, encuentra la vista actual en el diseño
- 15. Excluir dependencia en un perfil
- 16. Perfil predeterminado en Spring 3.1
- 17. Registro activo de Rails: cómo modelar un escenario de usuario/perfil
- 18. ¿El perfil de un usuario debe ser un modelo separado?
- 19. de firma en las derivaciones a/cuentas/perfil/de Django
- 20. Modelos específicos de vista en ASP.NET MVC?
- 21. Perfil de membresía de ASP.NET
- 22. infierno de perfil de provisión
- 23. ruby on rails modelo de arquitectura, vista y DTOs
- 24. Perfil de páginas PHP lentas en producción
- 25. ¿Cómo perfil de memoria en Java?
- 26. UDID en el perfil de aprovisionamiento?
- 27. Rspec and Rails con pruebas de vista y recursos anidados
- 28. Ayudantes de vista burlona con rspec-rails 2.0.0.beta.8
- 29. Maven - ¿Puedo hacer referencia a la identificación de perfil en la definición de perfil?
- 30. perfil Activar Maven si no hay otro perfil activado
los registros indican cuánto tarda cada parcial en renderizar. Puede dividir su vista para verificar. – apneadiving