這篇文章主要介紹了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的安裝和使用
在百度裡搜尋“hidef”,排第3位的是一個copy我博文的網站:( 而我自己發布的提高define性能的php擴展hidef的安裝和使用在前三頁沒有找到。顯然是百度對原創的識別出了些偏差。
百度搜尋「hidef php ”,那個網址排第一,第二是官網,我的在第三。
gg搜尋“hidef php”,第一官網,第3是另一篇原創,我的在第四。gg的識別就不錯!
360搜尋"hidef php",第一那個copy站,第二我的,第三另一篇原創。
因此有了這篇的誕生,看看能不能幫第一篇排上去或這篇排上去也行。0
附原配置常數的程式範例程式碼:
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' => '//www.jb51.net/', 'WWW_URL' => '//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;
#總結:以上就是這篇文章的全部內容,希望能對大家的學習有幫助。
相關推薦:
##
以上是PHP測試hidef的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!