PHP中使用hidef扩展代替define提高性能

 

这篇文章主要介绍了PHP中运用hidef拓展替代define进步功能,这篇文章着重测验hidef的功能,一起介绍了装置办法和运用示例,需求的兄弟能够参阅下
 

网站需求新加一个常量,打开了本地的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的装置和运用

在baidu里查找“hidef”,排第3位的是一个copy我博文的网站:( 而我自个发布的进步define功能的php拓展hidef的装置和运用在前三页没有找到。显然是baidu对自创的辨认出了些误差。

baidu查找“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'   => 'http://www.jb51.net/',
            'WWW_URL'   => 'http://www.jb51.net/',
        );

        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;


                                                                                                                                                  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在CodeWarrior开发环境使用MLX90614体温检测的代码示例: ```c #include <hidef.h> // 引入 HC9S12XDP512 头文件 #include "stdio.h" // 引入标准输入输出头文件 #include "math.h" // 引入数学库头文件 #include "MLX90614.h" // 引入 MLX90614 库头文件 #pragma LINK_INFO DERIVATIVE "mc9s12xdp512" // 设置芯片型号 #define BAUDRATE 9600 // 串口波特率 #define F_BUS 8000000 // 系统时钟频率 void UART0_Init(void); void UART0_SendChar(char); void UART0_SendString(char*); void DelayUs(unsigned int); void main(void) { float temp; char str[32]; EnableInterrupts; // 开启断 UART0_Init(); // 初始化串口 MLX90614_Init(); // 初始化温度传感器 while (1) { temp = MLX90614_ReadObjectTempC(); // 读取物体温度 sprintf(str, "Temperature: %.2f C\r\n", temp); // 将温度值转换为字符串 UART0_SendString(str); // 发送字符串到串口 DelayUs(100000); // 延时 100ms } } void UART0_Init(void) { SCI0BDH = ((F_BUS / 16 / BAUDRATE) >> 8) & 0xFF; // 设置波特率寄存器高字节 SCI0BDL = (F_BUS / 16 / BAUDRATE) & 0xFF; // 设置波特率寄存器低字节 SCI0C2 |= 0x0C; // 使能接收和发送 } void UART0_SendChar(char c) { while (!(SCI0S1 & 0x80)); // 等待发送缓冲区为空 SCI0D = c; // 发送字符 } void UART0_SendString(char* str) { while (*str) { UART0_SendChar(*str++); } } void DelayUs(unsigned int us) { unsigned int i, j; for (i = 0; i < us; i++) { for (j = 0; j < 10; j++) { __asm__ __volatile__("nop"); // 空操作 } } } ``` 需要注意的是,以上代码引入了一个名为`MLX90614.h`的头文件,这个头文件定义了一些与MLX90614相关的函数和常量,需要根据实际情况编写。此外,这段代码使用了串口输出温度值,需要将串口连接到电脑或其他设备上进行查看。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值