[英]Simple Facebook HipHop Performance Question
如果我使用PHP Web框架(如CodeIgniter)編寫一個hello world應用程序,然后我編譯它並使用HipHop運行它。 它會比我在django或rails中編寫相同的hello world應用程序運行得更快嗎?
HIPHOP將PHP代碼轉換為C ++代碼,需要編譯才能運行。 由於預編譯的代碼運行速度更快,使用的內存更少,因此像python / php這樣的腳本語言可能會在您給出的示例中運行得更快。
但是,HIPHOP不會轉換所有代碼。 php中的很多代碼都是動態的,無法更改為c ++,這意味着您必須記住這些代碼。 如果codeigniter甚至可以使用HIPHOP編譯是另一個問題。
Terry Chay撰寫了一篇關於HIPHOP的大文章,介紹何時使用它,它的局限性和未來。 我會建議閱讀這個,因為它很可能會回答你的大部分問題,並讓你深入了解它是如何工作的:)
在那時,運行時間是無關緊要的。 HipHop專為擴展而設計......意味着數十億的請求。 即使是中等規模的網站,也絕對不需要使用像HipHop這樣的東西。
但更多的問題是......我不認為我們可以看到比較圖表,但我懷疑在這個級別上運行時間會更快。
我不知道django或rails,所以這有點偏離主題。
用普通的php,請求轉到apache,然后轉到mod_php。 mod_php從磁盤加載helloworld.php腳本,解析並標記它,將其編譯為字節碼,然后解釋字節碼,將輸出傳遞回apache,apache將其提供給用戶。
使用php和優化器,第一次運行與普通php大致相同,但編譯后的源代碼存儲在ram中。 然后,對於第二個請求:轉到apache,apache轉到mod_php,apc從ram加載字節碼,解釋它,將其傳遞回apache,返回給用戶。
與hiphop沒有apache,但hiphop本身並沒有解釋器,因此請求直接轉到hiphop並返回給用戶。 所以是的,它更快,因為有幾個原因:
與node.js一樣,也沒有apache。 腳本啟動並直接編譯為機器代碼(因為V8編譯器會這樣做),所以它是AOT(提前)編譯(或者它仍稱為JIT?我真的不知道)。 然后,每個請求都由已編譯的機器代碼直接處理; 所以node.js實際上與hiphop非常相似。 我假設hiphop是多線程的或類似的東西,而節點確實使用IO。
facebook聲稱速度提升了50%,實際上並沒有那么多; 如果你比較語言槍戰的結果,你會看到各種算法的執行速度, php慢5到250倍 。
那么為什么只有50%呢? 因為......
我不確定hello world是否有巨大的性能提升,因為即使有一個好的框架,hello world仍然是如此之小,與所有其他開銷(網絡延遲和內容)相比,執行速度可以忽略不計。
imo:如果你想要速度和易用性,請轉到node.js :)
在任何語言中運行簡單的應用程序總是更快。 當它變得像facebook一樣復雜時,你將面臨許多問題。 PHP緩慢將顯示它的面貌。 同時,將現有代碼轉換為另一種語言不是一種選擇,因為所有邏輯和代碼都不容易轉換為其他語言的語法。 這就是為什么facebook開發人員決定保留舊代碼,並使PHP更快。 這就是他們創建自己的PHP編譯器的原因,稱為HipHop。
從Facebook開發人員的角度閱讀這個故事 ,讓您了解HipHop的歷史。
這不是蘋果與蘋果的比較。 在最公平的比賽場地中,您可能會遇到以下情況:
和
沒有數據庫,幾乎沒有文件I / O,也沒有緩存。 如果你使用不同並發級別的負載生成器點擊頁面10,000次,你可能會發現HPHP將勝過Django或rails - 也就是說它可以每秒渲染更多頁面並且更好地跟上你的流量。
問題是,你會有這么多並發用戶嗎? 如果你願意,他們可能會點擊數據庫或緩存頁面嗎?
HPHP聽起來很酷,但恕我直言,沒有理由再跳船(除非你獲得了大量的流量,在這種情況下檢查它可能是有意義的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.