是的,除非您缓存它们,否则每次都会解析它们。它确实节省了时间(我在自己的项目中检查过)。
那么如何使用Zend_Cache_Frontend_File
缓存一个ini文件呢?好吧,我可以给你举个例子。在我的项目中,我有 route.ini 文件,其中包含许多自定义路由:
路线.ini
routes.showacc.route = "/@show/:city/:id/:type"
routes.showacc.type = "Zend_Controller_Router_Route"
routes.showacc.defaults.module = default
routes.showacc.defaults.controller = accommodation
routes.showacc.defaults.action = show
routes.showacc.defaults.city =
routes.showacc.defaults.type =
routes.showacc.defaults.id =
routes.showacc.defaults.title =
routes.showacc.reqs.id = "\d+"
;and more
在我的Bootstrap.php中,我使用缓存加载它们(如果可能的话):
protected function _initMyRoutes() {
$this->bootstrap('frontcontroller');
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
// get cache for config files
$cacheManager = $this->bootstrap('cachemanager')->getResource('cachemanager');
$cache = $cacheManager->getCache('configFiles');
$cacheId = 'routesini';
// $t1 = microtime(true);
$myRoutes = $cache->load($cacheId);
if (!$myRoutes) {
// not in cache or route.ini was modified.
$myRoutes = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
$cache->save($myRoutes, $cacheId);
}
// $t2 = microtime(true);
// echo ($t2-$t1); // just to check what is time for cache vs no-cache scenerio
$router->addConfig($myRoutes, 'routes');
}
缓存在我的application.ini中设置如下
resources.cachemanager.configFiles.frontend.name = File
resources.cachemanager.configFiles.frontend.customFrontendNaming = false
resources.cachemanager.configFiles.frontend.options.lifetime = false
resources.cachemanager.configFiles.frontend.options.automatic_serialization = true
resources.cachemanager.configFiles.frontend.options.master_files[] = APPLICATION_PATH "/configs/routes.ini"
resources.cachemanager.configFiles.backend.name = File
resources.cachemanager.configFiles.backend.customBackendNaming = false
resources.cachemanager.configFiles.backend.options.cache_dir = APPLICATION_PATH "/../cache"
resources.cachemanager.configFiles.frontendBackendAutoload = false
希望这可以帮助。