Asf PHP 开发之配置信息常驻系统内存

2018-06-03 02:18:32 +08:00
 fanjiapeng

传统的 MVC 框架

每次请求都会去重新加载配置文件。即使配置文件内容没有更新, 也会去重新加载一次。这是一个很不好的设计。(开启 Opcache 情况下, 还是有执行的过程时间)

Asf 框架

读取到配置文件的内容保存到系统内存, 下一次请求直接去内存读取数据。Asf 也提供非常简单的配置实现 Config Cache。

什么场景下开启 Config Cache 合适?

流程图

开启配置文件缓存技术

ini_set('asf.cache_config_enable', 1); /* 开启配置文件缓存 */
ini_set('asf.cache_config_expire', 300); /* 设置缓存多少秒之后过期, 300 seconds by default */

采用框架入口方式

define('APP_PATH', dirname(__DIR__));

/* 缓存 config.ini 文件 */
$app = new Asf\Application(APP_PATH . '/config/config.ini');
$app->run();

使用类 Asf\Config\Php

$conf_php =  new Asf\Config\Php(CONFIG_PATH . '/config.db.php');

使用类 Asf\Config\Ini

$conf_ini =  new Asf\Config\Ini(CONFIG_PATH . '/config.redis.ini');

性能测试

在开启 Opcache 情况下, 简单做了一个 Config Cache 性能测试, ab -c100 -n10000

配置文件中配置项复杂程度与性能指标是有直线联系的哟

开启内存缓存技术 asf.cache_config_enable = 1

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)

传统 MVC, 无内存缓存技术

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 进程的哟, 不会有共享内存锁的问题。

Asf 中文帮助文档

1808 次点击
所在节点    PHP
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/459934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX