零、前言

今天的网络环境已经发生了巨大的变化——不仅仅是在创建 web 应用方面,在创建服务器端应用方面也是如此。 由 jQuery 和 CSS 框架(如 Bootstrap)主导的前端生态系统已经被响应式、功能完备的应用所取代,这些应用可能会被误认为是运行在桌面的应用。

我们编写这些应用所用的语言也发生了戏剧性的变化。 曾经混乱的var和范围问题已经变成了一种快速和易于编程的语言。 JavaScript 不仅改变了我们编写前端的方式,还改变了后端编程体验。

我们现在可以用编写前端的语言编写服务器端应用了。 JavaScript 还通过 Node.js 使事件驱动系统现代化,甚至可能普及。 现在,我们可以用 JavaScript 为前端和后端编写代码,甚至可能在这两者之间共享我们生成的 JavaScript 文件。

然而,尽管应用的前景不断发展,许多人转向了现代框架,比如前端的 React 和 Vue.js,后端的 Express 和 sail,但许多开发人员并不了解内部工作原理。 虽然这说明了进入生态系统是多么简单,但也说明了不理解如何优化代码库是多么容易。

本书侧重于教授高性能的 JavaScript。 这不仅意味着更快的执行速度,还意味着更低的内存占用。 这意味着任何前端系统将更快地到达用户,我们将能够更快地启动我们的应用。 除此之外,我们还有许多推动网络发展的新技术,比如 web Workers。

这本书是给谁的

这本书是为那些对现代网络的所有最新特性感兴趣的人准备的。 除此之外,它还适用于那些希望在提高速度的同时降低内存成本的用户。 对计算机如何工作,甚至 JavaScript 编译器如何工作感兴趣的人会对这本书的内容感兴趣。 最后,对于那些对 WebAssembly 感兴趣但不知道从哪里开始的人来说,这是学习基本知识的一个很好的起点。

这本书的内容

第一章Web 上的高性能工具,将涵盖我们的应用可以运行的各种浏览器。 我们还将介绍各种工具,这些工具可以帮助我们调试、分析,甚至运行特别代码来测试 JavaScript 的功能。

第二章Immutability versus Mutability - The Balance between Safety and Speed将介绍可变/不可变状态的概念。 我们将讨论何时何地使用它们。 在此基础上,我们将介绍如何在拥有可变数据结构的同时创建不变性的假象。

第 3 章Vanilla Land - Looking at the Modern Web,将着眼于 JavaScript 在 ECMAScript 2020 之前的发展和所有新特性。 在此基础上,我们将研究各种高级特性,如 curry 和以函数方式编写。

第 4 章实例- A Look at Svelte and Being Vanilla将涵盖一个相当新的框架,称为 Svelte。 它将回顾这个编译原始 JavaScript 框架,并探索它如何通过一个直观的框架实现闪电般的结果。

第 5 章切换上下文- No DOM, Different Vanilla,将涵盖 Node.js 的底层工作。 这意味着查看一下我们可以使用的各种模块。 我们还将了解如何在没有额外库的情况下实现惊人的结果。

第 6 章Message Passing - Learning about the Different Types,将介绍不同进程之间的不同对话方式。 我们将讨论未命名管道、命名管道、套接字和通过 TCP/UDP 传输。 我们还将看看 HTTP/2 和简要地看看 HTTP/3。

第 7 章流-理解流和非阻塞 I/O,将涵盖流 API 和如何利用它。 我们将讨论每一种类型的流及其用例。 在此之上,我们将实现一些实际的流,通过一些修改,可以在其他项目中使用。

第 8 章Data Formats - Looking at Different Data Types Other Than JSON,将介绍模式和无模式数据类型。 我们将研究如何实现一种数据格式,然后看看流行的数据格式是如何运行的。

第 9 章实例-构建静态服务器将在前面四章的基础上,应用这些概念构建一个静态站点生成器。 虽然它可能没有 GatsbyJS 那么强大,但它将拥有我们期望从静态站点生成器获得的大多数特性。

第 10 章Workers - Learning about Dedicated and Shared Workers,将回到前端,并查看两种 web worker 类型。 我们将利用它们来处理来自主线程的数据。 在此基础上,我们将了解如何在我们的工作器和主要流程之间进行对话。

第 11 章Service worker - Caching and Making Things Faster将着眼于 Service worker 和 Service worker 的生命周期。 在此之上,我们将看看如何在一个进步的 web 应用中使用 service worker 的实际例子。

第十二章,构建和部署一个完整的 Web 应用,将着眼于持续集成/持续部署*(【显示】CI/CD) CircleCI 与工具。 我们将看到如何使用它来部署我们的 web 应用内置在第 9 章实际示例-建立一个静态服务器到服务器。 我们甚至会考虑在部署之前向应用添加一些安全检查。*

**第 13 章WebAssembly - A Brief Look into Native Code on the Web】 我们将看到如何编写底层 WebAssembly 以及它如何在 web 上运行。 然后,我们将把注意力转向为浏览器编写 c++。 最后,我们将看一看移植的应用及其背后的 WebAssembly。

才能充分利用这本书

一般来说,运行大多数代码的需求是最小的。 需要一台能够处理 Chrome、Node.js 和 C 编译器的计算机。 在本书的末尾,我们将使用的 C 编译器是 CMake。 这些系统应该能在所有现代操作系统上工作。

对于 Chrome,拥有最新版本将会很有帮助,因为我们将利用一些在提案阶段或 ECMAScript 2020 的功能。 我们使用 Node.js 的最新 LTS 版本(v12.16.1),并且避免使用 Node.js 13,因为它不会升级到 LTS。 最重要的是,Windows 的命令行工具不是很好,所以建议从https://cmder.net/下载 Cmder,以拥有一个类似 bash 的 Windows shell。

最后,还需要一个现代化的 IDE 或编辑器。 我们将在本书中使用 Visual Studio Code,但也可以使用许多其他的替代方法,如 Visual Studio、IntelliJ、Sublime Text 3 等。

| Software/hardware covered in the book | 操作系统要求 | | Svelte.js v3 | Windows 10/OSX/Linux | | ECMAScript 2020 | Windows 10/OSX/Linux | | node . js v12.16.1 LTS | Windows 10/OSX/Linux | | WebAssembly | Windows 10/OSX/Linux |

下载示例代码文件

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

您可以按照以下步骤下载代码文件:

  1. 登录或注册:www.packt.com
  2. 选择 Support 选项卡。
  3. 单击代码下载。
  4. 在搜索框中输入图书名称,并按照屏幕上的说明操作。

文件下载后,请确保使用最新版本的:

  • 解压缩的软件/ 7 - zip 窗口
  • Zipeg / iZip UnRarX Mac
  • 7 - zip / PeaZip Linux

本书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Hands-On-High-Performance-Web-Development-with-JavaScript。 如果有对代码的更新,它将在现有的 GitHub 存储库中更新。

我们也有其他代码包从我们丰富的图书和视频目录,可在https://github.com/PacktPublishing/。 检查出来!

约定使用

本书中有许多文本约定。

CodeInText:文本码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 url、用户输入、Twitter 句柄。 以下是一个例子:“这与console.timetimeEnd非常相似,但它应该展示与生成器相关的内容。”

代码块的设置如下:

for(let i = 0; i < 100000; i++) {
    const j = Library.outerFun(true);
}

命令行输入或输出如下所示:

> npm install what-the-pack

加粗:表示新术语、重要单词或屏幕上看到的单词。 例如,菜单或对话框中的单词会像这样出现在文本中。 下面是一个例子:“如果我们在 Windows 中按F12打开 DevTools,我们可能会看到Shader Editor标签。”

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

取得联系

我们欢迎读者的反馈。

:如果你对这本书的任何方面有疑问,在你的信息的主题中提到书名,并在customercare@packtpub.com给我们发邮件。

勘误表:虽然我们已经采取了每一个小心,以确保我们的内容的准确性,错误确实发生了。 如果您在本书中发现了错误,请向我们报告,我们将不胜感激。 请访问www.packtpub.com/support/errata,选择您的书,点击勘误表提交表格链接,并输入详细信息。

:如果您在互联网上发现任何形式的我们的作品的非法拷贝,请您提供我们的地址或网址,我们将不胜感激。 请通过copyright@packt.com与我们联系,并提供材料链接。

:如果你有兴趣成为一名作家,如果你对某一话题有专长,或者你有兴趣写一本书,请访问authors.packtpub.com

评论

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

如需了解更多信息,请访问packt.com。****