2015-02-09 67 views
-6

生成字符串时使用哪个更快? implode(),sprintf()或变量的规则串联?PHP implode()vs sprintf()vs concat

为什么,你问?它可能不会吸引你测试这样一个关于生成字符串的细节,因为谁在乎它全部在ms对不对?不是真的!不是当你必须从给定的变量中产生大量的字符串时,这就是当小写字母变小时。在我的情况下,它从给定的前缀,内容类型和标识符中生成缓存键

+1

答案几乎肯定是简单的级联;但为什么你不能亲自测试它呢? – 2015-02-09 11:42:20

+0

@MarkBaker我自己在发布结果时自己回答。 – Mulkave 2015-02-10 08:39:28

+0

当然,还有'echo'{$ id}:{$ type}:{$ prefix}“;'这可能比其他选项快得多 ' – 2015-02-10 09:05:00

回答

-8

所以我在一个非常简单的简约数据集上做了这个。

下面是结果,代码如下:

结果

  • 评论:文章: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!"; 
} 

请大家分享您的想法!

+1

添加这个问题。不要将额外的细节作为答案。编辑你的问题 – Gunaseelan 2015-02-09 11:40:17

+2

如果我是诚实的,我认为这是一个相当便宜的业力抢,但无论如何,你至少应该跑每次测试多次,每次测试1000次。只有一次毫无意义,并且什么都不告诉你。 – 2015-02-09 11:40:42

+0

@Bulk听起来不错。将这样做并更新。 – Mulkave 2015-02-10 08:40:51