Symfony2 - Optimizando el Enrutador

¡Buenos días! Hoy les traigo un pequeño “truquito” para mejorar el rendimiento del enrutador de Symfony2

Si han trabajado con este pequeño framework, bien sabrán que la definición de rutas es muy maleable y abstracta, tanto así que permite que nos preocupemos solamente por el patrón y configuraciones que la conformarán, pero no por la lógica de ruteo en sí misma. Esta lógica está implementada por las clases de Routing de Sf2, que se encargan de leer los archivos de configuración, hacen matches contra las peticiones y luego despachan el request a donde corresponda. Fácil, ¿no?

Es muy obvio, pero vale aclararlo, que todo este comportamiento tiene un efecto negativo en el rendimiento, tanto así que es necesario optimizarlo lo más que se pueda. Symfony2 optimiza el proceso de match de rutas mediante la compilación de los archivos de routing en un archivo ubicado en la cache (ver app/cache/prod/appprodUrlMatcher.php), pero aún así el proceso sigue siendo perjudicial para nuestro proyecto. ¿Por qué? Porque seguimos dependiendo de PHP para manejar las reglas de matching de URL. ¿Y que tal si las expresiones regulares las maneja nuestro servidor web? Eso es lo que quiero compartirles hoy.

El componente de enrutador de Symfony2 viene con una herramienta muy útil que permite generar las todas las expresiones regulares necesarias para que Apache (con mod_rewrite) se haga cargo de esta tarea. La utilidad se accede a través del siguiente comando:

you@yourcomputer:~/SymfonyProject
you@yourcomputer:~/SymfonyProject$ php app/console router:dump-apache
you@yourcomputer:~/SymfonyProject$

Esto hará que se compilen todas las rutas en diversos RewriteRules que podremos añadir a nuestro .htaccess o directo sobre el VirtualHost.

El resultado del comando se mostrará en consola, lo cual es cómodo si tienes pocas rutas. En cambio si tu proyecto tiene más de 10 definiciones, te recomiendo redirigir toda la salida del comando a un archivo:

you@yourcomputer:~/SymfonyProject
you@yourcomputer:~/SymfonyProject$ php app/console router:dump-apache > archivo_destino
you@yourcomputer:~/SymfonyProject$

Lindo, ¿verdad?

Una cosita más, en la documentación oficial pueden aprender más acerca de cómo funciona el enrutador de Sf2.

¡Saludos!

Comentarios

comments powered by Disqus

Los comentarios están deshabilitados debido a que has rechazado las cookies en este sitio.

Restablecer Cookies
Copyright © 2014 - Sergio Lepore
Desarrollado con Hexo y alojado en Github

Nota legal: Las opiniones expresadas en el presente blog son mis opiniones personales y bajo ningún modo representan la opinión de mi empleador
Política de Cookies