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 getsiteurl()函数
Sep 05 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
PHP中文分词的简单实现代码分享
Jul 17 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
laravel config文件配置全局变量的例子
Oct 13 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之第一天
2006/10/09 PHP
一个php作的文本留言本的例子(四)
2006/10/09 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
laravel请求参数校验方法
2019/10/10 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
python字符串排序方法
2014/08/29 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
Python库安装速度过慢解决方案
2020/07/14 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
毕业生求职简历中的自我评价
2013/10/18 职场文书
宣传策划类求职信范文
2014/01/31 职场文书
企业口号大全
2014/06/12 职场文书
重阳节活动总结
2014/08/27 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
亲戚关系证明
2015/06/24 职场文书