Rieles parciales (Rieles 3, HAML) arbitrariamente lentos

Estoy usando Rails 3.0.1, HAML 0.3.22 y Mongrel 1.1.5 (y MongoMapper no AR). Estoy mostrando una lista, y cada elemento de la lista es parcial. Cada vez que la página muestra uno de los parciales de los elementos de la lista, se demora casi 100 veces más (y es cada vez más arbitrariamente diferente. Además, no hace falta decir que cada elemento tiene esencialmente los mismos datos).

¿Alguna idea de lo que está pasando aquí? ¿Debería mover la lógica a un bloque en lugar de a un parcial?

Rendered shared/_head.html.haml (5.6ms) Rendered tasks/_incomplete_task.haml (6.2ms) Rendered tasks/_incomplete_task.haml (6.4ms) Rendered tasks/_incomplete_task.haml (6.9ms) Rendered tasks/_incomplete_task.haml (6.2ms) Rendered tasks/_incomplete_task.haml (6.0ms) Rendered tasks/_incomplete_task.haml (6.1ms) Rendered tasks/_incomplete_task.haml (6.4ms) Rendered tasks/_incomplete_task.haml (6.2ms) Rendered tasks/_incomplete_task.haml (7.0ms) Rendered tasks/_incomplete_task.haml (531.6ms) Rendered tasks/_incomplete_task.haml (8.0ms) Rendered tasks/_incomplete_task.haml (6.8ms) Rendered tasks/_incomplete_task.haml (6.5ms) Rendered shared/_tasks.html.haml (633.0ms) 

6 ms por parcial parece demasiado alto, pero realmente depende de lo que estás haciendo dentro del parcial (¿hay alguna consulta SQL allí?)

En cuanto a 500 ms, he notado el mismo comportamiento en mi aplicación. Y he invertido algo de tiempo para cavar dentro. Y bueno (en mi caso) realmente fue Ruby recolector de basura.

Puede usar REE cuando puede ajustar el recolector de basura (por ejemplo aquí http://www.coffeepowered.net/2009/06/13/fine-tuning-your-garbage-collector/ ).

Puedes jugar con esos números y ver si el comportamiento de tu aplicación cambiará. Y si es así, culpe al GC.

Tal vez es más rápido si lo pones en un solo parcial?

Me refiero a ponerlo en una

 # tasks/_incomplete_tasks.haml instead of tasks/_incomplete_task.haml 

parcial, que se llama 1 vez .. y no 1000 veces …

Poner en .bashrc :

 export RUBY_GC_HEAP_INIT_SLOTS=1000000 export RUBY_HEAP_SLOTS_INCREMENT=500000 export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1 export RUBY_GC_MALLOC_LIMIT=50000000 

Fuente, y reiniciar el servidor

 $> source ~/.bashrc $> rails s 

Dependiendo de cuál sea su problema, esto podría hacer que la representación de sus parciales sea más rápida (en mi caso, el tiempo de representación promedio es x3 más rápido).