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模板,主要想体现一下思路
Dec 25 PHP
在MongoDB中模拟Auto Increment的php代码
Mar 06 PHP
php ajax 静态分页过程形式
Sep 02 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
php身份证号码检查类实例
Jun 18 PHP
php数字运算验证码的实现代码
Jul 30 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
php网页版聊天软件实现代码
Aug 12 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 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
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python友情链接检查方法
2015/07/08 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
使用Keras 实现查看model weights .h5 文件的内容
2020/06/09 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
办公室主任岗位职责
2013/11/08 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
客房部经理岗位职责
2015/02/02 职场文书
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
SQL中的连接查询详解
2022/06/21 SQL Server