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压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
php操作redis命令及代码实例大全
Nov 19 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
深入密码加salt原理的分析
2013/06/06 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
详解Python绘图Turtle库
2019/10/12 Python
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
医药类个人求职的自我评价
2014/02/12 职场文书
公司捐款倡议书
2014/05/14 职场文书
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2015年酒店工作总结
2015/04/28 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技