对于
{
//coding...
}
和
{
//coding...
}
这2种最简单不过的判断,似乎很少有人关心他们的性能差别,包括我,写了快10年的php似乎从来没有在意过这些。
对我来说,只有在需要严格判断的情况下才会用 === 来判断,大多情况下都是用 == 来判断的。
今天闲来无事手贱测一下这些被遗忘的细节的性能差别,结果却有些让我出乎意料。
测试代码:
在我电脑上执行代码A和B的结果分别是:
=== 是 4.2317380905151
== 是 5.3882131576538
看来 === 胜出
千万别急着下结论,把代码$a, $b 的值换成 123 试试,结果却出乎我的意料
=== 是 3.3042049407959
== 是 3.091680765152
反而是 == 胜出了
那么再把 $a, $b 的值都赋值成一个 new stdClass(); 是什么结果呢,这个结果在我的意料之中不过也是意料之外
我把 99999999 次循环改成了 199999999 次,结果是:
=== 是 6.6931169033051
== 是 9.5787789821625
结果显示 === 比 == 快 1/3
以上似乎看不出什么差距,后来我又测了一个代码,发现问题来了
没用 99999999 次循环是因为我等了几分钟都还没出结果
最终的结果是:
=== 是 4.435389995575
== 是 57.722193956375
足足有10几倍性能的差距。
可见对于字符串来说,字符越长, === 的性能优势越大于 ==
结论:
如果php的if判断是字符串判断,一定要用 ===, 比 == 不知快多少,而对于整型的判断,== 比 === 快些但是优势不大。
所以判断尽量用 ===
PS:以上测试环境是 5.5.14 ,Mac OS 10.10.1, 2.3 GHz Intel Core i7,16G 1600 MHz DDR3
ps: 后又在php7.1里试了下也是一样的
呃,一般我都是用==(因为经常数据库读出来的整形数字也是字符串,框架的问题),而且也没有注意这个细节,想不到差距挺大的!