当我运行这样的代码时
$before = microtime(true);
$amount = 90000000;
$sum = 0;
for ($i = 0; $i < $amount; $i++) {
$sum += $i;
}
echo $sum;
$after = microtime(true);
echo '<br>'.($after-$before);
它比我将整个事物包装在一个函数中要慢得多,因为HHVM不会为全局范围内的循环编译。
echo "loop in function <br /><br />";
function run_loop ($amount, $sum) {
for ($i = 0; $i < $amount; $i++) {
$sum += $i;
}
return $sum;
}
echo run_loop($amount, $sum);
最后一个比第一个运行速度快10倍,即使第一个运行速度仍然比PHP 5.6运行速度快。
但是当我尝试使用firebase的JWT库
做这样的事情时https://github.com/firebase/php-jwt
然后像这样测试
require_once("JWT.php");
$before = microtime(true);
$amount = 100000;
for ($i = 0; $i < $amount; $i++) {
$jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ';
$decoded = JWT::decode($jwt, 'secret', array('HS256'));
}
echo $decoded->name;
然后这就像我将其包装在一个函数
中一样echo "loop in function <br /><br />";
function run_loop ($amount) {
$jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ';
for ($i = 0; $i < $amount; $i++) {
$decoded = JWT::decode($jwt, 'secret', array('HS256'));
}
return $decoded->sub;
}
echo run_loop($amount);
这让我相信HHVM不会编译JWT库,因为它们运行速度同样快,即使它是全局范围内的循环或包含在函数中。所以我的问题是。如何检查JWT库中HHVM不支持哪个功能或方法?有没有办法让我找到HHVM支持的所有功能?你认为这是因为JWT库吗?