2009-01-26 14 views
5

He escrito una aplicación de Ruby que analiza muchos datos de fuentes en diferentes formatos de archivos html, xml y csv. ¿Cómo puedo saber qué áreas del código están tomando más tiempo?¿Cómo puedo encontrar los cuellos de botella de rendimiento en mi aplicación Ruby?

¿Hay algún recurso bueno sobre cómo mejorar el rendimiento de las aplicaciones de Ruby? ¿O tiene algún estándar de codificación de rendimiento que siempre sigue?

Por ejemplo qué siempre se añaden a la cadena con

output = String.new 
output << part_one 
output << part_two 
output << '\n' 

o usaría

output = "#{part_one}#{part_two}\n" 

Respuesta

10

Bueno, hay ciertas las prácticas bien conocidas como la concatenación de cadenas es mucho más lenta que "# {value}", pero para averiguar dónde está consumiendo la secuencia de comandos la mayor parte del tiempo o más de tiempo de lo requerido, necesita hacer perfiles. Hay una gema de rubí llamada ruby-prof. El generador de perfiles puede comunicarle incluso aquellos problemas de rendimiento que rara vez se producen. Lo he estado usando mucho y lo encuentro muy útil. Aquí hay alguna información sobre ello directamente de su official site

ruby-prof es un perfilador de código rápido para Ruby. Sus características incluyen:

Velocidad - es una extensión C y, por lo tanto, mucho más rápido que el perfilador Ruby estándar .

Modos de - Rubí prof puede medir un número de diferentes parámetros, incluyendo tiempos de llamada, el uso de memoria y el objeto asignaciones.

Reports - puede generar texto y html referencia cruzada informes

perfiles planos - similar a los informes generados por el estándar de Ruby perfilador

perfiles Gráfico - similar a gprof, estos muestran cuánto tiempo se ejecuta un método, qué métodos lo llaman y qué métodos llama.

árbol de llamadas perfiles de - Salida de los resultados en el formato Calltree adecuada para el perfilado de kcachegrind herramienta.

Hilos - soportes de perfiles múltiples hilos simultáneamente

recursiva se llama - soportes de perfiles método recursivo llamadas

3

Puede probar el rendimiento de las distintas secciones de código con el estándar Benchmark module.

También podría probar su código en diferentes implementaciones de Ruby (por ejemplo, 1.9, Rubinius) y ver si eso acelera las cosas.

Por supuesto, si sus problemas son de naturaleza algorítmica entonces no hay mucho sentido preocuparse por cosas como las velocidades de concatenación ...

0

También es un conjunto de herramientas DTrace del Ruby puede utilizar en el dTraceToolkit

1

Además de lo que está escrito anteriormente, también recomiendo ver el screencast Scaling Ruby. Tiene algunos consejos interesantes & trucos sobre cómo escribir código Ruby más rápido.

+0

Gracias por la sugerencia. Esos tipos de Rails Envy son geniales. – Geekygecko

Cuestiones relacionadas