在过去的几年中,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开发社区都产生了积极的影响。