PHP的纯CPU基准测试(PHP5.5.9 vs PHP7.2.1):
1.bench.php 可在PHP源代码的 php-src/Zend 目录
2.micro_bench.php 也可以在 PHP 源代码发布的 php-src/Zend 目录中找到
3.同时使用Unix time 命令来计时
time php micro_bench.php
PHP5.5.9结果:
empty_loop = self::$x = = Foo::$x = = $->x ->x = ->x +=
++$->x
--$->x ->x++ ->x-- ->x) ->x) ->f() = Foo::TEST
Foo() = TEST = $_GET = $GLOBALS[] = $hash[] = $str[] = $a ?: = $f ?: tmp = $f ? $f : $a = $f ? $f : tmp
------------------------real 0m14.498s
user 0m12.110s
sys 0m0.024s
PHP7.2.1结果:
empty_loop = self::$x = = Foo::$x = = $->x ->x = ->x +=
++$->x
--$->x ->x++ ->x-- ->x) ->x) ->f() = Foo::TEST
Foo() = TEST = $_GET = $GLOBALS[] = $hash[] = $str[] = $a ?: = $f ?: tmp = $f ? $f : $a = $f ? $f : tmp
------------------------real 0m5.756s
user 0m4.521s
sys 0m0.028s
性能提升接近三倍
micro_bench.php 测试脚本
<span style="color: #0000ff">function<span style="color: #000000"> hallo() {
}
<span style="color: #0000ff">function simpleucall(<span style="color: #800080">$n<span style="color: #000000">) {
<span style="color: #0000ff">for (<span style="color: #800080">$i = 0; <span style="color: #800080">$i < <span style="color: #800080">$n; <span style="color: #800080">$i++<span style="color: #000000">)
hallo();
}
<span style="color: #0000ff">function simpleudcall(<span style="color: #800080">$n<span style="color: #000000">) {
<span style="color: #0000ff">for (<span style="color: #800080">$i = 0; <span style="color: #800080">$i < <span style="color: #800080">$n; <span style="color: #800080">$i++<span style="color: #000000">)
hallo2();
}
<span style="color: #0000ff">function<span style="color: #000000"> hallo2() {
}
<span style="color: #0000ff">function simpleicall(<span style="color: #800080">$n<span style="color: #000000">) {
<span style="color: #0000ff">for (<span style="color: #800080">$i = 0; <span style="color: #800080">$i < <span style="color: #800080">$n; <span style="color: #800080">$i++<span style="color: #000000">)
<span style="color: #008080">func_num_args<span style="color: #000000">();
}
<span style="color: #0000ff">class<span style="color: #000000"> Foo {
<span style="color: #0000ff">static <span style="color: #800080">$a = 0<span style="color: #000000">;
<span style="color: #0000ff">public <span style="color: #800080">$b = 0<span style="color: #000000">;
<span style="color: #0000ff">const TEST = 0<span style="color: #000000">;
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> read_static(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = self::<span style="color: #800080">$a</span><span style="color: #000000">;
}
}
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> write_static(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
self</span>::<span style="color: #800080">$a</span> = 0<span style="color: #000000">;
}
}
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> isset_static(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #0000ff">isset</span>(self::<span style="color: #800080">$a</span><span style="color: #000000">);
}
}
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> empty_static(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #0000ff">empty</span>(self::<span style="color: #800080">$a</span><span style="color: #000000">);
}
}
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span><span style="color: #000000"> f() {
}
</span><span style="color: #0000ff">static</span> <span style="color: #0000ff">function</span> call_static(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
self</span>::<span style="color: #000000">f();
}
}
</span><span style="color: #0000ff">function</span> read_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #800080">$this</span>-><span style="color: #000000">b;
}
}
</span><span style="color: #0000ff">function</span> write_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$this</span>->b = 0<span style="color: #000000">;
}
}
</span><span style="color: #0000ff">function</span> assign_add_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$this</span>->b += 2<span style="color: #000000">;
}
}
</span><span style="color: #0000ff">function</span> pre_inc_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span>++<span style="color: #800080">$this</span>-><span style="color: #000000">b;
}
}
</span><span style="color: #0000ff">function</span> pre_dec_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span>--<span style="color: #800080">$this</span>-><span style="color: #000000">b;
}
}
</span><span style="color: #0000ff">function</span> post_inc_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$this</span>->b++<span style="color: #000000">;
}
}
</span><span style="color: #0000ff">function</span> post_dec_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$this</span>->b--<span style="color: #000000">;
}
}
</span><span style="color: #0000ff">function</span> isset_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #0000ff">isset</span>(<span style="color: #800080">$this</span>-><span style="color: #000000">b);
}
}
</span><span style="color: #0000ff">function</span> empty_prop(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #0000ff">empty</span>(<span style="color: #800080">$this</span>-><span style="color: #000000">b);
}
}
</span><span style="color: #0000ff">function</span><span style="color: #000000"> g() {
}
</span><span style="color: #0000ff">function</span> call(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$this</span>-><span style="color: #000000">g();
}
}
</span><span style="color: #0000ff">function</span> read_const(<span style="color: #800080">$n</span><span style="color: #000000">) {
</span><span style="color: #0000ff">for</span> (<span style="color: #800080">$i</span> = 0; <span style="color: #800080">$i</span> < <span style="color: #800080">$n</span>; ++<span style="color: #800080">$i</span><span style="color: #000000">) {
</span><span style="color: #800080">$x</span> = <span style="color: #800080">$this</span>::<span style="color: #000000">TEST;
}
}
}
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|