標籤:des style class code java tar
1. 不要隨便就複製變數
有時候為了使PHP 代碼更加整潔,一些PHP 新手(包括我)會把預定義好的變數複製到一個名字更簡短的變數中,其實這樣做的結果是增加了一倍的記憶體消耗,只會使程式更加慢。試想一下,在下面的例子 中,如果使用者惡意插入512KB 位元組的文字到文本輸入框中,這樣就會導致1MB 的記憶體被消耗!
BAD:
$description = $_POST[‘description‘]; echo $description;
GOOD:
echo $_POST[‘description‘];
2. 對字串使用單引號
PHP 引擎允許使用單引號和雙引號來封裝字串變數,但是這個是有很大的差別的!使用雙引號的字串告訴PHP 引擎首先去讀取字串內容,尋找其中的變數,並改為變數對應的值。一般來說字串是沒有變數的,所以使用雙引號會導致效能不佳。最好是使用字串串連而不 是雙引號字串。
BAD:
$output = "This is a plain string";
GOOD:
$output = ‘This is a plain string‘;
BAD:
$type = "mixed"; $output = "This is a $type string";
GOOD:
$type = ‘mixed‘; $output = ‘This is a ‘ . $type .‘ string‘;
3. 使用echo 函數來輸出字串
使用echo() 函數來列印結果出了有更容易閱讀之外,在下個例子中,你還可以看到有更好的效能。
BAD:
print($myVariable);
GOOD:
echo $myVariable;
4. 不要在echo 中使用串連符
很多PHP 程式員(有包括我)不知道在用 惡臭 輸出多個變數的時候,其實可以使用逗號來分開的,而不必用字串先把他們先連起來,如下面的第一個例子中,由於使用了串連符就會有效能問題,因為這樣就會 需要PHP 引擎首先把所有的變數串連起來,然後在輸出,而在第二個例子中,PHP 引擎就會按照循序輸出他們。
BAD:
echo ‘Hello, my name is‘ . $firstName . $lastName . ‘ and I live in ‘ . $city;
GOOD:
echo ‘Hello, my name is‘ , $firstName , $lastName , ‘ and I live in ‘ , $city;
5. 使用switch/case 代替if/else
對於只有單個變數的判斷,使用switch/case 語句而不是if/else 語句,會有更好的效能,並且代碼更加容易閱讀和維護。
BAD:
if($_POST[‘action‘] == ‘add‘) { addUser(); } elseif ($_POST[‘action‘] == ‘delete‘) { deleteUser(); } elseif ($_POST[‘action‘] == ‘edit‘) { editUser(); } else { defaultAction(); }
GOOD:
switch($_POST[‘action‘]) { case ‘add‘: addUser(); break; case ‘delete‘: deleteUser(); break; case ‘edit‘: editUser(); break; default: defaultAction(); break; }
1.在可以用file_get_contents調換file、fopen、feof、fgets等系列辦法的景象下,盡量用 file_get_contents,因為他的效力高得多!然則要重視file_get_contents在開啟一個URL檔案時辰的PHP版本題目;
2.盡量的少進行檔案操縱,固然PHP的檔案操縱效力也不低的;
3.最佳化Select SQL語句,在可能的景象下盡量少的進行Insert、Update操縱(在上,我被惡批過);
4.儘可能的應用PHP內建函式(然則我卻為了找個PHP裡面不存在的函數,浪費了本可以寫出一個自訂函數的時候,經驗題目啊!);
5.輪迴內部不要聲明變數,尤其是大變數:對象(這如同不只是PHP裡面要重視的題目吧?);
6.多維陣列盡量不要輪迴嵌套賦值;
7.在可以用PHP內部字串操縱函數的景象下,不要用Regex;
8.foreach效力更高,盡量用foreach庖代while和for輪迴;
9.用單引號調換雙引號引用字串;
10.“用i+=1庖代i=i+1。合適c/c++的習慣,效力還高”;
11.對global變數,應當用完就unset()掉
12.在多重嵌套輪迴中,如有可能,該當將最長的輪迴放在內層,最短輪迴放在外層,如許就可以削減cpu跨切輪迴層的次數,從而最佳化法度機能。
40個最佳化你的php代碼的小提示
1. 若是一個辦法可靜態化,就對它做靜態聲明。速度可提拔至4倍。
2. echo 比 print 快。
3. 應用echo的多重參數(譯註:指用逗號而不是句點)庖代字串串連。
4. 在履行for輪迴之前斷定最大輪迴數,不要每輪迴一次都策畫最大值。
5. 刊出那些不消的變數尤其是大數組,以便開釋記憶體。
6. 盡量避免應用__get,__set,__autoload。
7. require_once()價格昂貴。
8. 在包含檔案時應用完全路徑,解析操縱體系路徑所需的時候會更少。
9. 若是你想知道指令碼開端履行(譯註:即辦事器端收到用戶端懇求)的時刻,應用¥_SERVER[‘REQUEST_TIME""]要好於time()。
10. 搜檢是否能用strncasecmp,strpbrk,stripos函數庖代Regex完成雷同功能。
11. str_replace函數比preg_replace函數快,但strtr函數的效力是str_replace函數的四倍。
12. 若是一個字串調換函數,可接管數組或字元作為參數,並且參數長度不太長,那麼可以推敲額外寫一段調換代碼,使得每次傳遞參數是一個字元,而不是唯寫一行代碼接管數組作為查詢和調換的參數。
13. 應用選擇分支語句(譯註:即switch case)好於應用多個if,else if語句。
14. 用@樊籬錯誤訊息的做法很是低效。
15. 開啟apache的mod_deflate模組。
16. 資料庫連接當應用完畢時應關掉。
17. ¥row[‘id""]的效力是¥row[id]的7倍。
18. 錯誤訊息價格昂貴。
19. 盡量不要在for輪迴中應用函數,比如for (¥x=0; ¥x < count(¥array); ¥x)每輪迴一次都邑調用count()函數。
20. 在辦法中遞增局部變數,速度是最快的。幾乎與在函數中調用局部變數的速度相當。
21. 遞增一個全域變數要比遞增一個局部變數慢2倍。
22. 遞增一個對象屬性(如:¥this->prop++)要比遞增一個局部變數慢3倍。
23. 遞增一個未預定義的局部變數要比遞增一個預定義的局部變數慢9至10倍。
24. 僅定義一個局部變數而沒在函數中調用它,同樣會減慢速度(其程度相當於遞增一個局部變數)。PHP可能會搜檢看是否存在全域變數。
25. 辦法調用看來與類中定義的辦法的數量無關,因為我(在測試辦法之前和之後都)添加了10個辦法,但機能上沒有變更。
26. 衍生類別中的辦法運行起來要快於在基類中定義的同樣的辦法。
27. 調用帶有一個參數的空函數,其花費的時候相當於履行7至8次的局部變數遞增操縱。類似的辦法調用所花費的時候接近於15次的局部變數遞增操縱。
28. 用單引號庖代雙引號來包含字串,如許做會更快一些。因為PHP會在雙引號包抄的字串中搜尋變數,單引號則不會。當然,只有當你不須要在字串中包含變數時才可以這麼做。
29. 輸出多個字串時,用逗號庖代句點來分隔字串,速度更快。重視:只有echo能這麼做,它是一種可以把多個字串算作參數的“函數”(譯註:PHP手冊中說echo是說話布局,不是真正的函數,故把函數加上了雙引號)。
30. Apache解析一個PHP指令碼的時候要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,罕用指令碼。
31. 除非指令碼可以緩衝,不然每次調用時都邑從頭編譯一次。引入一套PHP緩衝機制凡是可以提拔25%至100%的機能,以免除編譯開銷。
32. 盡量做緩衝,可應用memcached。memcached是一款高機能的記憶體對象緩衝體系,可用來加快動態Web應用法度,減輕資料庫負載。對運算碼(OP code)的緩衝很有效,使得指令碼不必為每個懇求做從頭編譯。
33. 當操縱字串並須要查驗其長度是否滿足某種請求時,你想當然地會應用strlen()函數。此函數履行起來相當快,因為它不做任何策畫,只返回在zval 布局(C的內建資料布局,用於儲存PHP變數)中儲存的已知字串長度。然則,因為strlen()是函數,多幾許少會有些慢,因為函數調用會經過諸多步 調,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、雜湊尋找,會跟從被調用的函數一路履行。在某些景象下,你可以應用isset() 技能加快履行你的代碼。
Ex.(舉例如下)
if (strlen(¥foo) < 5) { echo “Foo is too short”; }
vs.(與下面的技能做鬥勁)
if (!isset(¥foo{5})) { echo “Foo is too short”; }
調用isset()剛巧比strlen()快,因為與後者不合的是,isset()作為一種說話布局,意味著它的履行不須要函數尋找和字母小寫化。也就是說,實際上在查驗字串長度的頂層代碼中你沒有花太多開銷。
34. 當履行變數¥i的遞增或遞減時,¥i++會比++¥i慢一些。這種差別是PHP特有的,並不實用於其他說話,所以請不要批改你的C或Java代碼並指望它 們能立即變快,沒用的。++¥i更快是因為它只須要3條指令(opcodes),¥i++則須要4條指令。後置遞增實際上會產生一個姑且變數,這個姑且變 量隨後被遞增。而前置遞增直接在原值上遞增。這是最佳化處理懲罰的一種,正如Zend的PHP最佳化器所作的那樣。緊記這個最佳化處理懲罰不失為一個好主意, 因為並不是所有的指令最佳化器都邑做同樣的最佳化處理懲罰,並且存在多量沒有裝配指令最佳化器的互連網辦事供給商(ISPs)和辦事器。
35. 並不是事必物件導向(OOP),物件導向往往開銷很大,每個辦法和對象調用都邑消費很多記憶體。
36. 並非要用類實現所有的資料布局,數組也很有效。
37. 不要把辦法細分得過多,細心想想你真正籌算重用的是哪些代碼?
38. 當你須要時,你總能把代碼分化成辦法。
39. 盡量採取多量的PHP內建函數。
40. 若是在代碼中存在多量耗時的函數,你可以推敲用C擴大的體式格式實現它們。
41. 評估查驗(profile)你的代碼。查驗器會告訴你,代碼的哪些項目組消費了幾許時候。Xdebug調試器包含了查驗法度,評估查驗總體上可以顯示出代碼的瓶頸。
42. mod_zip可作為Apache模組,用來即時緊縮你的資料,並可讓資料轉送量降落80%。