歡迎來到小豬圈!

2009-04-22

寫 PHP 要注意的事項 效能篇

  • 用 isset 取代 strlen 檢查字串最小長度,見 PHP: Strings - Manual 中 String access and modification by character 一節。
    
    <?php
    $string 'aaabbb';
    $string2 'aaabbbcccddd';
    var_dump((strlen($string) > 9) ?true:false);//false
    var_dump((strlen($string2) > 9)?true:false);//true
    var_dump((isset($string[9]))   ?true:false);//false
    var_dump((isset($string2[9]))  ?true:false);//true
    ?>
    
    
  • 字串用單引號 (') 標示比雙引號 (") 快,但在嵌入超過一、二個變數以上時,情況就相反了。
    
    <?php
    $string '中文字測試';
    $string '中文字' $string '測試';
    
    $string "中文字測試";
    $string "中文字{$string}測試";
    ?>
    
    
  • 在相同結果的情況下,儘量使用字串類函式取代 Regular Expressions 函式
  • 在存取整個檔案時 file_get_contents/file_put_contents 比自已用 fopen 快,remote 的情況似乎相反。
  • is_file 比 file_exists 快四、五倍,不過似乎要注意在大量執行緒下的情況。
  • 用 ++$i 比 $i++ 快,但我測試的結果差距非常小。
  • 優先使用內建常數,再找內建函式,再來才考慮自行運算
    • 用 PHP_VERSION 取代 phpversion(),而用 version_compare() 比較版本。
    • 用 M_PI 取代 pi() ,以及其它 M_* 開頭預先計算好的值。
    • DATE_ATOM 及其它 DATE_* 常數。
  • 陣列的索引是字串型態的話,一定要加上引號,雖然不加引號也可以執行,但會產生 E_NOTICE 影嚮效能。整數的索引也可以用字串(加引號)的方式取存,但用整數比較快,參見:用字串索引存取陣列要加上引號
  • 類別建構式(Class constructor)使用 PHP4 版,跟類別同名的函式,比用 PHP5 版 __construct 快約兩倍,這是我在測試版本相容性時發現的,原因不明。
  1. 榨乾 PHP,不得不轉的一篇PHP使用技巧! - 應用討論區 - PHPChina | 中國開源之路 PHPChina|php論壇|Zend中國 - Powered by Discuz!

No comments:

Post a Comment

Comment Form Message

標籤分類

Blog Archive

Labels

Google Analytics Tracking Code

About Me

My photo
Keelung, R.O.C, Taiwan
一個不學無術、混吃等死的傢伙…