零、序言

PHP 社区几十年来面临一个巨大的问题:性能。不管他们拥有多么强大的硬件,最终,PHP 本身就是一个瓶颈。使用 PHP5.4.x、5.5.x 和 5.6.x,PHP 的性能开始提高,但在高负载应用中仍然是一个巨大的问题。社区开发了Alternative PHP CacheAPC)和 Zend OpCache 等缓存工具,对操作码进行高性能缓存,这些工具对性能有很好的影响。

为了解决 PHP 的性能问题,Facebook 构建了自己的开源工具HHVMHipHop 虚拟机)。根据他们的官方网站,HHVM 使用实时(JIT)编译来实现优异的性能,同时保持 PHP 提供的开发灵活性。与 PHP 相比,HHVM 具有出色的性能,在生产中广泛用于 Magento 等大型应用。

PHP 使用PHP 下一代PHPNG)与 HHVM 开战。PHPNG 的全部目的是提高性能,重点是重写和优化 Zend 引擎内存分配和 PHP 数据类型。世界各地的人们开始对 PHPNG 和 HHVM 进行基准测试,根据他们的说法,PHPNG 的表现优于 HHVM。

最后,PHPNG 与 PHP 的主分支合并,经过大量的优化和完全重写,PHP7 发布了,性能有了巨大的提高。PHP7 仍然不是 JIT,但它的性能非常好,与 HHVM 类似。这是较旧版本 PHP 的一个巨大性能提升。

这本书涵盖的内容

第一章环境设置介绍了如何设置不同的开发环境,包括在 Windows、不同 Linux 发行版上安装 NGINX、PHP7、Percona 服务器,以及为开发目的设置流浪虚拟机。

第 2 章PHP7中的新特性,涵盖了 PHP7 中引入的主要新特性,包括类型提示、组使用声明、匿名类和新运算符,如 Spaceship 运算符、Null 合并运算符和统一变量语法。

第 3 章提高 PHP7 应用性能介绍了提高和扩展 PHP7 应用性能的不同技术。在本章中,我们将介绍 NGINX 和 Apache、CDN 和 CSS/JavaScript 的优化,例如合并和缩小它们、整页缓存以及安装和配置 Varnish。最后,我们讨论了一个理想的应用开发基础设施设置。

第 4 章提高数据库性能介绍了优化 MySQL 和 Percona 服务器配置以获得高性能的技术。此外,它还涵盖了监视数据库性能的不同工具。它还包括用于缓存对象的 Memcached 和 Redis。

第 5 章调试和评测介绍了调试和评测技术,包括使用 Xdebug 进行调试和评测、使用 Sublime Text 3 和 Eclipse 进行调试以及 PHP 调试栏。

第 6 章压力/负载测试 PHP 应用介绍了对应用进行压力和负载测试的不同工具。它涵盖 ApacheJMeter、ApacheBench 和负载测试。本文还介绍了如何在 PHP7 和 PHP5.6 上加载测试不同的开源系统,如 Magento、Drupal 和 WordPress,并比较了它们在 PHP7 和 PHP5.6 上的性能。

第 7 章PHP 编程的最佳实践介绍了一些生成质量标准代码的最佳实践。它涵盖了编码风格、设计模式、面向服务的体系结构、测试驱动开发、Git 和部署。

附录 A简化生活的工具更详细地讨论了其中三种工具。我们将讨论的工具是 Composer、Git 和 Grunt watch。

附录 BMVC 和框架涵盖了 MVC 设计模式和 PHP 开发中使用的最流行的框架,包括 Laravel、Lumen 和 Apigility。

这本书你需要什么

任何符合以下软件最新版本的硬件规范都应足以阅读本书:

  • 操作系统:Debian 或 Ubuntu
  • 软件:NGINX、php7、MySQL、PerconaDB、Redis、Memcached、Xdebug、apachejmeter、ApacheBench、seave 和 Git

这本书是给谁的

这本书是为那些有 PHP 编程基本经验的人准备的。如果您正在开发性能关键型应用,那么这本书适合您。

公约

在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“我们可以通过使用include指令来包含其他上下文。”

代码块设置如下:

location ~ \.php$ {
  fastcgi_pass    127.0.0.1:9000;
  fastcgi_param    SCRIPT_FILENAME complete_path_webroot_folder$fastcgi_script_name;
  include    fastcgi_params;
}

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

server {
  …
  …
 root html;
 index index.php index.html index.htm;
  …

任何命令行输入或输出的编写方式如下:

php-cgi –b 127.0.0.1:9000

新术语重要词语以粗体显示。您在屏幕上看到的文字(例如,在菜单或对话框中)显示在文本中,如下所示:“单击下一个按钮将移动到下一个屏幕。”

警告或重要注释显示在这样的框中。

提示

提示和技巧如下所示。

读者反馈

我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。

要向我们发送总体反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在邮件主题中提及该书的标题。

如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors

客户支持

既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您的帐户下载本书的示例代码文件 http://www.packtpub.com 。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。

您可以通过以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的支架选项卡上。
  3. 点击代码下载&勘误表
  4. 搜索框中输入图书名称。
  5. 选择要下载代码文件的书籍。
  6. 从您购买本书的下拉菜单中选择。
  7. 点击代码下载

您也可以通过点击 Packt 出版网站上该书网页上的代码文件按钮下载代码文件。在搜索框中输入图书名称即可访问此页面。请注意,您需要登录到您的 Packt 帐户。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

下载本书彩色图片

我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。彩色图像将帮助您更好地了解输出中的更改。您可以从下载此文件 https://www.packtpub.com/sites/default/files/downloads/LearningPHP7HighPerformance_ColorImages.pdf

勘误表

虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。

盗版

在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。

请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>与我们联系,并提供可疑盗版材料的链接。

我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>与我们联系,我们将尽力解决该问题。