PHP 应用性能优化方案

来源:互联网 发布:收银软件dianqukeji 编辑:程序博客网 时间:2024/05/16 14:40

        程序员都喜欢最新的PHP 7,因为它使PHP成为执行最快的脚本语言之一(参考PHP 7 vs HHVM 比较)。但是保持最佳性能不仅需要快速执行代码,更需要我们知道影响性能的问题点,以及这些问题的解决方案。本篇博文就是介绍保障PHP应用平稳高速运行的知识点,大量干货来袭,建议收藏。

1、PHP代码优化最佳实践

        编写好的PHP代码是创建快速稳定Web应用的关键一步。从一开始就遵循一些最佳实践技巧将节省后期填坑的时间。

1) 尽可能的使用PHP的内置方法

        只要可以尽可能的使用PHP的内置方法,而不是自己编写相同功能的方法。花点时间去熟悉和学习PHP的内置方法,不但可以帮助你更快的编写代码,而且可以使你编写的代码更高效的运行。

2) 使用Json替代xml

        json_encode()和json_decode() 等PHP的内置方法,运行速度都非常快,所有应该优先使用Json。如果你无法避免使用xml,那么请务必使用正则表达式而不是DOM操作来进行解析。

3) 使用缓存技术

        Memcache特别适用于减少数据库负载,而像APC或OPcache这样的字节码缓存引擎在脚本编译时可节省执行时间。

4) 减少不必要的计算

        当一个变量会被多次使用时,一开始就计算好,肯定要比每次使用时都计算一遍要更高效。

5) 使用isset()和empty()

        与count()、strlen()和sizeof()函数相比,isset()和empty()对于检测一个变量是否为空等场景更加简单和高效。

6) 减少不必要的类

        如果你不打算重复使用一个类或者方法,那么它就没什么存在的价值。而如果你必须要定义和使用一个类,则需要合理规划类中的方法,对于不是特别公用的方法,尽量将他们放到子类中去,因为调用子类中的方法,比调用父类方法速度更快。

7) 在生产环境关闭用作调试的相关代码及错误报告

       开发时打开错误报告,可以让你避免很多潜藏的Bug,而一些调试代码也有助于你定位Bug,但是当代码部署到生产环境后,这些错误报告和调试代码会拖慢你的程序速度,而且将一些错误报告直接显示给用户,也具有相当的安全风险。因此,在生产环境请关闭它们。

8) 关闭数据库连接

        当使用完毕后,注销变量和关闭数据库连接,可以释放珍贵的内存资源。

9) 使用聚合函数减少数据库查询

        查询数据库时,使用聚合函数,可以减少检索数据库的频率,并且使程序运行的更快。

10) 使用强大的字符串操作函数

         举个例子,str_replace()比preg_replace()要快,而strtr()函数则比str_replace()函数快四倍。

11) 尽量使用单引号

         如果可能,尽量使用单引号替代双引号。程序运行时,会检查双引号中的变量,这会拖慢程序的性能。

12) 尝试使用恒等运算符

         由于“===”仅检查闭合范围,因此比使用“==”进行比较速度更快。

2、PHP代码之外的性能瓶颈因素

         优化代码当然能够提高PHP的性能。但是,还有一些代码之外的因素也会成为PHP的性能瓶颈。这就是为什么程序员需要了解代码部署的整个服务器环境,这有助于他们在编写代码时有一定的心理准备,并能够在性能出现问题时,快速识别和定位性能瓶颈。以下是你遇到性能瓶颈时需要检查的点。

1) 网络带宽

       如果网络带宽不够,其传输的总数据量将会受到严重影响,使其成为最明显的性能瓶颈。

2) CPU

        如果只是传输一些纯静态的HTML,则不需要消耗很多CPU资源,但是PHP毕竟创建的是动态的应用程序,根据应用的需要,你可能至少需要一台具备多核处理器的服务器来提升PHP代码的运行效率。

3) 共享内存

        缺少共享内存可能会影响进程间通信,从而影响程序性能。

4) 文件系统

        随着时间推移,你的文件系统可能会出现大量磁盘碎片。如果内存足够,利用内存作为文件缓存可以加快磁盘的访问速度。

5) 进程管理

        检查服务器的进程,确保里面没有非必要的进程。移除哪些不需要的网络协议、病毒扫描软件、邮件服务以及硬件驱动。将PHP代码运行在多线程模式,也能提高程序的响应时间。

6) 相关的其它服务

       如果你的应用程序还依赖于一些外部服务,那这些外部服务的性能瓶颈也有可能拖慢你的应用。虽然这种情况下你能做的事情不多,但你仍然可以通过你这一边的操作来减轻外部服务性能瓶颈对你的影响,例如切换到备用服务上等。

本篇博文暂时总结这么多,欢迎大家相互交流学习。