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:风雨欲来 路在何方?
Oct 09 PHP
PHP获取网卡地址的代码
Apr 09 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
php base64 编码与解码实例代码
Mar 21 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 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扩展开发教程(总结)
2015/11/04 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python使用turtle绘制分形树
2018/06/22 Python
python实现画出e指数函数的图像
2019/11/21 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python selenium自动化测试模型图解
2020/04/15 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Python对excel的基本操作方法
2021/02/18 Python
会计顶岗实习心得
2014/01/25 职场文书
简爱电影观后感
2015/06/10 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server