高效php的寫法

2021-08-11 01:46:43 字數 1709 閱讀 7108

1.  單引號代替雙引號來包含字串;

2.  銷毀變數去釋放記憶體,特別是大的陣列;

陣列和物件在php特別佔記憶體的,這個由於php的底層的zend引擎引起的,一般來說,php陣列的記憶體利用率只有 1/10, 也就是說,乙個在c語言裡面100m 記憶體的陣列,在php裡面就要1g。特別是在php作為後台伺服器的系統中,經常會出現記憶體耗費太大的問題。

3.  能用php內部字串操作函式的情況下,盡量用他們,不要用正規表示式; 因為其效率高於正則;

str_replace字元替換比正則替換preg_replace快,但strtr比str_replace又快1/4;

另外不要做無謂的替換即使沒有替換,str_replace也會為其引數分配記憶體。很慢!解決辦法:用 strpos 先查詢(非常快),看是否需要替換,如果需要,再替換。效率:- 如果需要替換:效率幾乎相等,差別在 0.1% 左右。如果不需要替換:用 strpos 快 200%。

4.  盡可能的使用php內部函式

5.  盡量的少進行檔案操作,雖然php的檔案操作效率也不低的;

在可以用file_get_contents替代file、fopen、feof、fgets

6. 最好不用@,用@掩蓋錯誤會降低指令碼執行速度;

用@實際上後台有很多操作。用@比起不用@,效率差距:3 倍。特別不要在迴圈中使用@,在 5 次迴圈的測試中,即使是先用error_reporting(0) 關掉錯誤,在迴圈完成後再開啟,都比用@快。

7.  foreach效率更高,盡量用foreach代替while和for迴圈;

8.  建立乙個未宣告的區域性變數要比乙個已經定義過的區域性變數慢9-10倍;

9.  迴圈內部不要宣告變數,尤其是大變數:物件

10.  在迴圈裡別用函式。在迴圈之前就設定好迴圈的最大次數,而非在在迴圈中;

例如for($x=0; $x 11. 不要隨便就複製變數

有時候為了使 php **更加整潔,一些 php 新手(包括我)會把預定義好的變數複製到乙個名字更簡短的變數中,其實這樣做的結果是增加了一倍的記憶體消耗,只會使程式更加慢。

12. apache解析乙個php指令碼的時間要比解析乙個靜態html頁面慢2至10倍。

盡量多用靜態html頁面,少用指令碼。

13.使用選擇分支語句

switch case好於使用多個if,elseif語句,並且**更加容易閱讀和維護。

14.對global變數,應該用完就unset()掉?

17.使用++$i遞增

$i++會比++$i慢一些。這種差異是php特有的,,並不適用於其他語言。後置遞增實際上會產生乙個臨時變數,這個臨時變數隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如zend的php優化器所作的那樣。

18.echo 效率高於 print  

因為echo沒有返回值,而print返回乙個整形。注意,echo大字串的時候,如果沒有做調整就嚴重影響效能。使用開啟apached的mod_deflate進行壓縮或者開啟ob_start先將內容放進緩衝區。

19.requiere_once()比較耗資源;

這是因為requiere_once需要判斷該檔案是否被引用過,所以能不用盡量不用。常用require/include方法避免。

20.在includes和requires中使用絕對路徑。

如果包含相對路徑,php會在include_path裡面遍歷查詢檔案。用絕對路徑就會避免此類問題,因此解析作業系統路徑所需的時間會更少。

PHP寫法注意

場景一 遍歷乙個陣列獲取新的資料結構 也許你會這樣寫 申明乙個新的陣列,組裝成你想要的資料 tmp foreach arr as k v 最後得要你想要的陣列 tmp 也許你覺著上面的寫法不是很好,那我們下面換種寫法 foreach arr as k v 乾掉你不想要的結構 unset arr k ...

oracle高效率insert寫法

這裡我們這邊驗證乙個oracle非常規的高效率insert寫法 建立2個測試表hyper hyperw create table hyper a int create table hyperw a int 插入100萬條記錄 注意 此處耗時嚴重 declare i int 1 begin while...

MySQL比like語句更高效的寫法

like語句 select column from table where condition like keyword 事實上,可以使用 locate position 和 instr 這兩個函式來代替 一 locate語句 select column from table where locat...