Aug
21
Posted (xurenlu) in 未分类 on 08月-21-2007

我又写了一个文件.再测之:

  1. <?php
  2.  
  3. function signin()
  4. {
  5. return "null";
  6. }
  7. class User
  8. {
  9.     public function signin()
  10.     {
  11. return "null";
  12.     }
  13.  
  14. }
  15. function time1()
  16. {
  17. $arr=split(" ",microtime());
  18. return $arr[1]+$arr[0];
  19. }
  20. $t1= time1();
  21. for($i=0;$i<100000;$i++)
  22. signin();
  23. $t2=time1();
  24.  
  25. for($i=0;$i<100000;$i++)
  26. User::signin();
  27. $t3=time1();
  28.  
  29. echo "
  30. function:".($t2-$t1)."ms
  31. class:".($t3-$t2)."ms";

这是结果:

  1. function:0.071924924850464ms
  2. class:0.23149108886719ms

为了避免程序运行顺序的影响,我们再运行一次,这次先测静态类的,再测function的:

  1. <?php
  2.  
  3. function signin()
  4. {
  5. return "null";
  6. }
  7. class User
  8. {
  9.     public function signin()
  10.     {
  11. return "null";
  12.     }
  13.  
  14. }
  15. function time1()
  16. {
  17. $arr=split(" ",microtime());
  18. return $arr[1]+$arr[0];
  19. }
  20. $t1= time1();
  21.  
  22. for($i=0;$i<100000;$i++)
  23. User::signin();
  24. $t2=time1();
  25.  
  26. for($i=0;$i<100000;$i++)
  27. signin();
  28. $t3=time1();
  29.  
  30. echo "
  31. function:".($t3-$t2)."ms
  32. class:".($t2-$t1)."ms";

这次测的时间如下:

  1. function:0.072422027587891ms
  2. class:0.26213884353638ms

从这个结果来看,php的function还是相当快的,比class,哪怕是静态方法要快。
看来我越来越喜欢用function的路子是对的。

后来我加上另一个,把整个结果贴出来:

  1. $obj=& new User();
  2.  
  3. $t1= time1();
  4.  
  5. for($i=0;$i<100000;$i++)
  6. User::signin();
  7. $t2=time1();
  8.  
  9. for($i=0;$i<100000;$i++)
  10. signin();
  11. $t3=time1();
  12.  
  13. for($i=0;$i<100000;$i++)
  14. $obj->signin();
  15. $t4=time1();
  16.  
  17. for($i=0;$i<100000;$i++)
  18. {
  19. $obj1=& new User();
  20. $obj1->signin();
  21. }
  22. $t5=time1();
  23. echo "
  24. function:".($t3-$t2)."ms
  25. class:".($t2-$t1)."ms
  26. object:".($t4-$t3)."ms
  27. new object:".($t5-$t4)."ms";

结果是:

  1. function:0.071459054946899ms
  2. class:0.23710894584656ms
  3. object:0.08794093132019ms
  4. new object:0.17567801475525ms

也就是说,直接调用function是最快的,其次是重复调用已存在对象的方法,仅比纯function慢一点点。
接着是先新建class的实例再调用方法,最慢的是直接调用静态方法。
这个结果有一点点出乎我的意料,我没料到静态方法是最慢的一个。


Tag:
相关文章


     
    Aug
    21
    Posted (xurenlu) in php性能 on 08月-21-2007

    老覃同学做了一个测试,来比较PHP5下利用function,class来编程时的效率差异。
    我一向喜欢钻牛角尖:
    有两个疑问:
    1.ab本身的文档说了,ab自身是需要CPU资源的,有时候要注意你可能不是在测apache的性能,而是在测ab这个软件的性能。老覃同志如何去除ab的影响?
    2.php编译时也是花费CPU时间的。我做了另一组测试:

    1. //t1.php

    function signin()

    {

    echo “signin”;

    }

    signin();

    ?>

    ab -n 10000 -c 50 的结果是:
    1534.15 [#/sec]
    Time per request: 32.591 [ms] (mean)

    ,再另外一个:

    function signin()

    {

    echo “signin”;

    }

    //signin();

    ?>

    ab -n 10000 -c 50的结果是:
    1748.48 [#/sec], Time per request: 28.596 。
    就是说,算上ab的花费,apache的花费,php编译的花费,这几个的时间消费可能已经比php代码运行的时间花费要大了。加上运行的代码后,只相关几个ms。
    如果要进行精确的比较,老覃的做法可能很不可靠。
    PHP4与PHP5.20的效率目前还只有看官方的数据。
    另外有个疑问,我的php比老覃同志的似乎快了不少,相差好几倍。可能是我的是Fedora 下运行的结果。

    附注:

    我后来做了一个实验,ab -n 10000 -c 50 http://localhost/test/23442.php ,返回的结果是:

    1. Requests per second:    2192.03 [#/sec] (mean)
    2. Time per request:       22.810 [ms] (mean)

    这是在请求的文件不存在下,apache简单返回一个静态面的情况下的。由此看来,ab和apache的开销就已经占了大约20ms.

    再注,在这里
    是老覃的同事做的测试.我google得到了这个结果.


    Tag:
    相关文章


       
      Jul
      25
      Posted (xurenlu) in 杂谈 on 07月-25-2007

      Hust牛人之”覃健祥”
      之所以写这一段,是因为看到覃总的邮件合并入门.我本来早打算写一写老覃这个人的,到google去搜一份他的正式简历,结果却搜到他的这个教程。看过之后,我深感不如。老覃做事,就是比较细致。比如office系列,跟他比,我就是啥都不会!太汗颜了,枉我还从来不屑于在简历上写会用Office.该自己打自己一下。
      老覃人之可贵,在于:
      1.极其坦诚.老覃去年曾”五顾芍药居”,要拉我和他一起创业。可怜我那时一心想要把我的职业经历弄漂亮一点,没跟他走。后来他跟我说,不得不承认,我当时也有忽悠你的成分。坦诚之至。
      2.事不分大小,不管是不是需要那样尽力,做起来都特尽力.在某最早一批牛B起来的BSP,老覃做为创业元老,后来不得不离职,再后来辗转到某社区门户,几个月未领到一分钱工资。老覃只好出来自谋职业。当时我问他,都最后一天了,何必还这么忙?玩一天办个离职就走吧!老覃说,他要站好最后一班岗。未料及,后来不幸言中,离职之后,该”web 2.0新锐”再也不承认拖欠工资一事。另一哥们也在此列,郁闷之至,msn改名为”我要到天an门喝血碧”.(我那会也被拖欠工资,不过比现在好一点).奇的是老覃忙碌之于,还勤于烹饪,总是乐呵呵地邀一帮人去他家蹭饭。我也厚着脸皮经常去骗吃骗喝。这篇文章,也正表现出来。以他在网站架构方面的能力,他完全可以对老总说,报表啊打印之类的事,就文秘之类的做就行了。他来整这事,不是太浪费了么?(自己自责一个,我总是会这么说:这东西啊,你直接叫小*打印一下不就行了么?我这忙着呢!内心世界在说:没搞错啊,让我去打印啊,你这份文档成本很高呢!一副得瑟样。以后多提醒自己向老覃学习).
      老覃是我的师兄,华中科技大学,生命科学院,04级毕业。大我一届.现在老覃在做CMS,可以看看.他还喜欢做些绿色软件,比如曾经带好多人走上php编程工作的greenAMP,web调试工具Fiddler的绿化等。

      我的一个师弟,也写了一篇。见这里.下一次就写这个师弟。


      Tag:
      相关文章