V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiasix
V2EX  ›  程序员

so php 单引号快还是双引号快?

  •  
  •   xiasix · 2013-09-28 12:56:56 +08:00 · 4628 次点击
    这是一个创建于 4053 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://www.metamorphosite.com/php-benchmarks-loops-arrays
    单纯的字符串的时候 他说是双引号快点
    so 自己写了个测了一下,php5.5 mac系统 终端下运行
    <?php
    $t1 = microtime(true);
    $i = 1;

    while ($i < 1000000) {
    $text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

    ++$i;
    }

    $t2 = microtime(true);
    echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
    $i = 1;
    while ($i < 1000000) {
    $text = "das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

    ++$i;
    }

    $t3 = microtime(true);
    echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;
    结果
    bogon:~ kele$ php www/1.php
    86.992979049683ms
    87.911128997803ms
    bogon:~ kele$ php www/1.php
    87.116956710815ms
    88.299036026001ms
    bogon:~ kele$ php www/1.php
    89.183807373047ms
    87.899208068848ms
    bogon:~ kele$ php www/1.php
    87.803840637207ms
    88.411092758179ms
    bogon:~ kele$ php www/1.php
    87.093114852905ms
    88.102102279663ms
    bogon:~ kele$ php www/1.php
    88.034868240356ms
    88.240146636963ms
    bogon:~ kele$ php www/1.php
    88.271856307983ms
    88.357210159302ms
    bogon:~ kele$ php www/1.php
    87.208032608032ms
    86.41791343689ms
    22 条回复    1970-01-01 08:00:00 +08:00
    pathletboy
        1
    pathletboy  
       2013-09-28 13:08:53 +08:00
    这种测试不准的,因为你的线程可能会被切换走,导致运行时间增加,特别是你这种时间越短越不准。
    shiny
        2
    shiny  
       2013-09-28 13:11:38 +08:00
    它也没说所有情况下单引号都快啊:
    Double quotes is 2.9% faster than Single quotes by an average of 0.00024834399999999µs.
    Single quotes concatenation is 5.44% faster than Double quotes concatenation by an average of 0.0005676475789474µs.

    不同的地方是双引号还要解析字符串吧。
    在我看来在 php 里比这种快慢是非常非常无聊的。
    skydiver
        3
    skydiver  
       2013-09-28 13:15:44 +08:00   ❤️ 1
    纠结这些细节没什么意义..来一个数据库IO,这些省出来的时间全不值一提。
    yakczh
        4
    yakczh  
       2013-09-28 13:26:19 +08:00
    php慢不是因为拼字符串,而是很多框架引用一大堆没用的类,引起的额外的io开销,每次请求都要调用stat都检查每个文件是不是有更新 ,导致单文件和框架会有70%的性能差距
    yakczh
        5
    yakczh  
       2013-09-28 13:29:08 +08:00
    累计百万的请求省出来1毫秒的优势,小伙伴们都惊呆了
    yangqi
        6
    yangqi  
       2013-09-28 13:53:16 +08:00
    都5年前的文章了, 别太当真了.

    不信你把上下两次比较都用同样的,单引号或者双引号. 最后结果也是不同的, 所以结果你明白的
    xiasix
        7
    xiasix  
    OP
       2013-09-28 13:53:28 +08:00
    @yakczh 测试,测试 你和你的小伙伴们懂么
    xiasix
        8
    xiasix  
    OP
       2013-09-28 13:55:38 +08:00
    @skydiver 只是想知道以后想代码申明字符串的时候 是 $a="nihao"; 还是$a='nihao'; 而已
    zhujinliang
        9
    zhujinliang  
       2013-09-28 14:15:29 +08:00
    双引号可以处理嵌入变量,拼字符串时会很便利
    用到这种特性时就写双引号,用不到时就写单引号
    msg7086
        10
    msg7086  
       2013-09-28 14:17:51 +08:00
    @xiasix 从语言源码角度来说,单引号是字符串立即量,双引号则会解析变量引用,所以单引号要比双引号快。
    实际则是两者速度非常接近,就算你把整个页面所有的单引号都改成双引号,对执行效率的影响还不及气温带来的速度变化。
    ejin
        11
    ejin  
       2013-09-28 15:01:31 +08:00
    100万次才这么点区别么……
    yxzblue
        12
    yxzblue  
       2013-09-28 15:51:03 +08:00
    看来,大伙讨论得够多了。我插句,按文档来吧
    yakczh
        13
    yakczh  
       2013-09-28 16:16:29 +08:00
    别搞这些hellowold式的测试了,测试下不同框架数据库两个表连接查询的性能对比才有实际意义
    taogogo
        14
    taogogo  
       2013-09-28 16:29:26 +08:00
    只能理论上来说,单引号快,其实是无所谓的,代码好看就好
    zhujinliang
        15
    zhujinliang  
       2013-09-28 16:36:43 +08:00
    @msg7086 这种解析不应该是编译期做的事么,理论上两种写法编译后应该是一样的,只是编译过程中处理方式不一样会有效率差别
    zouchao
        16
    zouchao  
       2013-09-28 16:46:58 +08:00
    这个时间的差异,觉得没有太大的意思!
    nine
        17
    nine  
       2013-09-28 17:13:00 +08:00
    <?php
    $t1 = microtime(true);
    $i = 1;

    while ($i < 1000000) {
    $text = 'das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k';

    ++$i;
    }

    $t2 = microtime(true);
    echo (($t2 - $t1) * 1000) . 'ms' . PHP_EOL;
    $i = 1;
    while ($i < 1000000) {
    $text = "{$i}das;lfkjasd;lfkjads;lfkjasdl;fkjasdgnafdgljadhsfl;kadsfmasdl;gjkasdfio;mads;klgads;lfgkjads;fkljagl;k";

    ++$i;
    }

    $t3 = microtime(true);
    echo (($t3 - $t2) * 1000) . 'ms'.PHP_EOL;

    ?>


    给你改了一点点 LZ 运行这段代码试试
    xlmo
        18
    xlmo  
       2013-09-28 17:14:00 +08:00
    用双引号还是单引号除了功能区别外主要还是习惯上的区别。性能上的区别微乎其微,没有必要纠结在这上面。
    比如对于有变量的字符串我用双引号,没有变量的字符串我用单引号。
    zencoding
        19
    zencoding  
       2013-09-28 18:23:59 +08:00
    把单引号作为习惯即可,没必要吹毛求疵
    msg7086
        20
    msg7086  
       2013-09-29 02:09:20 +08:00
    @zhujinliang 好吧,的确有这个可能,内嵌变量可以在编译阶段重写成字符串拼接。
    DKR
        21
    DKR  
       2013-09-29 09:47:15 +08:00
    doublleft
        22
    doublleft  
       2013-10-01 00:12:04 +08:00
    优先使用单引号
    $var = 'hello' . 'myname' . 'is' . name(); //这样就会太尴尬了
    不如就
    $var = "hello, myname is : name() "; //多了然
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1196 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:24 · PVG 02:24 · LAX 11:24 · JFK 14:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.