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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
php执行sql语句的写法
Mar 10 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
php使用pack处理二进制文件的方法
Jul 03 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
PDO::setAttribute讲解
Jan 29 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
第一节--面向对象编程
2006/11/16 PHP
destoon数据库表说明汇总
2014/07/15 PHP
php实现搜索类封装示例
2016/03/31 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
2017/06/23 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
中专毕业生自荐信
2013/11/16 职场文书
九年级体育教学反思
2014/01/23 职场文书
出纳会计岗位职责
2014/03/12 职场文书
竞聘书格式及范文
2014/03/31 职场文书
情况说明书格式范文
2014/05/06 职场文书
爱心募捐感谢信
2015/01/22 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书