零、前言

更快的 Web 可以定义为在 Web 技术的所有领域中开发的一系列特性,以加速客户端和服务器之间的任何事务。它还包括 UI 设计背后的原则,这些原则会影响用户对速度的感知。因此,理解更快的网络需要理解性能、效率和感知性能的概念,并发现构成当今互联网的大多数新的底层网络技术。

这本书是给谁的

希望更好地理解更快的 web 的任何 web 开发人员、系统管理员或 web 爱好者。具备码头集装箱技术基础知识者优先。

这本书涵盖的内容

第 1 章更快的 Web–入门,通过尝试更好地理解什么是更快的 Web,定义了什么是更快的 Web,并开始了解如何衡量性能,确定网站或 Web 应用程序是否是更快的 Web 的一部分。

第 2 章连续评测和监控旨在帮助读者了解如何安装和配置评测和监控工具,帮助他们在持续集成(CI)和连续部署CD环境中轻松优化 PHP 代码。

第 3 章利用 PHP7 数据结构和函数的强大功能,让读者了解如何通过 PHP7 的大部分关键优化来利用 PHP7 的性能提升。它还帮助他们探索如何更好地理解数据结构和数据类型,以及使用简化的函数如何帮助 PHP 应用程序在其关键执行路径上实现全局性能。此外,本文还介绍了如何最好地避免在 PHP 代码中使用低效的结构(如大多数动态结构),以及如何在优化 PHP 代码时使用一些功能性技术。

第 4 章展望异步 PHP的未来,通过学习生成器和异步非阻塞代码、POSIX 线程pthreads库)的多线程以及ReactPHP库的多任务,概述了如何应对输入输出(I/O)延迟差的问题。

第 5 章度量和优化数据库性能展示了如何度量数据库性能,从简单的度量技术到先进的基准测试工具。

第 6 章高效查询现代 SQL 数据库,介绍如何使用现代 SQL 技术来优化复杂的 SQL 查询。

第 7 章JavaScript 和危险驱动开发介绍了 JavaScript 的一些最好和最坏的部分,特别是与代码效率和总体性能有关的部分,以及开发人员应该如何始终编写安全、可靠和高效的 JavaScript 代码,主要是通过避免“危险驱动的发展”。

第 8 章函数式 JavaScript通过快速查看有助于提高 JavaScript 应用程序性能的即将推出的语言功能,展示了 JavaScript 如何越来越成为一种函数式语言,以及这种编程范式如何在不久的将来成为性能的载体。

第 9 章提升 Web 服务器的性能,介绍 HTTP/2 协议的全部内容以及 SPDY 项目是如何实现的,PHP-FPM 和 OPcache 如何帮助您提升 PHP 脚本的性能,如何通过设置 Varnish 缓存服务器来使用 ESI 技术,如何使用客户端缓存以及其他更快的 Web 工具如何帮助您提高 Web 服务器的总体性能。

第 10 章超越性能展示了当一切似乎都得到了充分优化时,我们如何通过更好地理解 UI 设计背后的原则来超越性能。

充分利用这本书

为了运行本书中包含的源代码,我们建议您首先在计算机上安装 Docker(https://docs.docker.com/engine/installation/ )。Docker是一个软件容器平台,允许您在隔离和复杂的 chroot 环境中轻松连接到计算机设备。与虚拟机不同,容器不附带完整的操作系统,而只附带运行某些软件所需的二进制文件。您可以在 Windows、Mac 或 Linux 上安装Docker。但是,需要注意的是,在 macOS(上运行Docker时,一些功能(如全功能联网)仍然不可用 https://docs.docker.com/docker-for-mac/networking/#known-限制用例和解决方法

本书中我们将使用的主要Docker图像是Linux for PHP8.1(https://linuxforphp.net/ 使用 PHP7.1.16 的非线程安全版本和MariaDBMySQL)10.2.8(asclinux/linuxforphp-8.1:7.1.16-nts)。要启动主容器,请输入以下命令:

# docker run --rm -it \
> -v ${PWD}/:/srv/fasterweb \
> -p 8181:80 \
> asclinux/linuxforphp-8.1:7.1.16-nts \
> /bin/bash

如果您喜欢在优化代码时使用多线程技术,可以通过运行线程安全版本的Linux for PHP(asclinux/linuxforphp-8.1:7.0.29-zts)来实现。

此外,您应该docker commit对容器所做的任何更改,并创建新的容器图像,以便稍后docker run使用。如果您不熟悉 Docker 命令行及其run命令,请在中查找文档 https://docs.docker.com/engine/reference/run/

最后,每当您启动原始 Linux for PHP 映像并希望开始使用本书中包含的大多数代码示例时,必须在 Linux for PHP 容器中运行以下三个命令:

# /etc/init.d/mysql start
# /etc/init.d/php-fpm start
# /etc/init.d/httpd start

下载示例代码文件

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

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

  1. 登录或注册www.packtpub.com
  2. 选择“支持”选项卡
  3. 点击代码下载和勘误表
  4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作

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

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

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Mastering-the-Faster-Web-with-PHP-MySQL-and-JavaScript 。如果代码有更新,它将在现有 GitHub 存储库中更新。

本书中给出的所有代码示例都可以在代码库中找到,位于根据章节编号命名的文件夹中。因此,希望您在每章开始时更改工作目录,以便运行中给出的代码示例。因此,对于第 1 章,您需要在容器的 CLI 上输入以下命令:

# mv /srv/www /srv/www.OLD
# ln -s /srv/fasterweb/chapter_1 /srv/www

在下一章中,您需要输入以下命令:

# rm /srv/www
# ln -s /srv/fasterweb/chapter_2 /srv/www

等等,接下来的章节。

我们的丰富书籍和视频目录中还有其他代码包,请访问https://github.com/PacktPublishing/ 。看看他们!

使用的惯例

本书中使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这里有一个例子:“只要可能,开发人员应该总是喜欢使用const而不是letvar

代码块设置如下:

function myJS()
{
    function add(n1, n2)
    {
        let number1 = Number(n1);
        let number2 = Number(n2);

        return number1 + number2;
    }

}

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

# php parallel-download.php 

粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个示例:“如果您滚动到页面的末尾,您现在应该会看到一个 xdebug 部分。”

Warnings or important notes appear like this. Tips and tricks appear like this.

联系

我们欢迎读者的反馈。

一般反馈:发送电子邮件feedback@packtpub.com并在邮件主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至questions@packtpub.com

勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的书籍,点击 errata 提交表单链接,然后输入详细信息。

盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com与我们联系,并提供该材料的链接。

如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。

有关 Packt 的更多信息,请访问packtpub.com