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 HtmlReplace输入过滤安全函数
Jul 03 PHP
初品cakephp 入门基础
Feb 16 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
推荐25款php中非常有用的类库
Sep 29 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
Feb 02 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
Laravel中的Auth模块详解
Aug 17 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
2020最新CPU的性能排名
2020/04/02 数码科技
php线性表的入栈与出栈实例分析
2015/06/12 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python如何根据时间序列数据作图
2020/05/12 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
HTML5播放实现rtmp流直播
2020/06/16 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
房地产项目策划书
2014/02/05 职场文书
军训自我鉴定范文
2014/02/13 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
个人批评与自我批评
2014/10/15 职场文书
个人整改措施书面材料
2014/10/24 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
微信小程序调用python模型
2022/04/21 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android
Redis Lua脚本实现ip限流示例
2022/07/15 Redis