每次請求都會去從新加載配置文件。即便配置文件內容沒有更新, 也會去從新加載一次。這是一個很很差的設計。(開啓Opcache狀況下, 仍是有執行的過程時間)php
讀取到配置文件的內容保存到系統內存, 下一次請求直接去內存讀取數據。Asf 也提供很是簡單的配置實現 Config Cache。redis
<?php ini_set('asf.cache_config_enable', 1); /* 開啓配置文件緩存 */ ini_set('asf.cache_config_expire', 300); /* 設置緩存多少秒以後過時, 300 seconds by default */
<?php define('APP_PATH', dirname(__DIR__)); /* 緩存 config.ini 文件 */ $app = new Asf\Application(APP_PATH . '/config/config.ini'); $app->run();
<?php $conf_php = new Asf\Config\Php(CONFIG_PATH . '/config.db.php');
<?php $conf_ini = new Asf\Config\Ini(CONFIG_PATH . '/config.redis.ini');
<?php print_r(Asf\Application::getInstance()->getConfig()->toArray()); print_r(Asf\Config::get()->toArray());
在開啓 Opcache 狀況下, 簡單作了一個 Config Cache 性能測試, ab -c100 -n10000緩存
配置文件中配置項複雜程度與性能指標是有直線聯繫的喲多線程
Total transferred: 16109994 bytes HTML transferred: 14259994 bytes Requests per second: 6859.01 [#/sec] (mean) Time per request: 14.579 [ms] (mean) Time per request: 0.146 [ms] (mean, across all concurrent requests)
Total transferred: 16080000 bytes HTML transferred: 14230000 bytes Requests per second: 6398.22 [#/sec] (mean) Time per request: 15.629 [ms] (mean) Time per request: 0.156 [ms] (mean, across all concurrent requests)
Cache Config 不是基於共享內存的, 是基於 PHP 進程的喲, 不會有共享內存鎖的問題。app