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 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
php 缩略图实现函数代码
Jun 23 PHP
php一个找二层目录的小东东
Aug 02 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
Aug 10 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
2009/06/29 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
详解C++编程中一元运算符的重载
2016/01/19 Python
Python中扩展包的安装方法详解
2017/06/14 Python
对Python中range()函数和list的比较
2018/04/19 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
书法培训心得体会
2014/01/05 职场文书
监察建议书范文
2014/03/12 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
法律专业自荐信
2014/06/03 职场文书
演讲稿开场白台词
2014/08/25 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
MySQL8.0的WITH查询详情
2021/08/30 MySQL
解析python中的jsonpath 提取器
2022/01/18 Python
Java数组详细介绍及相关工具类
2022/04/14 Java/Android