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中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
浅谈php提交form表单
Jul 01 PHP
php实现XML和数组的相互转化功能示例
Feb 08 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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
PHP学习之字符串比较和查找
2011/04/17 PHP
基于php权限分配的实现代码
2013/04/28 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
javascript 闭包详解
2015/07/02 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
javascript学习之json入门
2016/12/22 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
pandas 空数据处理方法详解
2019/11/02 Python
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
大学生在校学习的自我评价
2014/02/18 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
干部年终考核评语
2015/01/04 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
夫妻吵架保证书
2015/05/08 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫