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 相关文章推荐
PHP在Web开发领域的优势
Oct 09 PHP
php学习笔记 数组遍历实现代码
Jun 09 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
基于session_unset与session_destroy的区别详解
Jun 03 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
Laravel 5框架学习之环境与配置
Apr 08 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
VUE 动态组件的应用案例分析
2019/12/02 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Python2.x与Python3.x的区别
2016/01/14 Python
Python中datetime模块参考手册
2017/01/13 Python
利用python画一颗心的方法示例
2017/01/31 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
初三学生评语大全
2014/04/24 职场文书
环保倡议书格式范文
2014/05/14 职场文书
新文化运动的基本口号
2014/06/21 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
小程序实现侧滑删除功能
2022/06/25 Javascript