大家须知简单的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 相关文章推荐
改进的IP计数器
Oct 09 PHP
smarty实例教程
Nov 19 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
浅析php原型模式
Nov 25 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
10款实用的PHP开源工具
Oct 23 PHP
php简单实现批量上传图片的方法
May 09 PHP
PDO::setAttribute讲解
Jan 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
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python opencv进行图像拼接
2020/03/27 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
追悼会上的答谢词
2014/01/10 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
大学四年个人自我小结
2014/03/05 职场文书
生活小常识广播稿
2014/09/16 职场文书
团结友爱主题班会
2015/08/13 职场文书
初中体育课教学反思
2016/02/16 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers