用逗号可以节少echo 的输出时间

解决方案 »

  1.   


    这个问题我也遇到过,但是网上没有详细说。我觉得:1、逗号可能去输出多个字符串:
    如:echo $first,$second,即是:
    echo $first;
    echo $second;2、而英文句号则是,把多个字符串连接起来再输出。所以,连接起来的时候,可能是这里浪费时间,不知道理解是否正确,呵呵???
      

  2.   

    嗯,就是gingzai777说的那样。,只是依次输出,而.则是连接后输出,后者当然是会慢一些的。
      

  3.   

    我测试了一下.
    echo $first;
    echo $second;
    这样的写法运行比
    echo $first,$second;
    更快
      

  4.   

    真的?我在opcode的层面上看。
    echo $first;
    echo $second;

    line op return  operands
    2  ECHO     -   !1
    3  ECHO     -   !2echo $first,$second;

    2  ECHO     -   !1
    2  ECHO     -   !2echo $first.$second

    2  CONCAT     ~3        !1, !2
         ECHO                       ~3很明显最后一种是最耗时的,因为需要做一次连接(CONCAT)操作,生成一个tmp var(~3)。
    但是前面两种我看不出有多少区别,反而是,的只有一个opline,在内存的开销应该会稍微小一些才对。
    它内部是如何实现的呢?首先必然是先寻找到了echo,于是有一个类似T_ECHO的token。
    然后寻找表达式,直到出现一个不在引号token内的,或者;或者.
    如果遇到,,则把表达式结果存储在opline里,直到出现;,然后输出(实际上是进buffer)。难道操作opline要比生成一个opline并且输出到buffer更耗时?嗯,想不通了。。
      

  5.   

    echo $first,$second; 0.208221
    echo $first.$second; 0.265668
    echo $first;
    echo $second; 0.188376循环1000000次  挑了一个时间.
    大家可以用bench也试一下楼上你说的太深奥了,我听不懂,汗
      

  6.   

    用.进行字符串合并肯定是最慢的。PHP处理字符串和其它类型高级语言类似,都是创建不可修改的“字符串”的,所以.一下会产生一个中间串。
      

  7.   


    echo $first,$second; //应该是先输出变量$first,然后再输出变量$second
    echo $first.$second; //在这里.号是一个连接运算符,将$first与$second连接成一个字符串之后,再输出。
    这样说对不对?