淘先锋技术网

首页 1 2 3 4 5 6 7

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