解決php載入慢的一個辦法_PHP教程

來源:互聯網
上載者:User
這幾天在測試我們目前的php架構時發現,架構層載入php檔案的時間很長,最終發現是因為各種require_once導致整個載入時間變長,如果不使用eaccelerator的情況下,在虛擬機器上測試可能會到50-60ms,使用了ea之後,可以降到10-20ms,但是這個消耗還是比較大的,有什麼辦法可以解決嗎?

正好這兩天看到hiphop的文章,所以決定使用它來試一下,最終發現代價太大了,修改一個檔案要把整個工程全部編譯一次,並且它產生的程式是http協議的,我們現在只是需要一個fastcgi伺服器就行了,而且自己寫的各種擴充完全無法使用了,所以這條路基本上否定了。

雖然hiphop這條路走不通,但是卻給我一個啟示,既然造成載入慢的原因是require_once導致的,那乾脆寫個指令碼,把目前的所有代碼都merge成一個大的檔案不就行了(因為我們的架構是rpc的,因此只有一個入口,index.php,其他的代碼裡全是class和function,不存在直接的調用邏輯,因此merge以後不會有任何影響)。具體的操作如下:

1、將所有的require_once行刪除,換成|空行

2、將檔案開頭的

3、記錄每個檔案在merge後的檔案裡的offset,將這個資訊輸出在merge後的檔案尾,這個是用於修正日誌的,因為merge完了之後,日誌列印出來的資訊都是那個merge完的檔案以及行數,這對於線下查日誌沒有任何協助,因此需要修改日誌輸出類,根據merge後的行數對日誌進行修正。

做完之後,實際測了一下,發現如果不使用ea的話,架構的消耗基本在3-5ms,如果使用了ea,反而在5-6ms,去看了一下ea的代碼,發現原來它是將解析出來的op_array經過分類儲存,然後每次調用zend_compile時,再把這些東西重新拷貝再返回,這個過程並不比zend_compile實際去編譯快,而且還有許多額外的檢查,因此反而不如直接使用php-cgi。

另外在測試時發現php一個很奇怪的現象

class A extends B

{

}

class B{}

這段代碼是可以的,

但是

class A extend B{}

class B extend C{}

class C{}

這樣的代碼就會出錯了www.2cto.com

註:後來又測了一下autoload方式,發現比打成一個檔案慢很多,在只自動載入一兩個類的情況下,某個特定請求需要執行20ms左右,而打成一個只需要5ms左右

摘自 無心雲

http://www.bkjia.com/PHPjc/478485.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478485.htmlTechArticle這幾天在測試我們目前的php架構時發現,架構層載入php檔案的時間很長,最終發現是因為各種require_once導致整個載入時間變長,如果不使用...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.