零、前言

这本书的主要重点是在使用 JavaScript 的真实网络应用中使用数据结构和算法。

随着 JavaScript 进入服务器端,随着单页应用 (SPA)框架接管客户端,很多(如果不是全部的话)业务逻辑被移植到客户端。这使得采用为给定用例定制的手工数据结构和算法变得至关重要。

例如,在处理数据可视化(如图表、图和 3D 或 4D 模型)时,服务器可能会提供数万甚至数十万个复杂对象,有时是近乎实时的。有不止一种方法可以处理这些数据,这就是我们将要探索的,用真实的例子。

这本书是给谁的

这本书是为任何对 HTML、CSS 和 JavaScript 有兴趣和基础知识的人准备的。我们还将使用 Node.js、Express 和 Angular 来创建一些利用我们的数据结构的网络应用和 API。

这本书涵盖了什么

第 1 章为应用状态管理构建栈介绍了构建和使用栈,例如应用的自定义后退按钮和在线 IDE 的语法解析器和评估器。

第 2 章为有序执行创建队列,演示如何使用队列及其变体来创建能够处理消息失败的消息服务。然后,我们对不同类型的队列进行快速比较。

第 3 章使用集合和映射来实现更快的应用,使用集合和映射来创建键盘快捷键来在应用状态之间导航。然后,我们创建一个定制的应用跟踪器来记录网络应用的分析信息。我们以集合和映射与数组和对象的性能比较来结束这一章。

第 4 章使用树进行更快的查找和修改,利用树数据结构形成一个提前类型化组件。然后,我们创建一个信用卡批准预测器,根据历史数据确定信用卡申请是否被接受。

第 5 章使用图简化复杂应用讨论了图,并举例说明了如何为工作门户和社交媒体网站上的朋友推荐系统创建参考生成器。

第 6 章探索算法类型,探索一些最重要的算法,比如 Dijkstra,背包 1/0,贪婪算法等等。

第 7 章排序及其应用,结合实例探讨合并排序、插入排序和快速排序。然后,我们对它们进行性能比较。

第 8 章大 O 符号、空间和时间复杂度,讨论了表示复杂度的符号,然后继续讨论什么是空间和时间复杂度,以及它们如何影响我们的应用。

第 9 章微优化和内存管理,探讨了 HTML、CSS、JavaScript 的最佳实践,然后继续讨论谷歌 Chrome 的一些内部工作方式,以及我们如何利用它来更好、更快地渲染我们的应用。

充分利用这本书

  • JavaScript、HTML 和 CSS 的基本知识
  • 安装 node . js(https://nodejs.org/en/download/)
  • 安装 WebStorm IDE(https://www.jetbrains.com/webstorm/download)或类似的
  • 下一代浏览器,如谷歌浏览器(https://www.google.com/chrome/browser/desktop/)
  • 熟悉 Angular 2.0 或更高版本是一个优势,但不是必需的
  • 这本书的截图是在 macOS 上拍摄的。对于任何其他操作系统的用户来说,差别不大(如果有的话)。然而,无论操作系统如何,代码示例都将运行,没有任何差异。在我们指定了CMD/cmd/command的任何地方,请使用 windows 对应物上的CTRL/ctrl/control键。如果你看到return,请使用回车,如果你看到terminal/Terminal这个词,请在窗户上使用它的对等词command prompt
  • 在本书中,代码库是随着主题的进展而逐步构建的。因此,当您将代码示例的开头与 GitHub 中的代码库进行比较时,请注意 GitHub 代码是您所引用的主题或示例的最终形式。

下载示例代码文件

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

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

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

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

  • 视窗系统的 WinRAR/7-Zip
  • zipeg/izp/un ARX for MAC
  • 适用于 Linux 的 7-Zip/PeaZip

这本书的代码包也托管在 GitHub 上,网址为。我们还有来自丰富的书籍和视频目录的其他代码包,可在获得。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的截图/图表的彩色图像。可以在这里下载: https://www . packtpub . com/sites/default/files/downloads/handsondata structuresandalgorithms with JavaScript _ color images . pdf

使用的约定

本书通篇使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄。这里有一个例子:“本机阵列操作具有不同的时间复杂度。就拿Array.prototype.spliceArray.prototype.push来说吧。”

代码块设置如下:

class Stack {
    constructor() {

    }
}

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

var express = require('express');
var app = express();
var data = require('./books.json');
var Insertion = require('./sort/insertion');

任何命令行输入或输出都编写如下:

ng new back-button

粗体:表示一个新的术语、一个重要的单词或者你在屏幕上看到的单词。例如,菜单或对话框中的单词像这样出现在文本中。这里有一个例子:“当用户点击后退按钮时,我们将从栈中导航到应用的前一个状态。”

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

取得联系

我们随时欢迎读者的反馈。

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

勘误表:虽然我们已经尽了最大的努力来保证内容的准确性,但是错误还是会发生。如果你在这本书里发现了一个错误,如果你能向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择您的图书,点击勘误表提交链接,并输入详细信息。

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

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

复习

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

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