PHP内爆()与sprintf()与concat


PHP implode() vs sprintf() vs concat

生成字符串时使用哪个更快?implode()sprintf()还是变量的规则串联?

你问为什么?测试这样一个关于生成字符串的小细节可能不会引起你的兴趣,因为谁在乎这一切都在ms中,对吧?不是真的!当您必须从给定的变量中生成大量字符串时,情况就不一样了,因为smalles0.00xms会产生影响。在我的案例中,它从给定的前缀、内容类型和标识符中生成缓存键

所以我在一个非常简单的极简主义数据集上完成了这项工作。

以下是结果和代码:

结果

  • 评论:文章:123456内爆次数:0.00011706352233887
  • 评论:文章:123456 sprintf拍摄:2.4080276489258E-5
  • 评论:文章:123456 concat拍摄:6.9141387939453E-6
  • concat是最快的

代码

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

// vars
$id = 123456;
$type = 'article';
$prefix = 'comments';

$implode_time_start = microtime_float();
echo implode(':', array($prefix, $type, $id));
echo "'n";
$implode_time_end = microtime_float();
$implode_time = $implode_time_end - $implode_time_start;
echo "implode took: $implode_time";
echo "-----'n'n'n";

$sprintf_time_start = microtime_float();
echo sprintf('%s:%s:%s', $prefix, $type, $id);
echo "'n";
$sprintf_time_end = microtime_float();
$sprintf_time = $sprintf_time_end - $sprintf_time_start;
echo "sprintf took: $sprintf_time";
echo "-----'n'n'n";

$concat_time_start = microtime_float();
echo $prefix.':'.$type.':'.$id;
echo "'n";
$concat_time_end = microtime_float();
$concat_time = $concat_time_end - $concat_time_start;
echo "concat took: $concat_time";
echo "------'n'n'n";

if ($implode_time < $sprintf_time || $implode_time < $concat_time) {
    echo "implode is fastest!";
} elseif ($concat_time < $sprintf_time) {
    echo "concat is fastest!";
} else {
    echo "sprintf is fastest!";
}

请分享你的想法!