非死book已將HHVM/JIT用于其開發和產品中

jopen 12年前發布 | 7K 次閱讀 Facebook

  非死book 宣布,他們已經在產品中使用了 HHVM 這款支持 JIT 編譯的 HipHop 虛擬機,這種方案統一了開發和部署兩種環境,同時為開發者帶來了顯著的性能收益。

  因為頁面加載的性能問題,非死book 決定實現一套從 PHP 向 C++ 轉換的工具鏈, 該工具鏈即 HipHop PHP,已于 2010 年開源,其中的編譯器稱為 HPHPc。該工具將 PHP 轉化為一種抽象語法樹(Abstract Syntax Tree,AST),之后 AST 被轉化為 C++ 代碼,最后靜態編譯為 x64 二進制代碼。雖然這種方案能夠加速 Web 頁面,但是也給開發帶來了一個問題,由于 非死book 的所有開發者都有網站代碼的一份完整拷貝,在開發時他們必須等待整個代碼庫編譯完成。非死book 的工程總監 David Mortensen 在 QCon SF 2012 上討論 HPHPc 時提到,因為網站以很高的速率持續增長,編譯階段延長到了十分鐘左右,大量開發人員都要等待。

  為了解決該問題,非死book 做出以下決定:在產品代碼中仍然使用編譯器,同時為開發代碼創建一個解釋器(HPHPi),希望此舉能消除編譯停滯時間。這又使產品環境與開發環境出現了差異,其中存在一個問題,出于性能考慮兩種環境使用了不同的 AST,而且據 非死book 的工程師 Drew Paroski 介紹,HPHPi 甚至比引入 HipHop 之前的原始 Zend 引擎還要慢

  面對這個新問題,非死book 的一個工程師小團隊設計了一款名為 HHVM(HipHop VM)的虛擬機,而且自 2011 年起就將其應用于開發中了。在對 JIT 進行了幾個月的調校之后,HHVM 被引入了產品中,用于執行已部署的代碼。Paroski 宣布,HHVM 的性能已經趕上了 HPHPc,甚至在頁面加載時間上的表現還要好一點。這意味著,在 非死book 開發和部署可以使用統一的環境了;而且隨著 JIT 引擎的進一步調校,性能還有改進空間。Paroski 指出:

利用 HHVM,從運行時和基本庫,到生成的裸機機器代碼,我們能夠為 PHP 開發棧選擇范圍更廣的優化策略了。在未來幾年,我們計劃利用這種靈活性讓 非死book 的 Web 層更為高效。

能夠持續改進 HipHop 的開發體驗,我們也非常興奮。改進主要體現在兩個方面,一個是安裝和開發流程更容易且更靈活了,另一個是支持的流行 PHP 應用和框架越來越多了。

</blockquote>

  目前 HipHop 是一種混合環境,其中部分代碼解釋執行,但大部分代碼以 JIT 方式編譯執行。據 Paroski 介紹:

HHVM 這樣運行 PHP 程序,先將 PHP 源代碼轉換為 HipHop 字節碼(HHBC),然后使用字節碼解釋器和 x64 JIT 編譯器來執行字節碼。這里的解釋器和編譯器可以無縫地進行互操作。HHVM 會盡可能使用 JIT,萬不得已時才將解釋器作為執行引擎。

</blockquote>

  非死book 現在已將 HHVM 開源,同時棄用了 HPHPi 并移除了對它的構建支持。到 2013 年中期,他們將不再支持 HPHPc。HHVM 提供了支持 Ubuntu 12.04 的預構建包以及支持 CentOS 6.3 的構建說明,而對 FreeBSD 9 和 Mac OS 的支持將于明年 HPHPc 退役之后再提供。

  英文原文非死book Now Uses HHVM/JIT both in Development and Production

來自: InfoQ
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!