大家须知简单的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 相关文章推荐
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
PHP面向对象概念
Nov 06 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
PHP整合PayPal支付
Jun 11 PHP
php实现的简单检验登陆类
Jun 18 PHP
学习php设计模式 php实现策略模式(strategy)
Dec 07 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
java解析json方法总结
May 16 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
什么是短波收听SWL
2021/03/01 无线电
几种显示数据的方法的比较
2006/10/09 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP培训要多少钱
2017/06/06 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
python清除字符串里非字母字符的方法
2015/07/02 Python
python通过zabbix api获取主机
2018/09/17 Python
微信小程序python用户认证的实现
2019/07/29 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python 模块导入问题汇总
2021/02/01 Python
html如何对span设置宽度
2019/10/30 HTML / CSS
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
前台文员岗位职责
2013/12/28 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
留学生求职信
2014/06/03 职场文书
学习张林森心得体会
2014/09/10 职场文书
苏州园林导游词
2015/02/03 职场文书
出生证明格式
2015/06/15 职场文书
首次购房证明
2015/06/19 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
vue选项卡切换的实现案例
2022/04/11 Vue.js
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle