加入收藏 | 设为首页 | 会员中心 | 我要投稿 平顶山站长网 (https://www.0375zz.cn/)- 分布式云、数据处理、媒体处理、图像分析、基础存储!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用PHP原生函数就一定比自定义函数快吗?

发布时间:2022-06-16 09:24:51 所属栏目:PHP教程 来源:互联网
导读:之前听到过的一个前辈关于php性能优化的说法PHP为我们提供了那么多的原声函数,我们尽量用原生函数解决问题,但是有时在想,php原生态的函数就一定快吗?现在看到一个国外的人写的函数,就来测试一下. 今天在阅读kohana源码中的Arr类的时候发现了这样一个函数,代
  之前听到过的一个前辈关于php性能优化的说法——PHP为我们提供了那么多的原声函数,我们尽量用原生函数解决问题,但是有时在想,php原生态的函数就一定快吗?现在看到一个国外的人写的函数,就来测试一下.
 
  今天在阅读kohana源码中的Arr类的时候发现了这样一个函数,代码如下:
 
  /**
   * Fill an array with a range of numbers.
   *
   *     // Fill an array with values 5, 10, 15, 20
   *     $values = Arr::range(5, 20);
   *
   * @param   integer $step   stepping
   * @param   integer $max    ending number
   * @return  array
   */
  public static function range($step = 10, $max = 100)
  {
      if ($step < 1)
          return array();
   
      $array = array();
      for ($i = $step; $i <= $max; $i += $step)
      {
          $array[$i] = $i;
      }
   
      return $array;
  }
  看到这里的时候,我发现php的原声函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法——PHP为我们提供了那么多的原声函数,我们尽量用原生函数解决问题,于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少,要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原声函数range()会报错“Fatal error:Cannot redeclare range() in”.
 
  代码如下:
 
  function _range($step = 10, $max = 100)
  {
      if ($step < 1)
          return array();
      $array = array();
      for ($i = $step; $i <= $max; $i += $step)
      {
          $array[$i] = $i;
      }
      return $array;
  } //开源软件:phpfensi.com
  $time['begin'] = microtime(true);
  $tmp = range(0,1000000,3);
  //$tmp = _range(0,1000000,3);
  $time['end']   = microtime(true);
   
  echo $time['end'] - $time['begin'].'s'."r";
  echo (memory_get_peak_usage()/1024/1024)."M";
  分别用原生函数和自定义函数进行测试,在产生0~1000000之间所有的3的倍数时,结果出乎我的意料.
 
  为了结果比较准确,我在做个图表统计.
 
  统计次数     原生函数range()     自定义函数_range()
  (0,1000000,3)     5.155E-3s     27.5530M     1.907E-5s     0.1241M
  (0,1000000,2)     7.479E-3s     40.2688M     1.811E-5s     0.1241M
  (0,1000,1)     8.16E-5s     0.1620M     2.649E-5s     0.1241M
  从表中可以看出产生随机数时自定义函数比原生函数要节省内存和时间,而且原生函数在生成大量随机数时特别耗内存,消耗时间也特别多,而自定义函数在这方面则表现得好,产生的内存和消耗的时间基本稳定,看来前面那位前辈说的不一定完全正确哦,但是这里要注意我们这里的自定义函数只能生成数字,而原生的range还可以产生字母的,但是我想这自定义函数添加个字母应该也不会太难~
 
  看来kohana官方对range这个函数很是了解,对php内核中该函数的复杂度也很了解,所以这个小优化才可以做这么好,太厉害了.

(编辑:平顶山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读