簡體   English   中英

用HHVM編寫的代碼比使用PHP編寫的代碼快嗎?

[英]Is code written in Hack faster than code written in PHP on HHVM?

我們可以期望通過從HHVM上的PHP過渡到Hack來獲得速度提升嗎?

我正在考慮強類型參數/返回類型,特別是標量,它允許HHVM在將代碼編譯為本機代碼方面做得更好,或者與使用經典PHP及其混合類型相比,速度增益無關緊要?

幾個月前我在Reddit上回答了這個問題 我在下面復制了我的答案,因為從那以后世界狀況沒有太大變化。 但請記住,HHVM仍在不斷發展,實際上非常快,所以這可能會在一兩個月內輕易過時。

我在Facebook的Hack團隊工作。 這個問題的答案有點微妙。

正如其他人所說的那樣,將PHP代碼從PHP5遷移到HHVM可能會帶來顯着的加速。 重要程度取決於很多因素。 如果你已經被IO限制,你可能根本看不到多少; 如果你更接近CPU限制,已經報告了高達5x之類的速度,盡管你可能會在中間某處獲得某些東西。 您應該在自己的代碼上嘗試使用真正的工作負載--HHVM有很多因素,特別是更大的啟動時間,這使得它在微基准測試中表現不佳,但在實際工作負載上它應該優於PHP5。 為了獲得最大的好處,重構代碼以使事物脫離頂層並進入函數/類將有助於實現(我們不能在頂層編寫JIT代碼),以及設置repo權威模式

但這只是HHVM上的普通PHP,而不是HHVM上的Hack。 從將代碼轉換為Hack后,您獲得了多少加速? 這取決於你如何進行轉換,但答案是,至少現在,“不是很多”。 如果您只是將<?hh放在每個文件的頂部,而不是<?php ,並修復運行類型檢查程序時出現的任何不兼容性,那么您的代碼很可能會像以前一樣執行。 Hack和PHP代碼具有相同的運行時表示,因此您沒有真正改變太多。

但是,如果你這樣做,那么你就沒有充分利用Hack! 如果您進入並開始添加類型注釋,則可以為HHVM構建越來越多的信息,以便在運行時使用。 這個過程可以加速你的代碼--HHVM可以在很多情況下生成類型專用(即更快)的代碼,在此之前它可能無法推斷出類型。 不要指望這里有一個巨大的加速 - 這在很大程度上是理論上的,並且有很多地方我們可以更好地利用類型信息來生成更快的代碼。 (例如,我們現在對運行時的返回類型沒有太多幫助。)但這是可能有用的部分,並且隨着HHVM變得更聰明可能會有所幫助。

但當然,請記住,執行速度不是Hack的關鍵 - 它是關於開發人員的效率。 任何性能提升都可能不值得從HHVM上的PHP到HHVM上的Hack。 但是,開發人員生產力的提高可能是。

那么從PHP5遷移到HHVM會加速你的代碼嗎? 很有可能。 快速轉換為Hack會加快速度嗎? 不是。添加更多類型注釋會加快速度嗎? 也許一點點,將來可能更多,但這不是重點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM