熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

提升PHP執行速度全攻略分析

2013-11-15 12:21:36  來源: PHP編程 

  PHP的優點之一是速度很快對於一般的網站應用可以說是已經足夠了不過如果站點的訪問量很高帶寬窄或者其它的因素令服務器產生性能瓶頸的時候你可能得想想其它的辦法來進一步提高PHP的速度了這篇文章將從幾個方面介紹如何做到這一點從而令用戶浏覽的時候更加
  
  代碼優化
  
  如何寫更干淨的代碼這一點我想每個人都清楚在需要速度的時候你可能已經在PHP源代碼的優化上面做了不少的工作這裡所提出的是這個煩瑣的工作可以交由其它工具來完成這就是Zend Optimizer此程序可以從Zend Technologies的網站()免費得到它的原理很簡單通過檢測Zend引擎產生的中間代碼並且優化它來得到更高的執行速度我認為優化代碼是一項頗煩瑣的工作而且優化後的代碼可能變得難以理解尤其是當你放下該PHP程序一段時間後突然間客戶要求你做一些修改時可能你自己也不懂了;)因此我建議你在PHP的源代碼較為復雜的時候用Zend Optimizer來做這個優化的工作好處是它不會令你的代碼變得復雜難懂
  
  安裝Zend Optimizer是非常簡單的只要根據你使用的平台下載相關的預編譯庫並且在你的phpini中加入兩行重新啟動你的web服務器就行了!
  
  zend_optimizeroptimization_level=zend_extension=/path/to/ZendOptimizerso zend_loaderenable=Off
  
  你可能有點奇怪不是說兩行嗎怎麼變成三行了不過第三行是可選的看來禁止這個zend_loader將會令優化的速度更快因此不妨在你的phpini文件中多加這一行要注意的是只有在你不使用Zend Encoder Runtime的時候才可以禁止zend_loader關於Zend Encoder Runtime還會在下文提到
  
  要更快嗎?使用cache(緩沖)吧
  
  如果你的PHP應用還需要更快的速度下一個辦法是緩沖要實現這一點有幾種不同的方式我自己就試用過Zend Cache(評測版本)APC和Afterburner Cache
  
  以上提到的都是緩沖模塊它們的原理都差不多在php文件被首次請求的時候通過將你的PHP源代碼的中間代碼存儲在web服務器的內存中對於以後同樣的請求都直接提供內存中的編譯版本由於它可以令磁盤的訪問達到最小化因此這個方法確實可以極大地提高PHP的性能更為方便的是當你的PHP源代碼修改時緩沖的模塊可以察覺到這些變化並且重新載入一樣因此你不必擔心客戶得到的是舊版本的程序這些緩沖的模塊確實不錯但是我應該選用哪一種呢?下面分別介紹一下
  
  Zend Cache是Zend Technologies的一個商業化的產品(它也是免費為我們提供PHP引擎和Zend Optimizer的公司)它確實不錯在首次運行後你可以明顯察覺到PHP的速度得到了很大的提高服務器的空閒資源也更多了缺點是你要付費購買它但就性價比來說還是非常值得的
  
  Afterburner Cache是Bware Technologies()提供的免費緩沖模塊當前還只是beta版它所做的工作看來與Zend Cache差不多不過性能的提高就比不上Zend Cache而且現有的版本不能和Zend Optimizer一起工作不過它是免費的
  
  APC(Alternative PHP Cache)是由Community Connect()提供的另一個免費模塊它的工作很穩定速度也有不少的提高要注意的是我還沒有找到一個官方的測試數據這些只是在我的應用上作測試因此不能下一個結論
  
  經過以上兩個的方法相信你的PHP應用的性能已經得到了很大的提高現在該從另一個方面來考慮了下載速度如果你的應用只是在公司內跑所有的客戶都使用Mb/s的以太網連接到服務器這可能不是一個問題但是如果你的客戶中有使用慢速的modem連接的你就要考慮使用內容壓縮這個方法了
  
  根據IETF的規范大多數的浏覽器都支持gzip的內
  
  容壓縮這意味著你在將web的內容發給客戶的浏覽器前可以先使用gzip進行壓縮浏覽器在接收的時候就會自動解壓數據並且令用戶看到原來的頁面同樣壓縮web頁面的內容也有幾個不同的方法
  
  mod_gzip是Remote Communications(/columns/wwwremo)免費提供的一個Apache模塊它可以壓縮靜態的web頁面它工作得很好你只需要將它和apache一起編譯就行了(或者將它作為一個DSO使用)Remotecommunications的人說它還可以壓縮動態的內容包括mod_php mod_perl等不過我嘗試了一下看來並不行我在mod_gzip的郵件列表中了解到這個bug將在下一個版本中修正(我想應該是f版本)不過你仍然可以用它作靜態內容的壓縮
  
  不過我們還想壓縮動態的內容因此我們必須找另外的辦法一個辦法是使用classgzip encodephp()只要在你的PHP腳本中的開頭和結尾調用這個PHP類就可以壓縮你的頁面內容如果整個站點都需要這樣的壓縮你可以在你的phpini文件中的auto_prepend和auto_append中調用這些函數它工作得很好不過在負載很重的站點上它明顯會帶來一點的系統開銷要詳細了解它是如何工作的可以看一下它的類代碼(你至少需要在編譯PHP時加入zlib支持)作者在裡面的說明也非常詳細你可以得到任何需要了解的東西
  
  在最近我也看到了一篇關於PHP輸出緩沖的文章它說的是PHP推出了一種新的輸出緩沖的處理手段ob_gzhandler它的作用和上面介紹的類相同但區別是你只要在你的phpini中使用以下的句法就行了
  
  output_handler = ob_gzhandler ;
  
  這樣將激活PHP的輸出緩沖功能並且壓縮所有它發送的東西出於某些特別的原因如果你不想在這裡設置的話只在需要的地方才改變這個默認設置的話(不壓縮)只要在需要壓縮的PHP源碼目錄中修改一下htaccess文件就行了使用的句法如下
  
  php_value output_handler ob_gzhandler
  
  或者直接在你的PHP代碼中調用它以下面的方式
  
  ob_start(ob_gzhandler);
  
  這個輸出緩沖處理的方法很好並且不會為服務器帶來額外的系統開銷我十分建議你使用這種方法它的改變可以用以下的例子說明如果客戶使用的是K的modem的話經過這個處理他將會認為突然間換成了一個ISDN接入一樣要注意的一點是Netscape Communicator並不支持圖象的壓縮所以將顯示不出來因此除非你的客戶全部使用Internet Explorer否則你必須禁止壓縮jpeg和gif圖象其它文件的壓縮應該沒有問題但是我建議你最好測試一下特別是浏覽器使用了不常見的插件或者是少人用的浏覽器
  
  Zend Technologies的在線商店在今年開通了並且售賣一些與PHP相關的有趣產品包括前面提到的Zend CacheZend Encoder(簡單說來是PHP代碼的編譯器可以產生編譯的類這樣你就可以售賣給顧客而不用擔心洩露源代碼在需要運行這些類的web服務器上將要使用Zend Encoder Runtime來解碼)Zend Ide(一個為PHP而設的集成化開發環境帶有很多強大的性能)還有為PHP開發者提供的支持服務
  
  結論
  
  使用這篇文章提到的技術你將可以極大地提高站點的性能不過請注意以下幾點
  
  瓶頸或許不在PHP你需要考察應用中的每個對象(例如數據庫)
  
  一個web服務器的性能都是有限制的因此不要認為性能不好就是PHP的原因也可能是訪問量很大你的服務器需要升級了或者考慮使用負載均衡的系統(將會花很多錢)
  
  不要認為內容壓縮不重要Mb/s的局域網中你的PHP應用或許性能很好但要考慮到使用慢速modem的用戶
From:http://tw.wingwit.com/Article/program/PHP/201311/20803.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.