首頁  >  文章  >  後端開發  >  PHP中使用hidef代替define最佳化效率

PHP中使用hidef代替define最佳化效率

*文
*文原創
2017-12-26 13:40:191973瀏覽

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,就好了。

附原配置常數的程式範例程式碼:

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(
        &#39;hx1&#39;       => 1,
        &#39;hx2&#39;       => &#39;2&#39;,
        &#39;hx3&#39;       => &#39;3&#39;,
        &#39;hx4&#39;       => &#39;4&#39;,
        &#39;hx5&#39;       => &#39;5&#39;,
        &#39;hx6&#39;       => &#39;6&#39;,
        &#39;hx7&#39;       => &#39;7&#39;,
        &#39;hx8&#39;       => &#39;8&#39;,
        &#39;hx9&#39;       => &#39;9&#39;,
        &#39;hx10&#39;       => &#39;10&#39;,
    );
    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 &#39; &#39;.($t2-$t1)*1000;
$t1 = microtime(1);
for($i=0;$i<10000;$i++) {
    $t = HX;
}    
$t2 = microtime(1);
echo &#39; &#39;.($t2-$t1)*1000;

相關推薦:

php 常數定義的問題

關於php 常數的概念總結

###############php 常數、變數用法詳細介紹#########

以上是PHP中使用hidef代替define最佳化效率的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn