首頁 >後端開發 >php教程 >PHP程式最佳化

PHP程式最佳化

WBOY
WBOY原創
2016-08-08 09:28:39966瀏覽

 PHP程式最佳化

        Php程式最佳化的內容比較多,以下重點介紹PHP程式碼最佳化、Session機制最佳化、使用快取中間件以及PHP程式碼快取系統(主要是APC加速)幾個部分。

       最佳化PHP程式碼

        掌握足夠的技巧之後,我們才能對PHP程式碼進行執行最佳化。當程式編碼工作完成之後,我們通常會讓一些比較資深的程式設計師來對程式碼進行審查,評估程式的品質並找出需要最佳化的點,這個過程也叫做 Code Review。以下我們來介紹一些比較常見的PHP程式設計技巧,以及 Code Review 過程中可能涉及的一些最佳化原則。

        1、升級到最新的PHP版本

        要知道,程式語言本身也是不斷發展的,新版本的語言通常包含語言本身的漏洞修補和效能最佳化。因此作為專業人士,我們需要定期關注新版本的出現,對於PHP來說,我們可以從官網 http://php.net/上獲取到所需資訊。

        2、減少include 和 require

        雖然PHP本身已經對這個問題做過一定的優化,但是在大量使用情況下有可能會造成性能的下降。這個過程可以採用安裝APC加速器組件的方法來緩解。

        3、使用局部變數來取代全域變數

        局部變數的速度是最快的,特別是在某些循環邏輯中,我們盡可能使用局部變數來運算的。至於為什麼不用全域變量,一方面是因為運作效率的問題,另一方面則是考慮到全域變數不易於2管理。      

        4、盡量使用靜態函數或方法

        有可能我們應該盡量使用靜態函數或方法

        如果有可能我們應該盡量使用功能或方法來定義為靜態的,即加上 static 標記,這樣有可能讓您可以執行好程式的速度。

        5、釋放那些不用的變量或資源

        不要過分的依賴PHP的內存回收機制,程序中一些用不到的變量或者資源應該及時的釋放,我們可以使用其方法,或者我們可以使用其設定為null。另外,如果遇到其他和元件相關的資源更要特別注意,例如資料庫連線。

        6、使用單引號替代雙引號來包含字串

        在PHP中,字串通常使用單引號來包含,因為使用雙引號可能會產生字元轉義甚至會產生字元的的執行效率要比雙引號高。

        7.使用@符號屏蔽錯誤會降低腳本運行速度

        為了使用方便,某些程式設計師喜歡推薦@來封鎖錯誤訊息,但是這種做法會降低腳本的運行速度,不使用。

        8、不要過度使用PHP的OOP

        為了能更好的管理代碼,現在比較大型的PHP程序都更傾向使用面向對象思想(OOP)來構建程序比較,太多類別庫也有可能產生大量的include 和require 操作,從而造成額外的開銷。因此,我們要根據實際情況合理使用OOP思想。這個問題同樣可以使用APC加速組件來緩解。

        9.使用抽象類別取代介面

        在PHP中使用介面(inteerface)的成本非常高,且程式設計時盡量避免使用。類似的邏輯封裝我們通常可以使用抽象類別(abstract class)來取代。

       10、使用正規表示式代價昂貴

        雖然,PHP語言的正則表達式功能非常強大,但我們需要知道它的執行成本同樣高昂,在盡量處理的情況下,應該在盡量使用PHP的字符函數來代替。

        11、盡可能的壓縮需要儲存的資料

        任何資料的儲存都需要佔用系統的空間資源,所以盡量在可能的範圍內對資料例如,我們儲存IP位址時可以使用ip2long函數把IP位址轉換為整型資料來存儲,然後再透過long2ip函數還原。另外,對一些大數據還可以使用gzcompress 和 gzuncompress 進行壓縮和解壓。

收到

  • 分支語句中switch...case 的效率高於if...elseif...else
  • 循環語句中foreach 的效率最高,for 其次,while 最低
  • 疊加語句語句中++$i(字首) 的寫法快於$i++(字尾)

        13、使用更有效率的函數

       PHP的函數來完成相同的函數來完成相同的函數。不過,不同函數的運作效率也有不同,我們在使用是需要注意,下面我們將一些常用函數進行比較。

  • 字符打印函數echo 快於print
  • 字符替換函數strtr 效率最高,str_replace 其次,prea_replace 正則替換最低
  • 數組查詢?可操作性、彈性最高,fsockopen 次之,
  • file_get_contents 和fopen 最低

      雖然,對於某些邏輯不是很複雜的程式來說,也許每次程式碼優化的效果並不是非常明顯,但是養成良好的程式設計習慣是非常重要的,這也是一般程式設計師和高階程式設計師之間的差別。上面所列並非所有的PHP程式設計技巧,況且要掌握這些技巧也不是一朝一夕所能完成的;所謂學海無涯,只有在學習和動手的過程中不斷總結積累,才能讓自己的編程能力更上一層樓。

      PHP最佳化Session機制

 實際上,Session會話的功能都可以在系統設定檔php.ini中設置,當然我們也可以使用 ini_set 函數(ini_get 取得配置)從程式上進行設定。

      一般不建議啟用auto_start(session.auto_start:是否自動啟用) ,因為創建Session需要消耗系統資源,我們通常只會在需要用到Sesson時,才會使用session_start函數來開啟Session功能。其次,Session的有效期限需根據系統的情況而定。如果太長,有可能導致會話資料太多造成負載問題;而加入太短,也有可能因為會話建立過於頻繁而出現效能問題。系統預設的有效時間為1440秒,也就是24分鐘,在實際專案中我們通常會將這個時間設定在1-8小時之間。另外要注意的是,PHP Session 使用的預設儲存方式是檔案存儲,在php.ini中我們可以透過session.save_handle選線來選擇需要的儲存方式,但是使用檔案儲存方式的效率比較低,也不利於系統架構擴展,在實際項目中經常透過session_set_save_handler方法來設定Session回調接口,用於控制Session會話的邏輯,常見的儲存介質有資料庫、分散式快取伺服器等。

       PHP Session 的最佳化想法。首先,每次創建Session時都會產生資源消耗,千萬不要想當然在全域設定檔中使用session_start 方法。其次,每次會話請求都需要確保帶上Session ID,因為服務端取得不到Session ID的話,將會重新建立一個。另外,選擇儲存方式時,盡量使用快速的儲存介質,例如快取伺服器Memcache(d)、Redis等。

       使用快取中間件

          的壓力。目前業界比較常用的快取中間件為 Memcache 和 Redis(兩者的環境搭建和用法以及區別,讀者請查找網絡資源,此處不做詳細介紹) 。根據實際項目中所使用的效果,快取中間件通常能大幅提高服務端的查詢速度。另外,Redis快取還可當作寫入佇列來使用,也就是先把資料寫入到Redis快取中,然後再轉存到資料中去。

       使用APC加速

      

      的程式碼

因此再上線時。我們還需要使用一些程式碼層級的快取來加速程式碼的執行。 🎜🎜🎜🎜🎜🎜        APC(Alternative PHP Cache,PHP程式碼快取系統)是非常好的PHP程式碼快取解決方案,透過快取和最佳化PHP中間碼(opcode)來提高PHP的執行效率。 🎜🎜🎜

        註:與APC 同等級的免費的PHP程式碼快取技術還有eAccelerator 和XCache( 安裝及差異:http://blog.cs.net/mossader/arto.net/dep.

       最佳化資料傳輸

        在通訊協定的一般設計原則中,一般性和間接性是最重要的。選擇JSON協定作為程式應用協定的基礎本身就是對系統的一種最佳化。

          2、使用gzip壓縮

  二數據本身的大小。對於HTTP協定來說,gzip是目前的主流壓縮演算法之一,大部分的HTTP伺服器都支援這種壓縮演算法(關於Apche、Nginx 設定gzip壓縮功能模組,請 自行尋找網路資源)      

    註:本文摘錄自《Android 與PHP 發展最佳實務》第九章:服務端最佳化(有刪改)

以上就介紹了PHP程式優化,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

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