2011-09-26 11 views
6

Siento que entiendo la diferencia entre require y require_dependency (de How are require, require_dependency and constants reloading related in Rails?).¿Cuáles son las implicaciones de rendimiento de usar require_dependency en las aplicaciones de Rails 3?

Sin embargo, me pregunto lo que debería suceder si utilizo algunos de los diversos métodos por ahí (ver http://hemju.com/2010/09/22/rails-3-quicktip-autoload-lib-directory-including-all-subdirectories/ y Best way to load module/class from lib folder in Rails 3?) para obtener todos los archivos de carga de modo que:

  1. no necesita utilizar require_dependency en cualquier lugar de la aplicación y
  2. no es necesario reiniciar los servidores de desarrollo cuando cambian los archivos en el directorio lib.

Parece que el rendimiento del desarrollo se vería ligeramente afectado, lo cual no es gran cosa para mí. ¿Cómo se vería afectado el rendimiento en un entorno de producción? ¿Todos los archivos generalmente se cargan solo una vez si usted está en producción de todos modos? ¿Hay una mejor manera que no estoy viendo?

Si pudiera incluir algunos recursos donde podría leer más acerca de esto, sería muy apreciado. Algunas publicaciones de blog indicaron que este comportamiento cambió recientemente con Rails 3 para la carga automática de archivos lib/* y que era polémico, pero no vi ningún enlace a estas discusiones. Sería útil para considerar los pros/contras. ¡Gracias!

Respuesta

4

El recargador de código está deshabilitado de forma predeterminada en producción. Entonces, si llamas a require_dependency en la parte superior de un archivo, se ejecutará solo una vez.

El cambio de Rails 3 que mencionaste es muy pequeño. Por lo general, puede llamar al Foo y se cargará automáticamente desde el app/models/foo.rb. Antes también se podía cargar desde lib/foo.rb. (Estos directorios app/models y lib se llaman rutas de carga automática). El equipo de Rails decidió eliminar lib de las rutas de carga automática en la 3ra versión. Todavía puedes regresarlo. Sin embargo, se recomienda dejar en lib archivos menos frecuentes y modificados para proyectos. Si tiene algo que no pertenece a ninguno de los subdirectorios de aplicaciones predeterminadas como aplicaciones/modelos o aplicaciones/controladores, no tiene que ponerlo en lib. Puede agregar su propio subdirectorio. Tengo app/presenters, por ejemplo. Hay a discussion en el rastreador de problemas anterior si desea obtener más información al respecto.

Cuestiones relacionadas