2012-05-02 106 views
9

PHP是一種通用的服務器端腳本語言。衆所周知,當頁面加載並顯示網頁時,php代碼會被解釋。最近我聽說過PHP的即時編譯器(HipHop虛擬機)。想知道它在執行過程中會產生什麼樣的差異,並且更好地使用jit而不是解釋器?是任何PHP引擎有jit?PHP - 即時編譯器Vs解釋器

編輯: 是這樣的PHP執行流程:PHP代碼 - >分析 - >標記 - >字節碼/操作碼 - > PHP引擎解釋 - >機器代碼 - >執行

Corect我,如果我我錯了。字節碼通常在虛擬機中執行。操作碼(接近機器語言)可以直接由機器執行。這是否意味着PHP引擎是虛擬機還是僅僅是虛擬機的一些實現?

在此先感謝。

+1

什麼是良好的Facebook的不好肯定對其他一些項目。高可擴展性通常沒有銀彈般的解決方案(假設你有高負載應用,否則不要浪費你的時間 - 你仍然有很多地方需要優化,直到使用嘻哈將是值得的) – zerkms

+2

你應該從啓用[APC](http://php.net/manual/book.apc.php)。它將保存PHP在每次請求時運行解釋步驟。 – adrien

+0

字節碼緩存可以節省您編譯爲字節碼的時間,而不是解釋字節碼(發生在有或沒有APC的情況下)。 – delnan

回答

6

HipHop不是JIT編譯器 - 它是一個將PHP更改爲C++的代碼轉換器,然後可以使用傳統的離線編譯器對其進行編譯。

因此,eval和create_function將不起作用,也不會使用標記器功能。我沒有深入研究過這個問題,但我期望條件/運行時評估的包含操作也可能會導致問題。

除非使代碼更快,否則不會有太大的意義。

使用PHP操作碼緩存的OTOH在不影響功能的情況下提供了巨大的性能提升(與原生代碼不盡相同)。

(給出的架構關閉PHP JIT編譯器並沒有真正做了很大的意義)

+0

感謝您的信息。我理解使用APC擴展,zend優化器[PHP加速器](http://en.wikipedia.org/wiki/List_of_PHP_accelerators)等。給我們提升性能。你能解釋一下爲什麼JIT編譯器對PHP的體系結構沒有意義,或者JIT會在什麼樣的體系結構中有用? –

+5

Facebook Hip Hop虛擬機是一個JIT編譯器。 Facebook Hiphop – Tosh

+0

[「HHVM使用即時(JIT)編譯方法來實現卓越的性能,同時保持PHP開發人員習以爲常的靈活性。」](https://github.com/facebook/ HHVM) – msanford