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基础知识:类与对象(1)
Dec 13 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
tp5框架的增删改查操作示例
Oct 31 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
js数组的操作详解
2013/03/27 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
幼儿园亲子活动总结
2014/04/26 职场文书
故宫的导游词
2015/01/31 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
5道关于python基础 while循环练习题
2021/11/27 Python
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
python和anaconda的区别
2022/05/06 Python