Heim > Backend-Entwicklung > PHP-Tutorial > PHP程序中Static方法效率的测试

PHP程序中Static方法效率的测试

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-01 14:24:24
Original
1269 Leute haben es durchsucht

因为有好几个项目等着做,又不是很急,再加上目前成型的那些框架多多少少用着总是有点不太如意,所以决定先自己写一个框架,然后再做项目。既然写框架,自然要经常做一些执行效率上的测试,今天做了一个static效率的测试。

类的定义如下:

class test
{
    public static function a(){}
    public function b(){}
}
Nach dem Login kopieren

比较以下几种情况

  1. test::a();
  2. $obj->a();
  3. $obj->b();

测试代码:

$obj = new test;

$test_times = 100;
$times = 10000;

$effi1 = array();
$effi2 = array();


while ($test_times-- > 0)
{
    $time1 = microtime(true);

    for($i=0; $i<$times; $i++)
    {
        test::a();
    }

    $time2 = microtime(true);

    for($i=0; $i<$times; $i++)
    {
        $obj->a();
    }

    $time3 = microtime(true);

    for($i=0; $i<$times; $i++)
    {
        $obj->b();
    }

    $time4 = microtime(true);

    $effi1[] = ($time3 - $time2) / ($time2 - $time1);
    $effi2[] = ($time4 - $time3) / ($time3 - $time2);
}

echo avg($effi1),"\n",avg($effi2);
Nach dem Login kopieren

最后的avg是自定义的计算平均数的一个函数:

function avg($arr)
{
    $result = 0;
    foreach ($arr as $val)
    {
        $result += $val;
    }

    $result /= count($arr);
    return $result;
}
Nach dem Login kopieren

程序输出结果:

PHP 5.2.14
Nach dem Login kopieren

0.76490628848091
1.0699484376399
Nach dem Login kopieren

PHP 5.3
Nach dem Login kopieren

0.56919482299058<BR>1.1016495598611
Nach dem Login kopieren

 

重复执行N(N>10)次,都与这个结果相差不大,说明:

  1. 直接通过类名访问静态方法的效率是通过实例访问静态方法的76%,甚至用PHP5.3时只有56%
  2. 通过实例访问静态方法的效率是访问非静态成员方法效率的106,在5.3版本变成110%
  3. 假设PHP从5.2升级到5.3时通过类名访问静态方法的效率没有降低,那么通过实例访问函数的效率至少提高了35%。我没看过PHP源码,有研究过PHP源码的朋友希望能告诉我这个假设是否成立 (我想应该是成立的)

说明:以上测试基于windows 7和php.exe,5.2.14使用了apache2.2测试结果没有区别,考虑到php.exe和通过web访问所执行的PHP核心是一样的,所以5.3懒得改服务器配置了,结果应该一样。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage