events caching zend-framework2 router

events - ZF2 cacheing rutas coincidentes



caching zend-framework2 (1)

en mi aplicación tengo una ruta (literal o de segmento) para cada acción. No estoy usando una ruta global para todo, por lo que el número de rutas ha crecido enormemente con más de 44 módulos (y más en el futuro).

Tengo entendido (por lo que he visto en el código) que en cada solicitud de página zend lanza todas estas rutas en una matriz y busca una coincidencia que podría ser un cuello de botella para la aplicación (¿estoy en lo cierto?)

Así que estaba pensando por qué no almacenar en caché las rutas coincidentes en una tabla db con índice para acelerar la búsqueda?

PRIMERA PREGUNTA: ¿esto mejoraría el rendimiento del sistema?

así que mi primer problema es omitir el mecanismo de correspondencia de ruta del sistema. esto es lo que intenté pero no funcionó:

public function onBootstrap(MvcEvent $e) { $em = StaticEventManager::getInstance(); $em->attach(''Zend/Mvc/Application'', MvcEvent::EVENT_ROUTE, array($this, ''onRoute''), 100); } public function onRoute(MvcEvent $e) { //var_dump($e->getRouteMatch());//->null routing has not been done yet /* @var $router /Zend/Mvc/Router/Http/TreeRouteStack */ $router = $e->getRouter(); //-------------------------------------created a dummy route $routeMatch = new /Zend/Mvc/Router/RouteMatch(array( ''controller'' => ''Links/Controller/Items'', ''action'' => ''view'', ''catId'' => 0 )); $routeMatch->setMatchedRouteName(''app/links''); $e->setRouteMatch($routeMatch);//set the dummy route //--------------------------------------------PROBLEM HERE //detach the onRoute event from routeListener $e->getApplication() ->getServiceManager() ->get(''RouteListener'') ->detach($e->getApplication()->getEventManager()); }

el método de separación se ejecuta pero el evento onRoute aún se ejecuta y coincide con la url a la ruta correcta. Entonces, ¿cómo omitir (omitir | separar) la coincidencia de ruta?


La razón por la que no puede separar al oyente es porque ya está en el evento de route . En ese momento, todos los oyentes se reunieron y se pusieron en cola para su ejecución.

¿Por qué no sacar al oyente de la ecuación de antemano?

public function onBootstrap(MvcEvent $e) { $app = $e->getApplication(); $events = $app->getEventManager(); $shared = $events->getSharedManager(); $services = $app->getServiceManager(); $routeListener = $services->get(''RouteListener''); $routeListener->detach($events); $shared->attach(''Zend/Mvc/Application'', MvcEvent::EVENT_ROUTE, array($this, ''onRoute''), 100); }