当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-22 14:33:28 浏览: 评论:0 

这篇文章主要介绍了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”,排第3位的是一个copy我博文的网站:( 而我自己发布的提高define性能的php扩展hidef的安装和使用在前三页没有找到。显然是百度对原创的识别出了些偏差。

百度搜索“hidef php”,那个网址排第一,第二是官网,我的在第三。

gg搜索“hidef php”,第一官网,第3是另一篇原创,我的在第四。gg的识别就不错!

360搜索"hidef php",第一那个copy站,第二我的,第三另一篇原创。

因此有了这篇的诞生,看看能不能帮第一篇排上去或者这篇排上去也行。

附原配置常量的程序示例代码:

  1. if (function_exists('apc_load_constants')) { 
  2.           function define_array($key$arr$case_sensitive = false) { 
  3.               if (!apc_load_constants($key$case_sensitive)) { 
  4.                   apc_define_constants($key$arr$case_sensitive); 
  5.               } 
  6.           } 
  7.       } else { 
  8.           function define_array($key$arr$case_sensitive = false) { 
  9.               foreach ($arr as $name => $value) { 
  10.                   define($name$value$case_sensitive); 
  11.               } 
  12.           } 
  13.       } 
  14.  
  15.       $constants = array
  16.           'HX'   => 1, 
  17.           'BLOG_URL'   => 'https://www.phpfensi.com/'
  18.           'WWW_URL'   => 'https://www.phpfensi.com/'
  19.       ); 
  20.  
  21.       define_array('hx_defined',$constants); 

附测试define速度的代码,代码如下:

  1. <?php 
  2. $t1 = microtime(1); 
  3.  
  4.     $constants = array
  5.         'hx1'       => 1, 
  6.         'hx2'       => '2'
  7.         'hx3'       => '3'
  8.         'hx4'       => '4'
  9.         'hx5'       => '5'
  10.         'hx6'       => '6'
  11.         'hx7'       => '7'
  12.         'hx8'       => '8'
  13.         'hx9'       => '9'
  14.         'hx10'       => '10'
  15.     ); 
  16.  
  17.     function define_array($key$arr) { 
  18.         foreach ($arr as $name => $value) { 
  19.             define($name.$i$value); 
  20.         } 
  21.     } 
  22.     
  23.     for($i=0;$i<100;$i++) { 
  24.         define_array($i,$constants); 
  25.     } 
  26.     
  27.     
  28. $t2 = microtime(1); 
  29. echo ($t2-$t1)*1000; 
  30.  
  31. //读性能 
  32. $t1 = microtime(1); 
  33. for($i=0;$i<10000;$i++) { 
  34.     $t = hx1; 
  35. }    
  36. $t2 = microtime(1); 
  37. echo ' '.($t2-$t1)*1000; 
  38.  
  39. $t1 = microtime(1); 
  40. for($i=0;$i<10000;$i++) { 
  41.     $t = HX; 
  42. }    
  43. $t2 = microtime(1); 
  44. echo ' '.($t2-$t1)*1000;

Tags: hidef define

分享到: