提高define性能的php扩展hidef的安装和使用


Posted in PHP onJune 14, 2011

官网:http://pecl.php.net/package/hidef
简介:

Allow definition of user defined constants in simple ini files, which are then processed like internal constants, without any
of the usual performance penalties.

允许使用简单的ini文件来定义需要的常量,就像使用内部变量一样,而且没有使用Define的性能问题。

作者说Hidef is initialized in php module init, before apache starts spawning children.
在apache启动前,PHP启动时创建并初始化了这些常量,这样就不需要在php里define常量了,性能自然没有任何问题了!
在Nginx下同样可用,以下是安装过程:

1、下载并解压进入目录

# wget http://pecl.php.net/get/hidef-0.1.8.tgz
# tar zxvf hidef-0.1.8.tgz
# cd hidef-0.1.8

2、没有configure文件,执行phpize创建该文件

# /usr/local/webserver/php/bin/phpize
# ./configure --enable-hidef --with-php-config=/usr/local/webserver/php/bin/php-config
# make
# make install

3、添加到php.ini文件里面

# vi /usr/local/webserver/php/etc/php.ini

-----------------------------------------------
extension=hidef.so
hidef.ini_path=/usr/local/webserver/php/etc/
------------------------------------------------------------------------------

注意,如果php.ini文件里面没有定义hidef.ini_path,则默认.ini文件读取位置为/hidef,只需手工创建文件 vi /hidef/hidef.ini即可。

# vi /usr/local/webserver/php/etc/hidef.ini(此处根据情况自己调整路径)

[hidef] 
int ANSWER = 42; 
str HX = "9enjoy"; 
float PIE = 3.14159;

这里整数用int,浮点数用float,字符串用str。
字符串str的值使用双引号来包含,或者直接写字符串内容。如果使用单引号,将会把单引号也做为字符串的内容。
如str HX='9enjoy',实际存储的不是9enjoy,是'9enjoy'。

4、重新加载php-fpm即可

# /usr/local/webserver/php/sbin/php-fpm reload

此时,查看phpinfo()的结果,在hidef处就可以看到定义的变量。
提高define性能的php扩展hidef的安装和使用

-----------------------------------------------------------------------------

附:

如果使用了APC,apc提供了定义常量的方法。apc_define_constants和apc_load_constants。apc_define_constants将常量转为数组存到一个user cache中。虽然把常量存在了内存中,但每次PHP请求时,仍然需要读cache,分别定义,因此也不会有什么明显的性能提升。我测试了下定义25个常量,使用apc的函数比直接定义常量快了0.01ms。

这样使用:
if(!apc_load_constants('defined')) {
    $constants = array(
        'HX'   => TRUE,
        'D_BUG' => 1
    );
    apc_define_constants('defined', $constants);
}

define() is notoriously slow. Since the main benefit of APC is to increase the performance of scripts/applications, this mechanism is provided to streamline the process of mass constant definition. However, this function does not perform as well as anticipated.

For a better-performing solution, try the hidef extension from PECL.

APC的文档中推荐使用hidef。

PHP 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
PHP个人网站架设连环讲(一)
Oct 09 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 #PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 #PHP
php学习笔记 类的声明与对象实例化
Jun 13 #PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 #PHP
php学习笔记 数组的常用函数
Jun 13 #PHP
PHP中的函数嵌套层数限制分析
Jun 13 #PHP
PHP5中新增stdClass 内部保留类
Jun 13 #PHP
You might like
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
在线竞拍系统的PHP实现框架(二)
2006/10/09 PHP
怎样在PHP中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
layui的select联动实现代码
2019/09/28 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
python远程登录代码
2008/04/29 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python switch 实现多分支选择功能
2020/12/21 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
internal修饰符起什么作用
2013/12/16 面试题
银行员工辞职信范文
2014/01/20 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
医院党建工作总结2015
2015/05/26 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
MySQL数据管理操作示例讲解
2022/12/24 MySQL