2012-05-14 11 views
15

Esto es un seguimiento directo de esta pregunta: What is the fastest way to render json in rails?¿Cómo puedo saber_ qué renderizador JSON está activo en mi aplicación Rails 3?

Mi aplicación hace una consulta a la base de datos y la renderiza en JSON para una devolución de llamada JS. Se necesitan al menos 8 segundos para un conjunto de datos pequeño (1 MB) y más como 20 para uno grande (3.5 MB). Esto básicamente va a matar mi aplicación como una idea. Mis usuarios no van a tolerar este tipo de espera.

He leído sobre multi_json y DO y yajl, y yo creo Tengo ellas instalado, pero ninguna de las maneras que he probado para activar las diversas gemas en mi Gemfile mostró ninguna mejora en el tiempo de serialización . ¿Cómo puedo probar que estoy usando uno sobre el otro, para poder comparar los resultados entre ellos? No puedo encontrar ninguna forma de dar salida (al registro de depuración de Rails o a la consola JS en el navegador) qué biblioteca pudo haberse utilizado para la llamada real 'render: json => @data'.

+1

Usted no ve ninguna mejora puede estar relacionada con esto: http://devblog.agworld.com.au/post/42586025923/the-performance-of-to-json-in-rails-sucks-and-theres – lulalala

+0

¡Guauu! Sí, eso explica lo que vi perfectamente. –

+0

Acabo de hacer una joya para ese parche, pero no está listo para producción https://github.com/GoodLife/rails-patch-json-encode – lulalala

Respuesta

24

En lugar de manipular el controlador, una mejor manera es utilizar la consola de Rails, así:

$ rails console 
Loading development environment (Rails 3.2.8) 
1.8.7 :001 > MultiJson.engine 
=> MultiJson::Adapters::JsonGem 

se puede interactuar directamente con sus rieles pila de esa manera.

3

Finalmente descubrí que podía hacer 'render: text => MultiJson.engine' en mi controlador. Esto produjo "MultiJson :: Engines :: Oj".

Confirma que ya estoy usando la biblioteca supuestamente más rápida de JSON, y es posible que me afecten. Supongo que intentaré devolver el texto puro a través del controlador (que demora 2 segundos en comparación con 8) y ver qué tan rápido tardará una rutina para convertirlo en un hash ...

Cuestiones relacionadas