博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php优化
阅读量:6620 次
发布时间:2019-06-25

本文共 1550 字,大约阅读时间需要 5 分钟。

2015年12月14日 21:20:29

之前写过两篇文章:

第二篇里边有两个很耗时间和内存的线条: 

第一个斜坡:

从mysql里读取数据后, 用while循环调用$result->fetch_assoc()将数据存放到数组里

这里的缺点是循环调用该函数, 如果数据量比较大的话,会有很多的函数调用(上下文切换),很浪费效率

优化:

php源码安装.configure时指定mysqlnd驱动,老版本php源码安装时需要指定mysql安装的相关几个地址

确保这一项以后, 使用$result->fetch_all(MYSQLI_ASSOC) 一次性将result转换为关联数组

1 //将结果集转换成数组返回 2     //如果field不为空,则返回的数组以$field为键重新索引 3     public function rstoarray(&$result, $field = '') 4     { 5         $arrRs = $result->fetch_all(MYSQLI_ASSOC); //该函数只能用于php的mysqlnd驱动 6         $result->free(); 7          8         if ($field) { 9             $arrResult = [];10             foreach ($arrRs as $v) {11                 $arrResult[$v[$field]] = $v;12             }13             return $arrResult;14         }15         16         return $arrRs;17     }

 

图中有一个水平线,内存没有增加,但是耗费了很多时间

那里的代码是一段排序操作,用到了php的usort(); 自定义排序,

需要自己写一个排序用的回调函数, 这段效率特别低

优化:

[

'a' => ['sort' => 123],

'b' => ['sort' => 234]

.....

]

先遍历要排序的二维数组(如上边的那个), 生成一个一维数组, 键为二维数组的键,值为排序用的那个值:

[

'a' => 123,

'b' => 234

]

然后用php的排序函数: asort() 或者 arsort();对这个一维数组排序, 然后根据对应关系生成一个新的完整的数组, 这样会快很多

1 //按照二维数组中的某个键进行排序 2     public function mysort(&$arr, $key, $desc = '') 3     { 4         $tmp = array(); 5         foreach ($arr as $k=>$v) { 6             $tmp[$k] = $v[$key]; 7         } 8          9         if ($desc) {10             arsort($tmp);11         } else {12             asort($tmp);13         }14         15         $result = array();16         foreach ($tmp as $k => $v) {17             $result[$k] = $arr[$k];18         }19         20         return $result;21     }

 

转载地址:http://myypo.baihongyu.com/

你可能感兴趣的文章
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>
springboot docker笔记
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
【第8章】JVM内存管理
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
HTML
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
查看>>
ubuntu下安装jdk
查看>>
python操作数据库-安装
查看>>
你真的了解interface和内部类么
查看>>
kuangbin专题七 POJ3264 Balanced Lineup (线段树最大最小)
查看>>
JS动画效果链接汇总
查看>>
陈云川的OPENLDAP系列
查看>>
P1197 [JSOI2008]星球大战
查看>>
XML转义字符
查看>>