热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在PHP中利用hidef替代define提升性能效率

PHP中如何使用hidef代替define优化效率?本文主要介绍了PHP中使用hidef扩展代替define提高性能,本文着重测试hidef的性能,同时提供了实例。希望对大家有所帮

PHP中如何使用hidef代替define优化效率?本文主要介绍了PHP中使用hidef扩展代替define提高性能,本文着重测试hidef的性能,同时提供了实例。希望对大家有所帮助。

网站需要新加一个常量,打开了本地的config.php文件,想到了几年前测试过的hidef以及apc提升define性能的方案。

我的程序中有对开发、测试、生产服务器分别做了不同的配置,在常量方面则使用了一个数组定义了所有需要定义的常量,然后检测是否有apc_load_constants函数,没有的话,批量define。使用apc时,每增加一个常量,还需要修改一下$key才能生效。

而现在测试、生产服务器php都升级到5.4后,opcode缓存就使用了Zend opcache,不再安装APC。因为有用到apc user cache,因此额外装了apcu,和apc用法一模样,完全不用改程序。而apcu不支持apc_load_constants和apc_define_constants,因此apc这个方案就无法用了。去官网装了最新版hidef 0.1.13,2012-7-12发布的stable,一年多了。

写了个简单程序测试define化的时间,大概运行1000次需要2.8ms。那么对于一个中型网站(例如一天php运行1000w次)来说,如果每页定义25个常量,大概每天需要化 10000000*25/1000*2.8=700000ms,就是700秒。差不多使用hidef可以一天节省700s的PHP运行时间。

再看看读的性能好了,测试读1w次一个常量,值都是1,分别是37ms和0.7ms。那么如果一天1000w次,每页平均使用20个常量,则需要740秒,而使用hidef是14秒,好吧,又一个700多秒。

一天省1400秒php运行时间,也许是还是微不足道,但总是好的,也是值的尝试的,毕竟define的参数变化的机率非常少。

当define参数需要修改时,修改配置文件,然后重载下php-fpm,就好了。

附原配置常量的程序示例代码:

if (function_exists('apc_load_constants')) {            function define_array($key, $arr, $case_sensitive = false) {                if (!apc_load_constants($key, $case_sensitive)) {                    apc_define_constants($key, $arr, $case_sensitive);                }            }        } else {            function define_array($key, $arr, $case_sensitive = false) {                foreach ($arr as $name => $value) {                    define($name, $value, $case_sensitive);                }            }        }        $cOnstants= array(            'HX'   => 1,            'BLOG_URL'   => 'http://www.gaodaima.com/',            'WWW_URL'   => 'http://www.gaodaima.com/',        );        define_array('hx_defined',$constants);

附测试define速度的代码。

 1,        &#039;hx2&#039;       => &#039;2&#039;,        &#039;hx3&#039;       => &#039;3&#039;,        &#039;hx4&#039;       => &#039;4&#039;,        &#039;hx5&#039;       => &#3@本文9来源gao([email protected]@#码8网^搞代gaodaima码9;5&#039;,        &#039;hx6&#039;       => &#039;6&#039;,        &#039;hx7&#039;       => &#039;7&#039;,        &#039;hx8&#039;       => &#039;8&#039;,        &#039;hx9&#039;       => &#039;9&#039;,        &#039;hx10&#039;       => &#039;10&#039;,    );    function define_array($key, $arr) {        foreach ($arr as $name => $value) {            define($name.$i, $value);        }    }        for($i=0;$i<100;$i++) {        define_array($i,$constants);    }        $t2 = microtime(1);echo ($t2-$t1)*1000;//读性能$t1 = microtime(1);for($i=0;$i<10000;$i++) {    $t = hx1;}    $t2 = microtime(1);echo &#039; &#039;.($t2-$t1)*1000;$t1 = microtime(1);for($i=0;$i<10000;$i++) {    $t = HX;}    $t2 = microtime(1);echo &#039; &#039;.($t2-$t1)*1000;


推荐阅读
author-avatar
kanney姜_958
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有