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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
php采集速度探究总结(原创)
Apr 18 PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
PHP中使用curl入门教程
Jul 02 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 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 is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
php时间函数用法分析
2016/05/28 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
轮播的简单实现方法
2016/07/28 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Django密码存储策略分析
2020/01/09 Python
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
大学生职业生涯规划书模板
2014/01/18 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
工作评语大全
2014/04/26 职场文书
说明书范文
2014/05/07 职场文书
厂区绿化方案
2014/05/08 职场文书
优秀班组事迹材料
2014/12/24 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL