首頁  >  文章  >  後端開發  >  提高php運行速度的一些小技巧分享

提高php運行速度的一些小技巧分享

高洛峰
高洛峰原創
2016-12-01 10:14:371268瀏覽

1、程式碼最佳化 

程式碼最佳化不只是寫出乾淨且清晰的程式碼,而是對程式碼進行一定的簡化。可以使用Zend Optimizer來自動幫助完成這些繁雜的工作。 Zend Optimizer可以從Zend Technologies的網站http://www.zend.com/免費取得,但必須同意它的許可約定,因為它不是以GPL方式發行的。它的原理很簡單,即透過偵測Zend引擎產生的中間程式碼,並對它進行最佳化,從而獲得更高的執行速度。 
在使用了Zend Optimizer後,複雜的PHP原始程式的執行效率馬上會顯著提高,缺點是最佳化後的程式碼可讀性下降,為程式碼修改帶來困難。

Zend Optimizer的安裝方法非常簡單,只要根據使用者使用的平台,下載相關的預編譯版本,把下面2行程式碼加入php.ini檔案中,重新啟動Web 伺服器就行了: 
zend_optimizer.optimization_level=15
zend_extension=″/path/to/ZendOptimizer.so″ 
zend_loader.enable=Off 

額外增加的第三行程式碼是可選的,因為停用zend_loader將會使最佳化速度更快。要注意的是,只有在不使用Zend Encoder Runtime的時候,才可以停用zend_loader。 

2、使用快取 

如果PHP程式的規模很大,那麼提高速度的方法就是使用快取。現在已經有許多快取方案可供選擇,其中包括Zend Cache、APC和Afterburner Cache。 

上面這幾種都是「快取模組」(caching modules)。第一次呼叫PHP檔案時,快取模組從PHP原始碼產生一些中間程式碼,並把這些中間程式碼儲存在Web伺服器的記憶體中。以後再呼叫這些檔案時,就可以直接使用記憶體中「編譯」過的程式碼。這種方法確實能夠改善應用的效能,因為它使得磁碟存取量減低到了最少的程度(程式碼已經讀取和解析),程式碼直接在記憶體中運行,使得伺服器回應請求的速度大大提高。

當然,快取模組也會監視PHP原始檔案的變化,必要時會重新快取頁面,從而防止使用者得到的頁面仍舊由過時的PHP程式碼產生。由於快取模組能夠明顯地降低伺服器的負載,提高PHP應用的回應效率,因此它們非常適合於負載較大的網站使用。 

Zend Cache是​​Zend Technologies公司開發的商業軟體。在第一次運行後,PHP頁面的運行速度立刻會有很大的提高,伺服器的空閒資源也更多了。缺點是它不是免費的,但性價比還是很高的。

Afterburner Cache是​​Bware Technologies公司開發的免費快取模組。功能與Zend Cache基本上一樣,但提高效能方面比不上Zend Cache。 

APC(Alternative PHP Cache)是由Community Connect公司開發的另一個免費快取模組,目前版本是2.0.4,可以從http://pecl.php.net/package/APC取得。對於產品應用來說,它的效能很穩定,而且也能大幅提高回應請求的速度。 

3、壓縮網頁內容 

影響網站的存取速度還有1個重要因素,就是下載速度。解決的方法就是壓縮網頁內容。對於純文字內容而言,HTTP壓縮技術可壓縮至原大小的40%以下,進而提供60%以上的資料傳輸節約。雖然Web伺服器會因為壓縮導致CPU佔用的略微上升,但可以節省大量用於傳輸的網路IO。 

根據IETF規範,大部分瀏覽器都支援使用gzip壓縮演算法進行內容壓縮。也就是說,可以先用gzip壓縮網頁內容,然後再傳送到客戶端瀏覽器,瀏覽器在接收的時候會自動解壓縮數據,再顯示頁面。這個過程對使用者來說,是完全透明的。同樣,壓縮Web頁面的內容也有不同的方法。 

Mod_gzip是1種開放原始碼的、標準的Apa​​che模組,也叫網路內容加速模組。可以將它和Apache一起編譯,也可以當作DSO。相對於普通的瀏覽過程,它可以節省40%左右的流量。 Mod_gzip不僅可以壓縮靜態的內容,如HTML、XML,而且對動態生成的,包括SQL、Java、WML、VRML等產生的內容,在伺服器端進行即時壓縮並傳輸,其壓縮效率驚人,一般都為60 %~85%。 

壓縮動態網頁的內容,也可以使用class.gzip來對.php檔案編碼,class.gzip透過在PHP腳本的開頭和結尾呼叫它的一些函數來壓縮網頁內容。如果整個網站都需要這樣的壓縮,可以在php.ini檔案中的auto_prepend和auto_append中呼叫這些函數,但是會佔用一定的系統開銷。

PHP4.0.4推出了1種新的輸出緩衝的處理手段—ob_gzhandler,它的作用和class.gzip完全一樣,區別是可以直接把它加到php.ini 文件中,語法如下: 

output_handler = ob_gzhandler; 

這樣將啟動PHP的輸出緩衝功能,並在發送內容前進行壓縮。如果不想在這裡設置,只在需要的地方才改變這個預設(不壓縮),只要在需要壓縮的PHP來源程式目錄中,修改一下.htaccess檔案就行了,語法如下: 
php_value output_handler ob_gzhandler 

或或直接在PHP程式碼中呼叫它: 

ob_start("ob_gzhandler"); 
輸出緩衝的效果確實很理想,並且不會為伺服器帶來額外的系統開銷。要注意的一點是Netscape Communicator不支援影像的壓縮。因此除非知道訪客都使用Internet Explorer,否則必須禁止壓縮jpeg和gif圖象。

4 其它技巧 

在編程時,使用一些小技巧也可以加快PHP的運行速度: 
(1)用i+=1代替i=i+1,既符合c/c++的習慣,效率相對還更高。 
(2)盡可能使用PHP內部函數。 
(3)能使用單引號字串時,盡量使用單引號字串。單引號字串的效率要高於雙引號字串。 
(4)用foreach取代while遍歷數組,foreach的效率明顯高於while循環,而且不需要呼叫reset函數。 

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