Facebook 對 PHP 的改進


PHP 是傳統意義上的解釋型語言,而不是編譯型語言。

因此,在命令行或 Web 服務器調用解釋器解釋 PHP 代碼之前,PHP 代碼就是 PHP 代碼。PHP 解釋器會解釋 PHP 腳本,把代碼轉換為一系列 Zend 操作碼(機器碼指令,http://php.net/manual/internals2.opcodes.php),再把這些操作碼交給 Zend Engine 執行。不過,解釋型語言執行的速度比編譯型語言慢很多,因為每次執行解釋型語言編寫的代碼時都需要將其轉換為機器碼,消耗額外的系統資源。Facebook 意識到了這個性能瓶頸,與 2010 年開始開發一個叫 HPHPc 的編譯器,把 PHP 代碼編譯成 C++ 代碼。

HPHPc 編譯器先把 PHP 代碼編譯成 C++ 代碼,再把 C++ 代碼編譯成可執行文件,最后把這個可執行文件部署到生產服務器HPHPc 基本上是成功的,它提升了 Facebook 的性能,降低了 Facebook 服務器 的負擔。可是,HPHPc 對性能的提升已經到極限了,而且不能完全兼容 PHP 語言,還需要額外話時間編譯,因此對開發者來說,反饋回路太長。Facebook 需要一種混合解決方案,既要進一步提升性能,又要讓開發速度更快,省去編譯代碼的時間。

於是,Facebook 開始開發下一步 HPhpc,即 HHVMHHVM 先把 PHP 代碼轉換成一種字節碼中間格式,而且會緩存轉換得到字節碼,然后使用 JIT 編譯器轉換並優化緩存的字節碼,將其變成 x86_64 機器碼。HHVM 的 JIT 編譯器提供了很多底層性能優化措施,這些優化措施是把 PHP 代碼直接編譯成 C++ 代碼的 HPHPc 所不具備的。HHVM 才會及時把字節碼編譯成機器碼,這一點和傳統的解釋型語言很像。2012年10約,HHVM 的性能超過了 HPHPc,而且仍在不斷提升。

HHVM 的性能超越 HPHPc 之后不久,HPHPc 就被廢棄了。現在,Facebook 的首選 PHP 解釋器是 HHVM。

注意:

  • HHVM 的實現可能很負責,可是說到底,HHVM 只不過是我們屬性的 PHP 和 PHP-FPM 二進制文件的替代品:
  • 我們在命令行使用 HHVM 二進制文件執行 PHP 腳本,就像 PHP 二進制文件一樣。
  • 我們使用 HHVM 二進制文件創建 FastCGI 服務器,就像 PHP-FPM 二進制文件一樣。
  • HHVM 原生執行很多常用的 PHP 擴展。

HVVM 適合我使用嗎?

HVVM 並不是適合所有人使用。提升性能有更容易的方式,例如,減少 HTTP 請求數和優化數據庫查詢都是易於實現的方式,能顯著提升應用的性能,減少響應時間。如果你還沒使用這些優化措施,考慮使用 HHVM 之前先做這些優化吧。Facebook 的 HHVM 是為已經做了這些優化措施之后仍想進一步加速應用的開發者准備的。如果你覺得自己需要 HHVM,可以參考以下資源:

查看 HHVM 兼容的 PHP 擴展


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM