2014-03-26 88 views
0

我正在嘗試減少我網站上的請求數(以提高頁面速度)。在一個文件中,我有10個獨立的php require語句調用10個不同的php文件。每個php是否需要單獨的請求?

我的問題是,這10個要求陳述被視爲10個單獨的請求?通過用被調用的php文件中的實際內容替換require語句,我可以減少請求的數量嗎?

如果有人能澄清此表格,我將不勝感激。請注意,我不是一位體驗程序員或網頁設計師。謝謝!

+1

Web瀏覽器觸發的每個URL都會引發HTTP請求。每個加載的腳本都意味着在一個正在運行的PHP實例中訪問文件。 – mario

+0

不完全正確。這取決於PHP的安裝方式。 –

回答

0

像我的評論,這取決於如何安裝PHP。

如果您使用PHP作爲Mod(mod_php),您的Web服務器只創建一個PHP進程。所有請求將在這裏處理。

但是,如果您將PHP作爲CGI包裝器實現,則每個請求都會啓動一個PHP實例。

要執行加載時間,請使用類似eAcceleratorAPC或其他腳本的Opcode-Caches。另一個解決辦法是處理與正確的方式請求:如樣式表,javascripts和圖片,緩存靜文件..

編輯

另一個解決方法是:優化你的PHP腳本。一個好的檢查員是New Relic,在這裏你可以看到,哪些腳本有非常大的執行時間。我創建了一個博客文章New Relic及其功能,但僅限於德語版:http://hovida-design.de/php-die-macht-der-performance/

+0

PHP默認包含一個操作碼緩存。 http://stackoverflow.com/questions/17224798/how-to-use-php-opcache – PeeHaa

3

正如第一條評論所述; 請求僅適用於客戶端;沒有一個PHP的語言結構應該被描述爲請求。

這麼簡單,我可以把它...

執行是一個三個階段的過程:從磁盤

  • 加載文件
  • 編譯爲Zend的中間形式
  • 執行中間形式

緩存通過篡改Zend的那些部分來提高性能通常情況下響應sible從磁盤加載文件並將其編譯爲Zend的中間表示;這樣,如果可能的話,可以繞過執行的加載和編譯階段,從而提高性能。

如果沒有一個操作碼緩存

當做出請求時,如

GET /index.php HTTP/1.1 

Web服務器服務所述請求以正常的方式,這繼而調用PHP解釋被調用。解釋器然後從磁盤加載index.php,將其編譯到Zend的中間表示中,並開始執行代碼。

當腳本包含的

include "my_awesome_code.php"; 

的(下同)解釋負荷my_awesome_code.php從磁盤這樣一個說法,其編譯爲Zend的中間表示並執行它。

隨着操作碼緩存

當做出請求時,如

GET /index.php HTTP/1.1 

Web服務器服務所述請求以正常的方式,這繼而調用PHP解釋被調用。緩存從磁盤中加載index.php,而不是從存儲器中檢索代碼,它存儲在非常接近Zend中間表示形式的東西中。準備執行的高速緩存代碼(意味着從共享內存複製並最終確定其形式)比從磁盤加載並首先編譯爲該代表快得多。

當腳本包含的語句,如

include "my_awesome_code.php"; 

的代碼再次從緩存中檢索,繞過編譯一次。

如果緩存無法在共享內存中找到index.phpmy_awesome_code.php,它會調用它被篡改的Zend部分;導致磁盤正常加載並將這些代碼編譯到Zend的中間表示中。緩存攔截生成的中間代碼並將其存儲在共享內存中,然後才允許它第一次執行。

相關問題