2011-05-05 58 views
10

我的一位朋友最近告訴我「要優化您的網站,您可能需要編譯您的php文件」 ,我就像是「什麼?」爲什麼編譯一個PHP文件?

說實話,我從來沒有聽說過,我是一個「先進幼稚」的程序員,這意味着我自學的,我建複雜的網站,但我仍然失去了一些東西......

底線:

這是什麼意思編譯php?將它們轉換爲exe文件?爲什麼?是比較快的?

+0

我喜歡用戶名!只是想拋出那裏 - 只要你的問題,下面的傢伙幾乎釘住了普遍的共識 – 2011-05-05 15:12:45

+4

除非你在Facebook類型的規模經營,沒有意義編譯你的PHP。績效增長將是微不足道的。 – 2011-05-05 15:13:37

+0

但我確實有一個問題。如果你編譯PHP是可以分解的?如果不是,那麼將編譯的PHP腳本出售給公司似乎是一件好事,因爲它們不能再複製它。 :D – 2014-02-26 05:22:02

回答

10

雖然PHP代碼需要在每次調用時解釋,但字節碼是幾乎立即運行的預編譯代碼。 如果你正在運行一個更大的網站,你大多隻會真的需要它。

以下工具可用於腳本編譯或運行編譯腳本:

5

除非你經過認真的表現,否則使用類似Facebook的HipHop編譯PHP可能有點過分。

我只是在你的機器上安裝/配置替代PHP緩存(APC),它會緩存編譯的字節碼,並且應該給你一個即時的性能提升。

2

Facebook使用這樣的事情。他們的產品是hiphop,它是免費的。

+2

Facebook每天還有數百萬用戶訪問。 – James 2011-05-05 15:12:57

2

編譯器的思想是將人類可讀代碼(C,PHP,Java等)轉換爲機器可讀代碼。當你執行你的PHP腳本時,它們被解釋(幾乎內聯編譯),這意味着它們被逐行讀取,並且相應地執行代碼。編譯代碼意味着它是在源代碼編譯的,因此已經是機器語言(或者像Java這樣的VM語言的字節碼),因此服務器不必每次都解釋代碼。這使得它更快。

Facebook創建了一個PHP編譯器來加速他們的網站。編譯代碼的思想是,通常在編寫代碼時,它一段時間不會改變,所以每次代碼執行時都必須將其解釋爲機器語言。這就是爲什麼你的朋友意味着通過優化。因此它將被轉換爲機器語言或字節碼(不是exe,但有效的是相同的概念)。

+1

這很容易讓人誤解 - PHP代碼是字節碼編譯,然後由Zend引擎執行。它不是逐行執行的。 – Ryan 2011-05-05 15:29:10

1

越大的應用程序越有意義。 PHP將你的整個程序加載到內存中,然後即時編譯它:這意味着它需要被使用。所以如果你預編譯它應該跳過這一步。 Facebook做了這樣的事情。通過稱爲Hip Hop的東西將它們的php翻譯成C++。不完全一樣的東西,但你明白了。

我懷疑這會顯示你在較小的應用程序上的很多不同。

+0

我不確定這是正確的。 PHP在文件發生變化時創建一個字節碼中介。代碼保持「預編譯」狀態,並且只在php腳本發生變化時纔會再次編譯,並且在預編譯之前它是第一次被要求。因此,它不會一次編譯整個代碼。這會非常荒謬,而且會浪費大量資源。 – 2014-03-04 15:38:21