【问题标题】:Concatenation, multiple parameters or sprintf?串联、多个参数还是 sprintf?
【发布时间】:2013-06-10 01:50:57
【问题描述】:

我正在优化我的 PHP 代码,发现您可以通过这些方式加快回显速度 - 确切地说,您可以将 echo "The name of the user is $name" . "."; 替换为:

  • echo 'The name of the user is '.$name.'.';
  • echo "The name of the user is", $name, ".";
  • echo sprintf("The name of the user is %s", $name);

哪个最快?如果可能的话,我不仅想看基准测试,还想看一些技术解释。

【问题讨论】:

  • 您还没有发现回显参数列表(以逗号分隔)比回显一系列用点连接的值快皮秒?
  • 这真的是微优化;您是否已经优化了脚本中所有真正昂贵的元素?
  • 基准测试你就知道了。

标签: php optimization


【解决方案1】:

首先,这是微优化,您可能最好为更快的服务器付费并开发更多产品,而不是花费数小时进行微优化。但是根据http://micro-optimization.com/,结果如下:

sprintf() 比双引号慢 138.68%(慢 1.4 倍)

sprintf() 比单引号慢 163.72%(慢 1.6 倍)

【讨论】:

  • 同意这个答案。至于双引号和单引号以及连接运算符,我只是建议使用适合您的代码风格的标准化方法。
  • 也就是单引号比双引号高出14%。
  • 我已经不喜欢 sprintf() 因为我认为它混淆了。我很高兴看到我的首选方法也更快。
  • 1.提供的结果不正确(micro-optimization.com 的错) 2. 单引号/双引号的结论不正确,提供的前 2 个版本的行为不同,echo 'The name of the user is '.$name.'.'; 正在创建一个唯一的字符串,该字符串被回显,echo "The name of the user is", $name, "."; 正在使用“ echo" 关键字一次,但这是调用 echo 3 次的简写,分别使用参数 3。"echo" 的行为取决于使用的 SAPI(cli、apache、fcgi...)
【解决方案2】:

上面的cmets是相关的。有更好的方法来优化您的代码。

也就是说,优化字符串的最佳方法是将它们弹出到一个列表中,然后连接该列表。看看this post 是一个很好的起点。

【讨论】:

    【解决方案3】:

    使用sprintf() 的变体肯定是最慢的,因为PHP 中的函数调用非常昂贵,sprintf() 将不得不解析格式字符串。使用类似echo "abc ", $n, " xyz"; 的东西实际上编译为三个单一的ZEND_ECHO 操作码,这意味着输出层被多次调用,这可能会很慢,具体取决于所使用的SAPI。使用 echo "abc $n xyz";echo "abc " . $n . " xyz"; 并没有太大区别,因为它们都编译为 cocatenation 操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多