PHP:多个Concat还是一个内爆?
在我当前的项目中,我将一个字符串组装成许多小字符串(直接输出不是一个选项)。进行多个字符串连接是否更有效?或者我应该将这些部分添加到数组中并使其内爆 与网络流量、数据库、文件、图形等相比,优化很少。不过,这里是sitepoint关于该主题的参考资料 哪个最快 好消息是PHP5速度很快。我 测试了5.3版,您的表现更出色 可能比内存不足 体验性能问题。 然而,数组内爆方法 通常需要两倍于 标准连接运算符。A. 需要相当的时间 连接字符串或生成 数组,但是内爆函数 加倍努力 毫不奇怪,PHP是针对 字符串处理和点运算符 将是最快的连接 方法在大多数情况下PHP:多个Concat还是一个内爆?,php,arrays,performance,string,Php,Arrays,Performance,String,在我当前的项目中,我将一个字符串组装成许多小字符串(直接输出不是一个选项)。进行多个字符串连接是否更有效?或者我应该将这些部分添加到数组中并使其内爆 与网络流量、数据库、文件、图形等相比,优化很少。不过,这里是sitepoint关于该主题的参考资料 哪个最快 好消息是PHP5速度很快。我 测试了5.3版,您的表现更出色 可能比内存不足 体验性能问题。 然而,数组内爆方法 通常需要两倍于 标准连接运算符。A. 需要相当的时间 连接字符串或生成 数组,但是内爆函数 加倍努力 毫不奇怪,PHP是针对
首先是一个旁注——在实际的生产应用程序中,这一切都无关紧要,因为时间差是肤浅的,应用程序的优化应该在其他地方进行(处理网络、数据库、文件系统等)。尽管如此,出于好奇:
内爆
可能是更有效的串联,但前提是您已经拥有阵列。如果不这样做,它可能会慢一些,因为所有的增益都会被创建数组和分配其元素所需的时间所抵消。因此,请保持简单:)如果有一个通用的粘接剂(即空格、回车),我通常会内爆。那么为什么用户的粘接剂提供了创建大字符串的工具呢?为什么C#中有StringBuilder?因为如果您处理的是大字符串,那么构建它们的方式就是一个问题。PHP不仅可以用来生成网页!请停止燃烧。优化大字符串的最佳方法是避免使用大字符串。对于通过网络发送并由单个用户查看的网页,所有字符串都应该短。即使它对代码的影响很小,我也知道这一点。没有无用的知识,因为任何能提高你对所用语言理解的东西都对你有好处。请停止燃烧,谢谢。我知道还有其他更重要的问题,但我必须在我的项目中使用这种方法,所以我想我应该询问并找到最有效的方法:)超过200万次迭代:(内爆…1.913秒)(串联…1.130秒)我想如果你做$list[$\uz]=“a”,看看会发生什么会很有趣;这是更快还是更慢,因为如果您使用$list[]php,则必须找出将“a”字符串放在何处。。。糟糕的是,我这里没有一台运行php的计算机。。。
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
define('ITERATIONS', 10000);
header('Content-Type: text/plain');
printf("Starting benchmark, over %d iterations:\r\n\r\n", ITERATIONS);
print("Imploding...");
$start = microtime_float();
$list = Array();
for ($_ = 0; $_ < ITERATIONS; $_++)
$list[] = 'a';
$result = implode('',$list);
$end = microtime_float() - $start;
printf("%0.3f seconds\r\n", $end);
unset($list,$result);
print("Concatenating...");
$start = microtime_float();
$result = '';
for ($_ = 0; $_ < ITERATIONS; $_++)
$result .= 'a';
$end = microtime_float() - $start;
printf("%0.3f seconds\r\n", $end);
?>
Starting benchmark, over 10000 iterations:
Imploding...0.007 seconds
Concatenating...0.003 seconds