LNMP 性能优化之 PHP 性能优化

摘要:
PHP是一种弱类型的动态语言。虽然它易于使用和快速开发,但也会导致一些新手编写非标准代码。例如,连接到数据库以递归方式读取数据;一次从文件中读取大量数据,但在处理后不要主动释放内存;遍历和循环中变量的重复计算;如果数组的键没有被引用,将首先搜索常量集,这将降低PHP程序的性能。PHP作为一种Web后端脚本语言,其优势在于它可以快速实现WebApplication所需的功能,并且易于部署。缺点是与强势阶层相比

PHP 做一门弱类型动态语言,在上手容易和开发快速同时,也会导致一些新手写出不规范的代码。比如在递归当中连接数据库读取数据;一次性从文件中读取大量的数据,处理完后却不主动释放内存;在遍历和循环中重复计算某个变量等等;数组的键没有加引号导致先查找常量集,都会导致 PHP 程序性能下降。

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() 实现同一功能

<?phpfor ($i = 0; $i <1000; $i++) {$array1[$i] = $i+1000;}range(1000,1999);

以 foreach、in_array 和 array_merge 实现同一功能对比说明:

LNMP 性能优化之 PHP 性能优化第1张

以 foreach 和 array_column() 实现同一功能对比说明:

LNMP 性能优化之 PHP 性能优化第2张

以 foreach 和 array_filter() 实现同一功能对比说明:

LNMP 性能优化之 PHP 性能优化第3张

从服务器方面进行优化,可以选择将服务器不安装其他后端服务软件,仅仅安装 PHP 以及其必要扩展。使单机的性能全部向 PHP 倾斜。同时也对 PHP 的相关参数进行优化,将 PHP 单机服务器性能最大化。在大数据、高并发的场景下,可以尝试将 PHP 服务器集群化,通过负载均衡,将网络请求分配至不同的 PHP 单机服务器处理。

免责声明:文章转载自《LNMP 性能优化之 PHP 性能优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse 一直不停 building workspace完美解决总结C# SignalR 即时通讯 聊天室下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

apache httpd.conf配置及php.ini配置建议

1)     php.ini配置 扩展配置 (注意观察extention_dir路径是否与物理路径一致) extension=php_gd2.dll 几乎是必开,这个图形处理扩展被广泛地应用在上传头像处理、在线照片处理、验证码等等地方。 extension=php_mbstring.dll 几乎也是必开,没有他,多字节字符串(如中文)截取将会变得异常的复杂...

Windows+Python+Selenium基础篇之1-环境搭建

1.所需工具包1.1Selenium for python1.2  Python  1.3  Notepad++或python IDE2.  环境搭建2.1  下载和安装Pythonpython2.7.17    下载地址:https://www.python.org/downloads/  安装时需要特别注意选上pip和Add python.exe tp...

laravel框架使用生涯

手工安装laravel http://laravelacademy.org/resources-download 1、将下载的文件复制到虚拟主机目录 2、在Apache的配置文件配置一个虚拟主机【注意,需要指向 public目录下】 <VirtualHost *:80> DocumentRoot "C:phpStudyWWWlarav...

(转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)

 JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)         函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用。         函数节流的原理挺简单的,估计大家都想到了,那就是定时器。当我触发一个时间时,先setTimo...

LaravelS

LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能、更多可能性。Github 特性 内置Http/WebSocket服务器 多端口混合协议 协程 自定义进程 常驻内存 异步的事件监听 异步的任务队列 毫秒级定时任务 平滑Reload 修改代码后自动Reload 同时支持Lar...

Gradle 升级的一些坑

Android gradle plugin 从2.2.3更替为3.6.0 Gradle 版本从 3.5 更替为 6.4.1 序号 报错 原因 解决 1 Could not get unknown property 'apkVariantData' for object of type com.android…… Gradle 3.0 的 api...