大家须知简单的php性能优化注意点


Posted in PHP onJanuary 04, 2016

什么情况,可能遇到性能问题:

1.php语法使用的不恰当
2.使用php语言做了它不擅长做的事
3.用php语言连接的服务不给力
4.php自身的短板
5.我也不知道的问题

一般情况:php性能问题不超过二分之一(一般30%~40%)

php性能问题解决方向:

php语言级的性能优化—>php周边问题的性能优化(连接的服务,网络环境)—>php语言自身分析和优化

(php语言级)

优化点:少写代码,多用php自身能力

问题:自写代码冗余较多,可读性不佳,导致性能低
为什么低:php代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大
方法:多使用php内置变量、常量、函数

优化点:php内置函数的性能优劣

情况描述:php内置函数,之间依然存在快慢差异
建议:多去了解php内置函数的时间复杂度

优化点:尽可能少用魔法函数

情况描述:php提供的魔法函数,性能不佳
为什么性能低:为了为php程序员省事,php语言为你做了很多
好的方法:尽可能规避使用php魔法函数

优化点:产生额外开销的错误抑制符@

实际逻辑:在代码开始前,设置报错级别最高,结束后,再回复设置报错级别。增加Opcode,忽略报错

优化点:合理使用内存

情况描述:php有内存回收机制保底,但也请小心使用内存
建议:利用unset()及时释放不适用的内存(注:unset()出现注销不掉的情况)

优化点:尽量少的使用正则表达式

情况描述:正在表达式的回溯开销较大,“没有金刚钻别揽陶瓷活”
建议:利用字符串处理函数,实现相同逻辑

优化点:避免在循环内做运算

情况描述:循环内的计算式将会被重复计算

<?php
$str="hello world";
 阿
//strlen($str)放在外面
for($i=0;$i<strlen($str);$i++){
 //do something
}
?>

优化点:减少计算密集型业务

情况描述:php不适合密集型运算的场景

为什么?php语言特性决定了php不适合做大数据量运算
php适合场景:适合衔接Webserver与后端服务、UI呈现

优化点:务必使用带引号字符串做键值

情况描述:php会将没有引号的键值当作常量,产生查找常量的开销
建议:严格使用引号作为键值

--------------------------------------------

(php周边问题的性能优化)-

运行环境,文件储存,数据库,缓存,网络

减少文件类操作

常见php场景的开销次序:
读写磁盘、读写数据库、读写内存、读写网络数据
读写内存<<读写数据库<读写磁盘<读写网络数据

优化网络请求

网络请求的坑:

1.对方接口的不确定因素

2.网络稳定性

如何优化网络请求?

1、设置超时时间

   a)连接超时  200ms
   b)读超时    800ms
   c)写超时    500ms

2、将串行请求并行化

   a)使用curl_multi_*()
   b)使用swoole扩展

压缩php接口输出

缓存重复计算内容

  什么情况下做输出内容的缓存?

多次请求,内容不变情况

重叠时间窗口思想

旁路方案

分析php自身分析和优化:

用工具测试

PHP性能瓶颈解决方法:
Opcode cache(代码编译的最后一个环节进行缓存)PHP扩展APC做Opcode缓存用的

补充压力测试软件使用说明:

Ab -h

apache Benchmark(ab)由Apache提供的压力测试软件,安装apache服务器时会自带该压测软件

使用:./ab  -n1000     -c100      http://www.baidu.com/

            -n请求数   -c并发数   url目标压测地址

以上内容给大家介绍了简单的php性能优化注意点,希望本文分享能够帮助到大家。

PHP 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
PHP实现的增强性mhash函数
May 27 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
weiphp微信公众平台授权设置
Jan 04 #PHP
PHP在线书签系统分享
Jan 04 #PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 #PHP
非常重要的php正则表达式详解
Jan 04 #PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 #PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 #PHP
PHP 读取文本文件内容并分页显示
Jan 02 #PHP
You might like
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
详解php协程知识点
2018/09/21 PHP
php实例化一个类的具体方法
2019/09/19 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
详解Django通用视图中的函数包装
2015/07/21 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Unix里面如何在后台运行程序
2016/10/14 面试题
PHP控制循环操作的时间
2021/04/01 PHP
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
在js中修改html body的样式
2021/11/11 Javascript