PHP 性能优化一
PHP性能优化?对于这个问题,我们首先要知道影响PHP的性能的原因是什么?
1.什么情况下会出现PHP性能问题?
1)PHP语法使用 不当(包括某些业务可以使用PHP本身自带的函数来处理)
2)使用PHP语言做了它不擅长的事情
3)用PHP连接数据库或者服务武器不当
4)PHP自身的短板
2.PHP性能问题简介之PHP的性能问题的解决方向
从困难由浅入深可分为
1:PHP语言级的性能优化
2:PHP周边问题的优化(比如说MYSQL Nginx/Apache)
3:PHP语言资深分析,优化(PS主要指的是底层的C代码)
PHP的执行过程参看http://blog.csdn.net/risingsun001/article/details/22888861
下面针对php语言级的性能优化做实例讨论,对标题里面说的内容进行一个测试,接下来要书写两个文件 bad.php, goods.php
我们要测试的是合并两个数组的操作
bad.php
思路:
先将数组1逐个加入到目标数组中;
之后,遍历数组2,对比数组2的元素是否在数组1中出现,如果没有则插入到目标数组,否则忽略
<span style="font-size:14px;"><?php
//准备两个内容随机的数组
$arr1 = $arr2 = $arr_merged = array();
//接下来随机给两个数组赋值
for ( $i=; $i<rand(,); $i++) {
$arr1[] = rand();
} for ( $i=; $i<rand(,); $i++) {
$arr2[] = rand();
} //开始循环比较
foreach ( $arr1 as $v ) {
$arr_merged[] = $v;
} foreach ( $arr2 as $v ) {
if(!in_array($v, $arr_merged)){
$arr_merged[] = $v;
}
} var_dump($arr_merged);</span>
goods.php
思路:
随机生成两个数组,在打乱顺序
之后,使用array_merge 合并
<span style="font-size:14px;"><?php
//准备两个内容随机的数组
$arr1 = $arr2 = range(, );
$arr_merged = array();
//接下来随机给两个数组赋值
shuffle($arr1);
shuffle($arr2); $arr_merged = array_merge($arr1, $arr2); var_dump($arr_merged);
</span>
该程序的性能测试比较如下:http://blog.csdn.net/wjc19911118/article/details/41735659
3. 总结
优化点:少写代码,多用PHP自身提供的能力
性能问题:自己写的代码冗余较多,可读性不好,并且性能低
为什么性能低?php代码需要编译解析为底层语言, 这一过程每次请求都会 处理一遍,开销大。
好方法:多使用php内置变量,常量, 函数(spl 可以带给您好像好用的功能)
最新文章
- 冗余代码都走开——前端模块打包利器 Rollup.js 入门
- 理解AX InventTrans的几种状态
- wap端开发必须基础
- ASP.NET、C#调用外部可执行exe文件--多种方案
- O_NONBLOCK on regular file
- 深入理解DIP、IoC、DI以及IoC容器(转)
- html5shiv.js-让IE浏览器支持HTML5标准
- PHP抓取豆瓣读书爬虫代码
- linux日志审计项目案例实战(生产环境日志审计项目解决方案)
- Oracle EBS-SQL (WIP-6):检查任务已完成但状态是发放的任务.sql
- c# mouseenter mousemove区别?
- hdu 5954 -- Do not pour out(积分+二分)
- 快速增加controller节点
- Java I/O---添加属性和有用的接口—FilterlnputStream&;FilterOutputStream
- SpringMVC格式转化错误之HTTP Status [400] – [Bad Request]
- Lua学习链接
- springboot2.0 springcloud 断路器仪表盘支持
- 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)
- Qt__CMakeLists.txt
- linux清空历史记录
热门文章
- faster-rcnn训练自己的数据集参考文章
- 最长的相同节点值路径 &#183; Longest Univalue Path
- qmake not exec in ubuntu
- Mysql中自定义函数编程
- vscode安装dlv插件报错:There is no tracking information for the current branch.
- spring.net 继承
- TF Boys (TensorFlow Boys ) 养成记(四):TensorFlow 简易 CIFAR10 分类网络
- input框添加阴影效果
- IIS请求筛选模块被配置为拒绝包含双重转义序列的请求404.11
- java 泛型详解(转)