开发者社区> mydcool> 正文

php优化

简介: 2015年12月14日 21:20:29 之前写过两篇文章: xdebug配置 xdebug trace 结果分析 第二篇里边有两个很耗时间和内存的线条:  第一个斜坡: 从mysql里读取数据后, 用while循环调用$result->fetch_assoc()将数据存放到数组里 这...
+关注继续查看

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转换为关联数组

 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     }

 

SummerPHP 框架

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何进行代码优化以提高PHP应用的性能?
如何进行代码优化以提高PHP应用的性能?
18 0
基于PHP和MySQL的新闻发布系统——【功能优化】
基于PHP和MySQL的新闻发布系统——【功能优化】
33703 0
48 条高效率的 PHP 优化写法
48 条高效率的 PHP 优化写法
44 0
php + nginx 网站并发压力测试及优化
测试工具: Apache 压力测试工具ab ab是针对apache的性能测试工具,可以只安装ab工具。 ubuntu安装ab
209 0
【PHP秒杀系统】第五篇 优化秒杀的步骤
【PHP秒杀系统】第五篇 优化秒杀的步骤
68 0
Hack on HHVM —— Facebook是如何优化PHP的
Facebook周四正式发布了Hack编程语言,将静态类型以及一些现代的语言特性引入了PHP。这是Facebook对PHP优化之路上的新里程碑
171 0
极限优化:php巧用tcp长连接
本期将和大家分享一个大并发下php使用tcp长连接访问后端的优化方法。
1125 0
php使用tcp长连接的一种优化思路
如果站点架构满足以下几点,那么本文的优化方案会非常适合:
755 0
Nginx PHP配置与优化(学习笔记二十二)
这篇是Nginx安装配置PHP(FastCGI)环境的教程。Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
1088 0
+关注
mydcool
php相关专家
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PHP 2017.北京 全球开发者大会——高可用的PHP
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多