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字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
openPNE常用方法分享
Nov 29 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
php基本函数汇总
Jul 09 PHP
PHP微信开发之模板消息回复
Jun 24 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
浅谈php调用python文件
Mar 29 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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
Laravel+Intervention实现上传图片功能示例
2019/07/09 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
深入理解vue中的$set
2017/06/01 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
2020/11/17 Vue.js
js基于canvas实现时钟组件
2021/02/07 Javascript
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
办公室前台岗位职责
2014/01/04 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers