在過去的幾年中,Facebook一直是PHP的最大推動者之一。然而,近期他們卻決定完全拋棄PHP,轉而使用HHVM和Hack語言。這個決定不僅僅是因為應對PHP的性能問題,而且還有其他更多方面的考量。
首先,PHP的代碼是解釋執行的,這導致了一些性能上的問題。HHVM則提供了即時編譯的能力,將PHP代碼轉化為字節碼,同時提供更多的優化選項,這使得HHVM的性能要比PHP高很多。
PHP 5.5 - 單個請求: 3.8 req/sec, 多負載: 21.8 req/sec HHVM - 單個請求: 12.8 req/sec, 多負載: 151.8 req/sec
其次,由于PHP的語法不夠嚴謹,代碼很容易出現一些難以發現的問題。Hack語言是對PHP的擴展,提供了類型約束等特性,使得代碼的可靠性和可維護性都有很大提升。
function getAddress($id) { $query = 'SELECT * FROM addresses WHERE id=' . $id; $result = mysql_query($query); if (!$result) { return null; } return mysql_fetch_assoc($result); } // ... $address = getAddress(123); $street = $address['street']; $zip = $address['zip'];
這個例子中的代碼看起來沒有什么問題,但實際上卻有一個隱含的漏洞。如果傳入的$id是字符串而不是整數,SQL語句就會失敗,導致整個應用崩潰。Hack語言的類型約束則可以讓我們在編寫代碼時就能捕獲此類問題。
function getAddress(int $id): ?array { $query = 'SELECT * FROM addresses WHERE id=' . $id; $result = mysql_query($query); if (!$result) { return null; } return mysql_fetch_assoc($result); } // ... $address = getAddress('123'); // 錯誤:無法轉換為int類型 $street = $address['street']; $zip = $address['zip'];
最后,Facebook還開發了一整套與HHVM和Hack語言兼容的工具和框架,如HipHop Virtual Machine、Hack Router和Hack Codegen等。這些工具大大提高了開發者的生產力和應用的可擴展性。
綜上所述,Facebook從PHP轉向HHVM和Hack語言,不僅僅是為了解決PHP性能上的問題,更是出于對代碼可靠性和可維護性的考慮。這次變革對Facebook帶來非常多的好處,同時也對整個Web開發社區都產生了積極的影響。