PHP 作为一门 Web 后端脚本措辞,好处是能够快速实现 Web Application 所需功能,而且随意马虎支配。缺陷便是相对付强类型静态措辞如 Java/C/C++ 来说,PHP 的性能较差,在实现打算密集型的业务时没有任何上风。同时也由于 PHP 是同步壅塞的 IO 模型,在高并发要求的场景下随意马虎碰着瓶颈,须要通过 PHP 干系扩展来办理干系技能难题。
PHP 作为一门胶水措辞,势必会连接各种各样做事。常见的做事如:MySQL、Redis、MongoDB 等数据库,C/C++、GO、Java 等措辞编写的后端做事。倘若 PHP 所连接做事不稳定,势必也会对 PHP 造成一定的性能影响。
在某些情形,某个 PHP 程序或某段 PHP 代码莫名其妙地涌现相称耗时的情形,不知道是 PHP 本身涌现了问题,还是所用的框架涌现了问题,亦或是 PHP 周边乃至是硬件的问题。这个时候就须要通过工具进行排查。常用的工具有:PHP-Xhprof、PHP-XDebug。
PHP 的底层是由 C 措辞组成的。每次运行 PHP 的程序,都是须要经由 C 措辞遍写的 Zend 引擎来解析 PHP 文件,将其编译成为 Opcodes 后再去实行。就这样一来一回就花费了不少韶光和硬件性能。
PHP 运行流程
Scanning(Lexing),将 PHP 代码转换为措辞片段(Tokens)。
Parsing,将 Tokens 转换成大略而故意义的表达式(Expression)。
Compilation,将表达式编译成 Opocdes。
Execution,顺次实行 Opcodes,每次一条,从而实现 PHP 脚本的功能。
(.php) -> scanner -> (Tokens) -> Parser -> (Expression) -> Compilation -> (Opcodes) -> Execution -> (Output)
PHP 措辞级性能优化
尽可能地利用内置函数来完成任务
能利用 PHP 内置方法办理的问题,就不要自己手写代码,一是手写代码一样平常冗余较多,可读性不佳。二是手写代码须要解析编译为底层代码再实行,没有 PHP 内置函数的性能高。
for & range() 实现同一功能
<?php
for ($i = 0; $i <1000; $i++) {
$array1[$i] = $i+1000;
}
range(1000,1999);
以 foreach、in_array 和 array_merge 实现同一功能比拟解释:
以 foreach 和 array_column() 实现同一功能比拟解释:
以 foreach 和 array_filter() 实现同一功能比拟解释:
从做事器方面进行优化,可以选择将做事器不安装其他后端做事软件,仅仅安装 PHP 以及其必要扩展。使单机的性能全部向 PHP 倾斜。同时也对 PHP 的干系参数进行优化,将 PHP 单机做事器性能最大化。在大数据、高并发的场景下,可以考试测验将 PHP 做事器集群化,通过负载均衡,将网络要求分配至不同的 PHP 单机做事器处理。