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

來源:互聯網
上載者:User
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(        '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 常量定義的問題

關於php 常量的概念匯總

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.