ruby-on-rails - instalar - bundler que es
Reduciendo n+1 consultas usando las gemas Bullet y RSpec (1)
La forma más efectiva no es en absoluto. Puede haber algunas ventajas legítimas para reducir las consultas n + 1 en las pruebas, más obviamente para acelerar el tiempo de ejecución general. Sin embargo, es muy posible que esté probando demasiado o obteniendo ganancias menos significativas de lo que es posible . Por lo general, también me resulta poco atractivo escribir código adicional para ayudar a apuntalar las pruebas, en lugar de contribuir al valor general de la aplicación.
Permítame proponerle un uso alternativo de su tiempo. Solo prueba la unidad al mínimo absoluto de tu nivel de comodidad. Personalmente, me gusta centrarme en métodos complejos que involucran problemas relacionados con la validación y dinero u otras matemáticas, puede que tenga diferentes prioridades. Dibujar la línea liberará un montón de tiempo escribiendo la parte más inútil y frágil de su conjunto de pruebas que ocupará la mayor parte de su presupuesto de mantenimiento.
Ahora, ¿qué hacer todo tu tiempo extra? No se preocupe, encontraremos algo para que haga ... Puede comenzar escribiendo algunas pruebas de aceptación, particularmente para las áreas que usan los objetos para los que acaba de soltar un montón de pruebas unitarias. Ahora sus advertencias n + 1 en realidad provienen del mismo lugar que lo harán cuando el usuario llegue a la página. Ahora puede continuar para eliminar todas las consultas n + 1.
¡Pero espera! No hagas eso tampoco. En cambio, pase mucho menos tiempo configurando sus relaciones para usar la opción táctil . Luego, cuando se actualiza un objeto hijo, el padre también se actualizará. ¿Qué demonios tiene esto que ver con las consultas n + 1? Parece que solo estamos agregando consultas ...
Ahí es donde entra en juego el almacenamiento en caché de la muñeca rusa . Agregar esto y probarlo adecuadamente consumirá la prueba de la unidad liberada y el tiempo de eliminación de n + 1 (y algo más, si no tiene cuidado). Lo bueno es que es mucho más "mundo real", mucho más resistente a los cambios de implementación insignificantes o irrelevantes en sus modelos y demás, y un gran impulso de rendimiento para su aplicación mucho más allá de lo que elimina cada consulta n + 1 al cargar con entusiasmo todo por adelantado podría haber proporcionado. Deberá moverse tanto como sea posible hacia el almacenamiento en caché anidado y cargar todo lo más vagamente que sea humanamente posible, para aprovechar al máximo este método.
¡Viva n + 1!
¿Cuál es una forma efectiva de usar Bullet Gem con RSpec? En este momento siento que si lo uso con mi marco de prueba de unidad actual recibo muchas notificaciones o fallas de pruebas debido a n + 1 consultas dentro de las pruebas en sí mismas que no están relacionadas con lo que sucede en mi aplicación de producción, como verificar un valor o asociación. Como tal, corregir las fallas n + 1 no requiere configurar nada en mis controladores o modelos, sino que requiere configurar algo en mi configuración de prueba para no arrojar ese error en particular y no veo una mejora real en el rendimiento de mi aplicación.