1
pathletboy 2013-09-28 13:08:53 +08:00
这种测试不准的,因为你的线程可能会被切换走,导致运行时间增加,特别是你这种时间越短越不准。
|
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 里比这种快慢是非常非常无聊的。 |
3
skydiver 2013-09-28 13:15:44 +08:00 1
纠结这些细节没什么意义..来一个数据库IO,这些省出来的时间全不值一提。
|
4
yakczh 2013-09-28 13:26:19 +08:00
php慢不是因为拼字符串,而是很多框架引用一大堆没用的类,引起的额外的io开销,每次请求都要调用stat都检查每个文件是不是有更新 ,导致单文件和框架会有70%的性能差距
|
5
yakczh 2013-09-28 13:29:08 +08:00
累计百万的请求省出来1毫秒的优势,小伙伴们都惊呆了
|
6
yangqi 2013-09-28 13:53:16 +08:00
都5年前的文章了, 别太当真了.
不信你把上下两次比较都用同样的,单引号或者双引号. 最后结果也是不同的, 所以结果你明白的 |
9
zhujinliang 2013-09-28 14:15:29 +08:00
双引号可以处理嵌入变量,拼字符串时会很便利
用到这种特性时就写双引号,用不到时就写单引号 |
10
msg7086 2013-09-28 14:17:51 +08:00
@xiasix 从语言源码角度来说,单引号是字符串立即量,双引号则会解析变量引用,所以单引号要比双引号快。
实际则是两者速度非常接近,就算你把整个页面所有的单引号都改成双引号,对执行效率的影响还不及气温带来的速度变化。 |
11
ejin 2013-09-28 15:01:31 +08:00
100万次才这么点区别么……
|
12
yxzblue 2013-09-28 15:51:03 +08:00
看来,大伙讨论得够多了。我插句,按文档来吧
|
13
yakczh 2013-09-28 16:16:29 +08:00
别搞这些hellowold式的测试了,测试下不同框架数据库两个表连接查询的性能对比才有实际意义
|
14
taogogo 2013-09-28 16:29:26 +08:00
只能理论上来说,单引号快,其实是无所谓的,代码好看就好
|
15
zhujinliang 2013-09-28 16:36:43 +08:00
@msg7086 这种解析不应该是编译期做的事么,理论上两种写法编译后应该是一样的,只是编译过程中处理方式不一样会有效率差别
|
16
zouchao 2013-09-28 16:46:58 +08:00
这个时间的差异,觉得没有太大的意思!
|
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 运行这段代码试试 |
18
xlmo 2013-09-28 17:14:00 +08:00
用双引号还是单引号除了功能区别外主要还是习惯上的区别。性能上的区别微乎其微,没有必要纠结在这上面。
比如对于有变量的字符串我用双引号,没有变量的字符串我用单引号。 |
19
zencoding 2013-09-28 18:23:59 +08:00
把单引号作为习惯即可,没必要吹毛求疵
|
20
msg7086 2013-09-29 02:09:20 +08:00
@zhujinliang 好吧,的确有这个可能,内嵌变量可以在编译阶段重写成字符串拼接。
|
21
DKR 2013-09-29 09:47:15 +08:00
|
22
doublleft 2013-10-01 00:12:04 +08:00
优先使用单引号
$var = 'hello' . 'myname' . 'is' . name(); //这样就会太尴尬了 不如就 $var = "hello, myname is : name() "; //多了然 |