php优化
2015-12-14 21:56
483 查看
2015年12月14日 21:20:29
之前写过两篇文章:
xdebug配置
xdebug trace 结果分析
第二篇里边有两个很耗时间和内存的线条:
第一个斜坡:
从mysql里读取数据后, 用while循环调用$result->fetch_assoc()将数据存放到数组里
这里的缺点是循环调用该函数, 如果数据量比较大的话,会有很多的函数调用(上下文切换),很浪费效率
优化:
php源码安装.configure时指定mysqlnd驱动,老版本php源码安装时需要指定mysql安装的相关几个地址
确保这一项以后, 使用$result->fetch_all(MYSQLI_ASSOC) 一次性将result转换为关联数组
图中有一个水平线,内存没有增加,但是耗费了很多时间
那里的代码是一段排序操作,用到了php的usort(); 自定义排序,
需要自己写一个排序用的回调函数, 这段效率特别低
优化:
[
'a' => ['sort' => 123],
'b' => ['sort' => 234]
.....
]
先遍历要排序的二维数组(如上边的那个), 生成一个一维数组, 键为二维数组的键,值为排序用的那个值:
[
'a' => 123,
'b' => 234
]
然后用php的排序函数: asort() 或者 arsort();对这个一维数组排序, 然后根据对应关系生成一个新的完整的数组, 这样会快很多
之前写过两篇文章:
xdebug配置
xdebug trace 结果分析
第二篇里边有两个很耗时间和内存的线条:
第一个斜坡:
从mysql里读取数据后, 用while循环调用$result->fetch_assoc()将数据存放到数组里
这里的缺点是循环调用该函数, 如果数据量比较大的话,会有很多的函数调用(上下文切换),很浪费效率
优化:
php源码安装.configure时指定mysqlnd驱动,老版本php源码安装时需要指定mysql安装的相关几个地址
确保这一项以后, 使用$result->fetch_all(MYSQLI_ASSOC) 一次性将result转换为关联数组
//将结果集转换成数组返回 //如果field不为空,则返回的数组以$field为键重新索引 public function rstoarray(&$result, $field = '') { $arrRs = $result->fetch_all(MYSQLI_ASSOC); //该函数只能用于php的mysqlnd驱动 $result->free(); if ($field) { $arrResult = []; foreach ($arrRs as $v) { $arrResult[$v[$field]] = $v; } return $arrResult; } return $arrRs; }
图中有一个水平线,内存没有增加,但是耗费了很多时间
那里的代码是一段排序操作,用到了php的usort(); 自定义排序,
需要自己写一个排序用的回调函数, 这段效率特别低
优化:
[
'a' => ['sort' => 123],
'b' => ['sort' => 234]
.....
]
先遍历要排序的二维数组(如上边的那个), 生成一个一维数组, 键为二维数组的键,值为排序用的那个值:
[
'a' => 123,
'b' => 234
]
然后用php的排序函数: asort() 或者 arsort();对这个一维数组排序, 然后根据对应关系生成一个新的完整的数组, 这样会快很多
//按照二维数组中的某个键进行排序 public function mysort(&$arr, $key, $desc = '') { $tmp = array(); foreach ($arr as $k=>$v) { $tmp[$k] = $v[$key]; } if ($desc) { arsort($tmp); } else { asort($tmp); } $result = array(); foreach ($tmp as $k => $v) { $result[$k] = $arr[$k]; } return $result; }
相关文章推荐
- php-简单计算器
- SMTP的响应码列表
- 安装php扩展
- PHP访问MySQL几种方法
- PHP安装与使用VLD查看opcode代码【PHP安装第三方扩展的方法】
- wget FTP下载问题
- WindowManager.LayoutParams.type属性
- PHP读取TXT中文乱码的解决方式
- php单例模式学习
- mac下配置matplotlib绘图
- ThinkPHP--多表查询之join和table的用法
- PHP防csrf攻击
- php代码下载文件转换成迅雷,快车,qq下载文件源代码
- 发送电子邮件模块smtplib
- EditPlus 注册码在线生成
- PHP number_format()函数
- php创建二维码
- 远程管理数据库phpMyAdmin部署方案
- PHPCMS V9 按浏览次数排行调用文章
- 用Matplotlib绘制股票每月最高收盘价曲线