PHP原生函数一定好吗?


Posted in PHP onDecember 08, 2014

今天在阅读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;

 }

 $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的倍数时,结果出乎我的意料:

首先是使用原生函数的结果:

PHP原生函数一定好吗? 

下面是使用自定义函数的结果:

PHP原生函数一定好吗? 

为了结果比较准确,我在做个图表统计

统计次数 原生函数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内核中该函数的复杂度也很了解,所以这个小优化才可以做这么好,太厉害了!!!

PHP 相关文章推荐
杏林同学录(九)
Oct 09 PHP
一些常用的php简单命令代码集锦
Sep 24 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
php实现监听事件
Nov 06 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
PHP比你想象的好得多
Nov 27 PHP
php三元运算符知识汇总
Jul 02 PHP
PHP new static 和 new self详解
Feb 19 PHP
thinkphp中ajax与php响应过程详解
Dec 08 #PHP
一款简单实用的php操作mysql数据库类
Dec 08 #PHP
php表单敏感字符过滤类
Dec 08 #PHP
php网页病毒清除类
Dec 08 #PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 #PHP
简单实用的PHP防注入类实例
Dec 05 #PHP
ThinkPHP连接数据库的方式汇总
Dec 05 #PHP
You might like
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
浅谈重写window对象的方法
2014/12/29 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
Vue中keep-alive组件作用详解
2020/02/04 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
粗略分析Python中的内存泄漏
2015/04/23 Python
Python制作简单的网页爬虫
2015/11/22 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python基于递归解决背包问题详解
2019/07/03 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
Farnell德国:电子元器件供应商
2018/07/10 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
C#实现启动一个进程
2016/10/01 面试题
采购类个人求职的自我评价
2014/02/18 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
中学生寄语大全
2014/04/03 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
党委工作总结2015
2015/04/27 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
筑梦中国心得体会
2016/01/18 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
MySQL注入基础练习
2021/05/30 MySQL
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js