HHVM未按预期编译JWT库

时间:2015-04-30 04:10:31

标签: hhvm

当我运行这样的代码时

$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库吗?

0 个答案:

没有答案