PHP中使用hidef扩展代替define提高性能


Posted in PHP onApril 09, 2015

网站需要新加一个常量,打开了本地的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,就好了。

hidef具体安装方法参见:提高define性能的php扩展hidef的安装和使用

在百度里搜索“hidef”,排第3位的是一个copy我博文的网站:( 而我自己发布的提高define性能的php扩展hidef的安装和使用在前三页没有找到。显然是百度对原创的识别出了些偏差。

百度搜索“hidef php”,那个网址排第一,第二是官网,我的在第三。
gg搜索“hidef php”,第一官网,第3是另一篇原创,我的在第四。gg的识别就不错!

360搜索"hidef php",第一那个copy站,第二我的,第三另一篇原创。
因此有了这篇的诞生,看看能不能帮第一篇排上去或者这篇排上去也行。

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

  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'   => 'https://3water.com/',

            'WWW_URL'   => 'https://3water.com/',

        );
        define_array('hx_defined',$constants);

附测试define速度的代码。

<?php
$t1 = microtime(1);
    $constants = array(

        'hx1'       => 1,

        'hx2'       => '2',

        'hx3'       => '3',

        'hx4'       => '4',

        'hx5'       => '5',

        'hx6'       => '6',

        'hx7'       => '7',

        'hx8'       => '8',

        'hx9'       => '9',

        'hx10'       => '10',

    );
    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 ' '.($t2-$t1)*1000;
$t1 = microtime(1);

for($i=0;$i<10000;$i++) {

    $t = HX;

}    

$t2 = microtime(1);

echo ' '.($t2-$t1)*1000;
PHP 相关文章推荐
PHP 5.0 Pear安装方法
Dec 06 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
关于php fread()使用技巧
Jan 22 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 #PHP
Laravel 5框架学习之用户认证
Apr 09 #PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 #PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 #PHP
在html文件中也可以执行php语句的方法
Apr 09 #PHP
PHP统一页面编码避免乱码问题
Apr 09 #PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 #PHP
You might like
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
js实现简单的倒计时
2021/01/28 Javascript
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
python在每个字符后添加空格的实例
2018/05/07 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
django教程如何自学
2020/07/31 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
会议邀请函范文
2014/01/09 职场文书
学生干部的自我评价分享
2014/01/18 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
朋友离别感言
2015/08/04 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫