php优化

使用ab压力测试 or time php filename.php(查看user对应的时间)

 

少写代码, 多用PHP自身能力

性能问题:

自写代码冗余较多,可读性不佳,并且性能低

为什么性能低?

PHP代码需要编译解析为底层语言,这一过程每次请求都会处理一遍,开销大。

好的方法:

多使用PHP内置变量、常量以及函数

 

PHP代码运行流程

要先扫描行数,然后交给zend引擎去理解代码再去产出Opcodes执行后输出

使用内置函数首先行数会少很多,内置的PHP函数就是zend的一些方法,所以zend在理解的时候速度也会快很多,函数少了产出的opcodes就会少,执行起来也会更快

现在很多php缓存都是缓存opcodes这样的话就节省了扫描和zend理解的步骤

 

PHP内置函数的性能优劣

情况描述:PHP内置函数之间依然存在快慢差异

好的建议:多去了解PHP内置函数的时间复杂度

举例:isset() 与array_key_exists()方法间的性能差异

 

尽可能少用魔法函数

情况描述:PHP提供的魔法函数性能不佳

为什么性能低:为了给PHP程序员省事,PHP语言为你做了很多

好的方法:尽可能规避使用PHP魔术函数

 

产生额外开销的错误抑制符@

情况描述:PHP提供的错误抑制符只是为了方便“懒人”

@的实际逻辑:在代码开始前、结束后增加Opcodes,忽略报错

可以用vld的扩展查看Opcodes

php -dvld.active=1 -dvld.execute=0 filname.php ---这句话表示我要查看Opcodes但是不执行

 

合理使用内存

情况描述:PHP有内存回收机制保底,但也请小心使用内存

好的建议:利用unset()及时释放不适用的内存(注:unset()出现注销不掉的情况“引用地址或长度小于256的时候待测试”)

memory_get_usage()这个函数可以参看内存使用情况

 

尽量少的使用正则表达式

情况描述:正则表达式的回溯开销较大,“没有金刚钻别揽瓷器活”

好的建议:利用字符串处理函数,实现相同的逻辑

 

避免在循环内做运算

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

代码示例:for ($i=0; $i<strlen($str); $i++){}虽然strlen()很高效但是计算多次仍然会增加很多开销

好的建议:可以$strlen = strlen($str); 把$strlen放在原来strlen()的位置

 

减少计算密集型业务

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

为什么: PHP语言特性决定了PHP不合适做大数据量运算,PHP是由C写的,在处理任何数据的时候都需要转换成C,所以效率不如C

PHP适合的场景:适合衔接webserver与后端服务、UI呈现

 

务必使用带引号字符串做键值

情况描述:PHP会将没有引号的键值当成常量,先去查常量,找不着的时候才去差数组的键,产生查找常量的开销

 

PHP周边问题的性能优化

PHP周边都有什么:服务器环境、磁盘、数据库、内存、网络

PHP周边对PHP程序的影响分析:

PHP脚本运行时间 ≈ 网络 + 数据库

比如现在PHP文件的运行时间为50ms,网络为150ms,数据库为500ms

那么我们就要抓大头先优化数据库再找网络最后优化PHP文件

 

减少文件类的操作

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

读写内存 << 读写数据库 < 读写磁盘 < 读写网络数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值