参考文献: https://www.imooc.com/learn/205
php 语言级性能优化
1、优点化:少写代码,多用php自身能力
性能问题:自写代码冗余较多,可读性不佳,并且性能低
为什么性能低???
php代码需要编译解析为底层语言,这一次过程每次请求都会处理一遍,开销大
好的方法:
多使用php内置变量、常量、函数
2、优化点:PHP内置函数的性能优劣
情况描述: PHP内置函数,之间依然存在快慢差异
好的建议:多去了解PHP内置函数的时间复杂度
举例
isset($arr[i]) // 耗时大概50ms
array_key_exists($i,$arr) // 耗时大概85ms
3、优化点:尽可能少用魔法函数
情况描述:PHP提供的魔法函数,性能不佳
为什么性能极低???
为了个PHP程序员省事,PHP语言为你做了很多
好的方法:尽可能规避使用PHP魔法函数
4、优化点:产生额外开销的错误抑制符 @
情况描述:
PHP提供的错误抑制符只是为了方便"懒人"
@的实际逻辑:
在代码开始前、结束后,增加Opcode,忽略报错
php -dvld.active=1 -dvld.execute=0 test.ph
好的建议:尽量不要使用 @错误抑制符
5、优化点:合理使用内存
情况描述:PHP有内存回收机制保底,但也请小心使用内存
好的建议:利用unset()及时是否不使用的内存(注:unset会出现注销不掉的情况)
拓展
unset() 销毁指定的变量。
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值
如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。
6、优化点:尽量少的使用正则表达式
情况描述:正则表达式的回溯开销较大
好的建议:利用字符串处理函数,实现相同逻辑
7、优化点:避免在循环内做运算
情况描述:循环内的计算式将会被重复计算
代码示例
$str = 'hello world';
for($i=0;$i
...code...
}
8、优化点:减少计算密集型业务
情况描述:PHP不适合密集型运算的场景
为什么??
PHP语言特性决定了PHP不适合做大户数据量运算
PHP适用场景:适合衔接Webserver与后端服务、UI呈现
9、优化点:务必使用带引号字符串做键值
情况描述: PHP会将没有引号的键值当作常量,产生查找常量的开销
好的建议:严格使用引号作为键值
学习笔记,仅供参考!如有侵权,请联系删除