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 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
dedecms系统常用术语汇总
Apr 03 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
示例详解Laravel的注册重构
Aug 14 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
laravel批量生成假数据的方法
Oct 09 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
layui文件上传实现代码
2017/05/20 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
python爬取51job中hr的邮箱
2016/05/14 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python中reader的next用法
2018/07/24 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
小孩百日宴答谢词
2014/01/15 职场文书
中小学生学籍证明
2014/10/25 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
Python访问Redis的详细操作
2021/06/26 Python