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倾斜LNMP 机能优化之 PHP 机能优化 Docker

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 单机做事器处理。