php基准测试

String Outputecho vs. print

Is a there a difference between what option you use to output your content?. Called within Output Buffering 1'000x

+ 100 %

echo ''

Total time: 110 µsview code

+ 104 %

print ''

Total time: 114 µsview code

+ 192 %

echo 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'

Total time: 211 µsview code

+ 201 %

print 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'

Total time: 221 µsview code

+ 590 %

echo 'aaaaaaa'.'aaaaaaa'.'aaaaaaa'.'aaaaaaa'

Total time: 649 µsview code

+ 510 %

echo 'aaaaaaa','aaaaaaa','aaaaaaa','aaaaaaa'

Total time: 561 µsview code

+ 610 %

print 'aaaaaaa'.'aaaaaaa'.'aaaaaaa'.'aaaaaaa'

Total time: 670 µsview code

+ 813 %

$a = 'aaaaaaa';
echo 'aaaaaaa'.$a.'aaaaaaa'.$a

Total time: 894 µsview code

+ 681 %

$a = 'aaaaaaa';
echo 'aaaaaaa',$a,'aaaaaaa',$a

Total time: 749 µsview code

+ 775 %

$a = 'aaaaaaa';
print 'aaaaaaa'.$a.'aaaaaaa'.$a

Total time: 852 µsview code

+ 731 %

$a = 'aaaaaaa';
echo $a.$a.$a.$a

Total time: 804 µsview code

+ 691 %

$a = 'aaaaaaa';
echo $a,$a,$a,$a

Total time: 759 µsview code

+ 759 %

$a = 'aaaaaaa';
print $a,$a,$a,$a

Total time: 834 µsview code

Conclusion:

In reality the echo and print functions serve the exact purpose and therefore in the backend the exact same code applies. The one small thing to notice is that when using a comma to separate items whilst using the echo function, items run slightly faster.

Variable Type CheckingisSet() vs. empty() vs. is_array()

What is the performance of isSet() and empty(). Call 2'000x

+ 107 %

isSet() with var that was set

Total time: 209 µsview code

+ 115 %

empty() with var that was set

Total time: 225 µsview code

+ 103 %

isSet() with var that was *not* set

Total time: 200 µsview code

+ 101 %

empty() with var that was *not* set

Total time: 197 µsview code

+ 106 %

isSet() with array-var that was set

Total time: 206 µsview code

+ 115 %

empty() with array-var that was set

Total time: 225 µsview code

+ 105 %

isSet() with array-var that was *not* set

Total time: 205 µsview code

+ 100 %

empty() with array-var that was *not* set

Total time: 195 µsview code

+ 531 %

is_array() of an array

Total time: 1035 µsview code

+ 519 %

is_array() of a string

Total time: 1013 µsview code

+ 1114 %

is_array() of a non set value

Total time: 2172 µsview code

+ 1139 %

isSet() AND is_array() of a non set value

Total time: 2221 µsview code

Conclusion:

isSet() and empty() are identical. So alway check if val is set at all befor using type-checking. E.g. if (isSet($foo) AND is_array($foo))

Quote Typesdouble (") vs. single (') quotes

Is a there a difference in using double (") and single (') quotes for strings. Call 1'000x

+ 225 %

single (') quotes. Just an empty string: $tmp[] = '';

Total time: 719 µsview code

+ 100 %

double (") quotes. Just an empty string: $tmp[] = "";

Total time: 319 µsview code

+ 160 %

single (') quotes. 20 bytes Text : $tmp[] = 'aaaaaaaaaaaaaaaaaaaa';

Total time: 510 µsview code

+ 118 %

double (") quotes. 20 bytes Text : $tmp[] = "aaaaaaaaaaaaaaaaaaaa";

Total time: 375 µsview code

+ 120 %

single (') quotes. 20 bytes Text and 3x a $ : $tmp[] = 'aa $ aaaa $ aaaa $ a';

Total time: 383 µsview code

+ 117 %

double (") quotes. 20 bytes Text and 3x a $ : $tmp[] = "aa $ aaaa $ aaaa $ a";

Total time: 374 µsview code

+ 122 %

double (") quotes. 20 bytes Text and 3x a \$ : $tmp[] = "aa \$ aaaa \$ aaaa \$ a";

Total time: 389 µsview code

Conclusion:

In today's versions of PHP it looks like this argument has been satisfied on both sides of the line. Lets all join together in harmony in this one!

Using the &-ref-operator...as a so called "alias"

Is a good idea to use the &-ref-operator to substitute (or alias) a complex mutidim-array? . Call 1'000x

E.g. $person = &$aHach["country"]["zip"]["street"]["number"]["name"]

+ 189 %

$alias = $aSingleDimArray[$i]

Total time: 714 µsview code

+ 100 %

$alias = &$aSingleDimArray[$i]

Total time: 377 µsview code

+ 231 %

$alias = $aMultiDimArray[$i]["aaaaa"]["aaaaaaaaaa"]

Total time: 872 µsview code

+ 665 %

$alias = &$aMultiDimArray[$i]["aaaaa"]["aaaaaaaaaa"]

Total time: 2505 µsview code

+ 272 %

$alias = veryMultiDimArray[$i]["a"]["aa"]["aaa"]["aaaa"]["aaaaa"]

Total time: 1027 µsview code

+ 1343 %

$alias = &$veryMultiDimArray[$i]["a"]["aa"]["aaa"]["aaaa"]["aaaaa"]

Total time: 5061 µsview code

Conclusion:

Whilst only using a one dimensional array, it's actually faster to use an alias, but anything larger will result in a performance drop.

Counting LoopsFor vs. While

Is there an actual difference between counting up between the for loop and the while loop?

+ 109 %

for($i = 0; $i < 1000000; ++$i);

Total time: 79874 µsview code

+ 100 %

$i = 0; while($i < 1000000) ++$i;

Total time: 73206 µsview code

Conclusion:

Well there you have it, the while loop 90% of the time is indeed slightly faster

Using the =&-ref-operator$obj = $someClass->f() vs. $obj =& $someClass->f()

Is a good idea to use the =&-ref-operator when calling a function in an object? Call 1'000x

+ 100 %

$obj = $someClass->f();

Total time: 688 µsview code

+ 221 %

$obj =& $someClass->f();

Total time: 1524 µsview code

Conclusion:

Unless your extremely worried about how much RAM your using, leaving the &-ref-operator out seems like the slightly faster option.

Read Loop:foreach() vs. for() vs. while(list() = each())

What is the best way to loop a hash array?

Given is a Hash array with 100 elements, 24byte key and 10k data per entry

+ 100 %

foreach($aHash as $val);

Total time: 15 µsview code

+ 959 %

while(list(,$val) = each($aHash));

Total time: 144 µsview code

+ 146 %

foreach($aHash as $key => $val);

Total time: 22 µsview code

+ 1044 %

while(list($key,$val) = each($aHash));

Total time: 157 µsview code

+ 400 %

foreach($aHash as $key=>$val) $tmp[] = $aHash[$key];

Total time: 60 µsview code

+ 1205 %

while(list($key) = each($aHash)) $tmp[] = $aHash[$key];

Total time: 181 µsview code

+ 419 %

Get key-/ value-array: foreach($aHash as $key[]=>$val[]);

Total time: 63 µsview code

+ 367 %

Get key-/ value-array: array_keys() / array_values()

Total time: 55 µsview code

+ 519 %

$key = array_keys($aHash);
$size = sizeOf($key);
for ($i=0; $i<$size; $i++) $tmp[] = $aHash[$key[$i]];

Total time: 78 µsview code

Conclusion:

In all cases I've found that the foreach loop is substantially faster than both the while() and for() loop procedures. One thing to note is that when using an entire loop from the start it's extremely good to use the reset() function in all examples

Given that the previous version of the tests have been very controvercial and incorrect, I must appologise for forgetting to implement the reset() function to allow the while() loops to start from the beginning instead of the end. Thanks to Anthony Bush for spotting this out.

Using the =&-ref-operator$obj = new SomeClass() vs. $obj =& new SomeClass()

Is a good idea to use the =&-ref-operator when creating a new object? Call 1'000x

+ 100 %

$obj = new SomeClass();

Total time: 865 µsview code

+ 113 %

$obj =& new SomeClass();

Total time: 980 µsview code

Conclusion:

There seams to be no difference in performance.

Control Structuresswitch/case/default vs. if/elseif/else

Is a there a difference between switch and if structures?. Call 1'000x

+ 117 %

if and elseif (using ==)

Total time: 186 µsview code

+ 118 %

if, elseif and else (using ==)

Total time: 188 µsview code

+ 100 %

if and elseif (using ===)

Total time: 159 µsview code

+ 101 %

if, elseif and else (using ===)

Total time: 160 µsview code

+ 126 %

switch / case

Total time: 200 µsview code

+ 154 %

switch / case / default

Total time: 245 µsview code

Conclusion:

Using a switch/case or if/elseif is almost the same. Note that the test is unsing === (is exactly equal to) and is slightly faster then using == (is equal to).

Counting LoopsFor-loop test

Is it worth the effort to calculate the length of the loop in advance?

e.g. "for ($i=0; $i<$size; $i++)" instead of "for ($i=0; $i<sizeOf($x); $i++)"

A loop with 1000 keys with 1 byte values are given.

+ 126 %

With pre calc - count()

Total time: 246 µsview code

+ 55074 %

Without pre calc - count()

Total time: 107277 µsview code

+ 100 %

With pre calc - sizeof()

Total time: 195 µsview code

+ 53549 %

Without pre calc - sizeof()

Total time: 104307 µsview code

Conclusion:

Unsurprising results... this is one of the easiest things to implement in any application and is the widest agreed upon benchmarking item within the online PHP community. The results basically speak for themselves.

Modify Loop:foreach() vs. for vs. while(list() = each())

What would happen if we alter the reading loop test to test the results of a loop created to simply alter the data in each of the values in the array?

Given again is a Hash array with 100 elements, 24byte key and 10k data per entry.

+ 580 %

foreach($aHash as $key=>$val) $aHash[$key] .= "a";

Total time: 412 µsview code

+ 231 %

while(list($key) = each($aHash)) $aHash[$key] .= "a";

Total time: 164 µsview code

+ 100 %

$key = array_keys($aHash);
$size = sizeOf($key);
for ($i=0; $i<$size; $i++) $aHash[$key[$i]] .= "a";

Total time: 71 µsview code

Conclusion:

Proof in this example shows how functionally murderous the foreach() loop can be.


转自:http://www.phpbench.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值