南京高新区建设规划局网站,网站改版提交给百度,黄山自驾游最佳攻略,高端网站设计有哪些程序员都喜欢最新的PHP 7#xff0c;因为它使PHP成为执行最快的脚本语言之一#xff08;参考PHP 7 vs HHVM 比较#xff09;。但是保持最佳性能不仅需要快速执行代码#xff0c;更需要我们知道影响性能的问题点#xff0c;以及这些问题的解决方案。本文涵盖了保障PHP应用平…程序员都喜欢最新的PHP 7因为它使PHP成为执行最快的脚本语言之一参考PHP 7 vs HHVM 比较。但是保持最佳性能不仅需要快速执行代码更需要我们知道影响性能的问题点以及这些问题的解决方案。本文涵盖了保障PHP应用平稳高速运行的所有知识点大量干货来袭强烈建议收藏。 PHP简史 PHP是由拉斯姆斯·勒多夫于1995年开始开发的。起初它只是勒多夫为了要维护个人网页而用c语言开发的一些CGI工具程序集我们从PHP这个缩写最初的来源“Personal Home Page”个人主页就可以看出这一点。然而随着勒多夫不断地扩充它的功能PHP逐渐成为了现在的“PHP超文本预处理器”。 在过去的20年中PHP的开发团队一直致力于提升PHP的性能最引人瞩目的是于1999年引入的Zend语法解释器引擎。2000年发布的PHP 4包含了一个內建的编译器和执行器模型使得PHP开始有能力开发动态的Web应用。2015年PHP发布了里程碑式的版本PHP 7.0极大的提升了Zend引擎的性能并降低了PHP的整体内存使用率。截止到本文发稿为止目前最新的PHP版本是7.1.4有兴趣的话可以看看这篇文章PHP7 新特性,改变变化。 怎样才算是高性能的PHP应用 性能和速度不是一对同义词。实现最佳性能通常需要在速度、准确性和可扩展性之间进行权衡。例如在开发Web应用时如果你优先考虑速度你可能会编写一个将所有内容都载入内存的脚本而如果从可扩展性出发可能你就会编写以块为单位将数据载入内存的脚本。 基于phpLens的研究下图展示了速度与可扩展性之间理论上的权衡关系。 红线表示针对速度进行了优化的脚本蓝线是可扩展性优先的脚本。当并发连接数低时红线运行速度更快 然而随着并发连接数量的增加红线变慢。当并发连接数上升时蓝线也减慢然而下降并不那么剧烈因此在一定阈值后速度优先的脚本会比可扩展性优先的脚本慢。然而在现实当中一些脚本可能随着运行环境的变化而表现出前后不同的性能差异。你需要仔细的观察用户的使用情况以及应用的并发请求数量来适时调整合适的优化策略。 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. 尝试使用恒等运算符 由于“”仅检查闭合范围因此比使用“”进行比较速度更快。 PHP代码之外的性能瓶颈因素 优化代码当然能够提高PHP的性能。但是还有一些代码之外的因素也会成为PHP的性能瓶颈。这就是为什么程序员需要了解代码部署的整个服务器环境这有助于他们在编写代码时有一定的心理准备并能够在性能出现问题时快速识别和定位性能瓶颈。以下是你遇到性能瓶颈时需要检查的点。 1. 网络带宽 如果网络带宽不够其传输的总数据量将会受到严重影响使其成为最明显的性能瓶颈。 2. CPU 如果只是传输一些纯静态的HTML则不需要消耗很多CPU资源但是PHP毕竟创建的是动态的应用程序根据应用的需要你可能至少需要一台具备多核处理器的服务器来提升PHP代码的运行效率。 3. 共享内存 缺少共享内存可能会影响进程间通信从而影响程序性能。 4. 文件系统 随着时间推移你的文件系统可能会出现大量磁盘碎片。如果内存足够利用内存作为文件缓存可以加快磁盘的访问速度。 5. 进程管理 检查服务器的进程确保里面没有非必要的进程。移除哪些不需要的网络协议、病毒扫描软件、邮件服务以及硬件驱动。将PHP代码运行在多线程模式也能提高程序的响应时间。 6. 相关的其它服务 如果你的应用程序还依赖于一些外部服务那这些外部服务的性能瓶颈也有可能拖慢你的应用。虽然这种情况下你能做的事情不多但你仍然可以通过你这一边的操作来减轻外部服务性能瓶颈对你的影响例如切换到备用服务上等。 更多PHP性能优化建议 1. 发挥OPCache的优势 由于默认情况下PHP代码在执行时都会重新编译为可执行的中间代码OPCode因此可以及时看到修改的代码所带来的变化而不必频繁的重启PHP服务。不幸的是如果每次在你的网站上运行时都重新编译相同的代码会严重影响服务器的性能这就是为什么opcode缓存或OPCache 非常有用。 OPCache是一个将编译好的代码保存到内存中的扩展。因此下一次代码执行时PHP将检查时间戳和文件大小以确定源文件是否已更改。如果没有则直接运行缓存的代码。 下图显示了运行无缓存的PHP应用程序OPcache和eAccelerator另一个PHP缓存工具三者的执行时间和内存使用情况的差异。 图片来源: Prestashop 2. 识别数据库响应延迟 如上所述性能问题并不总是由代码引起的。大多数瓶颈都出现在应用程序必须访问资源的时候。由于PHP应用程序的数据访问层可能占用最高90%的执行时间因此你应该采取的第一步是查看代码中访问数据库的所有实例。 确保打开SQL的慢日志以帮助你识别和处理慢SQL然后评估这些查询的执行效率。如果你发现查询过多或者在单次执行过程中发现相同的查询被多次进行你可以通过减少数据库访问时间进行调整从而提高应用程序的性能。 3. 清理文件系统 清理文件系统并确保没有使用文件系统来存储Session。最重要的是请注意file_exists()filesize()或filetime()等触发文件统计信息的代码。将任何这些功能置于循环中可能会导致性能问题。 4. 监控外部API接口 大部分对外部系统有依赖关系的应用都会调用远程API。虽然这些远程API接口你无法直接控制但你仍可以采取一些措施来减轻源自远程API的性能问题。例如你可以缓存API输出的数据或者可以在后台调用这些API。为API请求设置合理的超时时间并且如果可能的话随时做好API没有响应的情况下的显示输出。 5. 使用工具评估检测你的PHP代码 使用OPcache和监控外部API接口应该足以使大多数应用程序运行顺利但是如果你发现系统负载不断增加那么可能需要使用工具来对你的PHP代码进行检测评估。完整的PHP代码检测评估虽然可能很耗时但它可以为你提供有关应用程序性能的深入信息。幸运的是有几个开源程序可以用于分析你的PHP代码如Xdebug。 监控PHP性能的重要性 如果你没有做好准备你的Web应用可能前一分钟还在正常运行但是下一分钟一波突然激增的流量就会导致你的应用程序崩溃。 当然优化和重构总是需要时间、精力和资金而且投入是否值得的也很难说。因此做出明智决策的最佳方式是不断收集数据。 PHP性能监控软件可以帮助你立即测量所做的任何更改的影响。当然知道要监测什么同样重要。速度和内存使用被认为是性能的最佳指标因为它们影响到页面加载时间这对Web应用程序至关重要。 虽然数据收集很重要但是当你不需要监控系统时你应该关闭监控系统因为大量日志同样也会对性能造成影响。当然这样的日志可以提供有关如何提高性能的有用信息因此你应该在高峰期间定期监控。 未来的PHP性能 PHP仍在不断进化中在目前正在开发的PHP 8版本中最新的功能是即时编译或JIT它将可以为我们创建更快的Web应用。随着技术的不断进步用户的期望也随之增加。因此开发人员必须始终关注未来的变化。 在构建Web应用程序时请记住今年的工作可能在明年不起作用。你可能需要进行调整才能持续保持优秀的PHP性能。在开发过程中应该持续重点关注如何构建适用于高并发场景的Web应用和网站保证它们的高可用性。 参考文章 Using a PHP CDN SetupHow to Install Nginx PHP转载于:https://www.cnblogs.com/dasn/articles/6857673.html