编辑推荐
一线Node开发者数年实战经验总结,适合所有前端和后端的开发人员阅读
本书内容涵盖Node 高并发的原理、源码分析以及使用 Node 开发应用所需要的不同层面的技术实践。
具体包括 Node 异步机制(配以源码分析),编辑与调试,测试技术,Docker 部署,模块机制,V8 引擎与代码优化,Promise 和 ES6 generator ,LoopBack 开源框架,使用 C++ 编写扩展,JavaScript 严格模式,编码规范等内容。
内容简介
本书内容涵盖了 Node.js高并发的原理、源码分析以及使用 Node.js开发应用所需要的不同层面的技术实践。具体来讲,本书包括 Node.js异步机制(配以源码分析)、编辑与调试、测试技术、Docker 部署、模块机制、V8 引擎与代码优化、Promise 和 ES6 Generator、LoopBack 开源框架、使用 C++ 编写扩展、JavaScript严格模式、编码规范等内容。在 LoopBack 章节,本书详细介绍了使用此框架开发企业级 Web 应用的步骤,帮助读者迅速掌握使用这个强大框架的诀窍。最后一章详细介绍了编写不同类型的 C++ 模块的知识,并对堆内存管理等内容做了深入探讨。
本书适合所有前端和后端的开发人员阅读。
作者简介
尤嘉,东南大学计算机硕士,从事软件研发工作多年,先后就职于奇虎和猎豹移动。做过基于 chromium 的浏览器,也从事过 WebKit 与 V8 方面的研发工作。目前从事 P2P 与区块链方面的项目研发。
内页插图
目录
第1章 Node异步编程范式 1
1.1 同步与异步的比较 2
1.2 Node异步的实现 7
1.2.1 HTTP请求——完全异步的例子 8
1.2.2 本地磁盘I/O——多线程模拟 17
1.3 事件驱动 18
参考资料 19
第2章 搭建自己的开发环境 21
2.1 Node的编译与安装 22
2.2 开发与调试 23
2.3 单元测试 29
2.3.1 Mocha 测试框架 29
2.3.2 TDD 风格 32
2.3.3 BDD 风格 34
2.3.4 生成不同形式的测试报告 35
2.3.5 代码覆盖率工具Istanbul36
参考资料 40
第3章 使用Docker部署Node服务 43
3.1 Docker基础 44
3.2 在Docker中运行Node 45
3.3 导出配置好的容器 47
参考资料 48
第4章 Node模块 49
4.1 程序入口 50
4.2 VM模块 50
4.3 模块加载与缓存 52
4.4 模块分类 54
4.5 正确导出模块 55
4.6 小心使用全局变量 56
第5章 V8引擎 57
5.1 Java Script代码的编译与优化 58
5.1.1 即时编译 58
5.1.2 隐藏类 59
5.1.3 内联缓存 60
5.1.4 优化回退 61
5.1.5 写出更具亲和性的代码 62
5.1.6 借助TypeScript 63
5.2 垃圾回收与内存控制 65
5.2.1 V8的垃圾回收算法 65
5.2.2 使用Buffer 67
5.2.3 避免内存泄漏 70
参考资料 77
V
第6章 Promise对象 79
6.1 Promise的含义 80
6.2 基本用法 80
6.3 then的链式写法 82
6.4 bluebird库 85
参考资料 86
第7章 用ES6 Generator解决回调金字塔 87
7.1 Node异步实现流程 88
7.2 用Generator实现异步调用与多并发 89
7.3 严格模式下运行 99
7.4 理解执行过程 100
7.5 本章结语 106
第8章 LoopBack开源框架 107
8.1 安装与运行 108
8.2 路由与权限控制 113
8.3 添加新模型 121
8.4 初始化数据库 131
8.5 钩子机制 134
8.6 中间件 137
8.7 模型关系 139
8.8 使用cluster模式运行服务 141
参考资料 144
第9章 编写C++扩展 145
9.1 使用C++编写扩展模块 146
9.1.1 导出对象 146
9.1.2 导出函数 149
9.1.3 导出构造函数 151
9.2 线程模型与CPU密集型任务 164
9.3 线程对象 164
9.4 本章结语 170
参考资料 170
附 录 171
附录 A JavaScript 严格模式 172
附录 B JavaScript 编码规范 182
参考资料 195
前言/序言
本书写给那些打算或者正在使用 Node.js(简称Node,后文均用此简称)创建 Web 应用的开发者。众所周知,JavaScript 的灵活易用以及 V8 引擎的加速,再加上活跃的社区支持,使得用 Node 开发应用的成本低,收益大。2015 年 ES6 标准的确立,为JavaScript成为企业级开发语言扫除了不确定性。这本书的选材契合这个领域最新的技术进展,深浅适宜地介绍了 Node 技术栈的全貌。
本书共分9章。第1章概述,介绍 Node 异步实现的原理,涵盖了 Node 实现异步的两种方式。这部分引用了 Node 源码,以求逻辑清晰与内容翔实。第2章~第7章是站在 JavaScript 的角度,介绍了用 Node 开发应用的方方面面,包括编辑与调试、测试技术、Docker 部署、模块机制、V8 引擎与代码优化、Promise 和 ES6 generator 等内容。第8章介绍了 LoopBack 开源框架的使用。本书没有介绍 Express(可能读者早已熟悉),因为本书希望为读者引荐一个更加强大易用的企业级 Web 框架。第9章则从 C++ 的角度介绍了 Node 扩展模块的编写,这部分适合那些想要了解 V8 引擎的读者。可以说 C++ 是 Node 技术栈的基石。本书希望向读者呈现构成 Node 技术栈的JavaScript和C++ 全貌。本书不假定读者有 Node 研发经验,但需熟悉 JavaScript。如果读者最近才接触编程,建议选一本更初级的教程,或者先到 W3School上看看。本书每一章都有源码示例,这些示例大部分可以在 Node 支持的任何系统上运行,但也有例外。建议使用本书第3章介绍的容器,在 Linux 环境下运行本书示例。大部分示例代码可以下载。
饮半盏湖水,当知江河滋味;拾一片落叶,尽享人间秋凉。希望本书成为读者熟练掌握 Node 技术栈的那一盏湖水、一片落叶。
致谢
感谢 CNode 社区,它提供了一个非常好的平台,本书前期的一些章节从中得到了积极的反馈,使笔者有了继续写下去的动力。首都师范大学的刘晓莲同学,利用周末时间审阅了本书的稿件,提出的一些见解,使得本书在内容安排上更合理,更容易看懂,在此表示感谢。笔者周围的一些同事部分地阅读了初稿并给出了积极的反馈,在此一并谢过!
探索数据可视化:从入门到精通的艺术之旅 本书是一本深入浅出、内容详实的指南,旨在带领读者踏上数据可视化领域的探索之旅。无论您是初次接触数据可视化,还是希望深化理解并掌握更高级的技术,本书都将为您提供一条清晰的学习路径。我们摒弃了枯燥的理论堆砌,而是以实践为导向,通过丰富的案例和生动的讲解,让数据在您的指尖“活”起来。 第一部分:数据可视化的基石——理解与原则 在开始绘制炫目的图表之前,理解数据可视化的核心理念至关重要。本部分将为您打下坚实的理论基础,让您明白“为何”以及“如何”才能有效地呈现数据。 第一章:为何可视化?数据的沟通语言 数据的挑战与机遇: 如今,数据爆炸式增长,海量信息如同未经雕琢的宝石,其价值需要被挖掘和呈现。本书将探讨为何直观的数据可视化是理解复杂数据集、发现隐藏模式、并最终做出明智决策的关键。 可视化的力量: 从历史上的约翰·斯诺霍乱地图到现代的商业智能仪表板,本书将展示可视化如何帮助我们洞察趋势、识别异常、讲述引人入胜的数据故事,并驱动行为改变。 目标受众与沟通: 不同的受众需要不同的可视化方式。我们将深入探讨如何识别您的目标受众,理解他们的背景知识和信息需求,从而选择最适合的图表类型和表达方式,确保信息准确传达。 有效可视化的原则: 清晰性、准确性、效率是衡量可视化质量的关键。我们将介绍一系列基本原则,如选择正确的图表类型、避免误导性表示、以及如何通过设计元素(颜色、形状、大小)来增强信息传递。 第二章:选择正确的图表——表达的艺术 图表分类与适用场景: 数据可视化并非“一招鲜”。本章将系统地介绍各种常见的图表类型,包括但不限于: 比较类图表: 条形图(柱状图、横条图)、雷达图、分组条形图等,用于比较不同类别或时间点的数据。 分布类图表: 直方图、箱线图、散点图等,用于展示数据的分布情况、离散程度和潜在的异常值。 构成类图表: 饼图、堆积条形图、树状图等,用于展示整体与部分的关系。 关系类图表: 散点图、气泡图、网络图等,用于揭示变量之间的关联性。 地理空间类图表: 地图(热力图、标记图)、地理散点图等,用于展示与地理位置相关的数据。 图表选择的决策树: 我们将提供一套实用的决策流程,帮助您根据数据的类型、想要传达的信息以及受众的理解能力,一步步筛选出最合适的图表。 避免常见的图表陷阱: 3D图表、不恰当的比例尺、过多的信息叠加等,都可能导致信息误读。本章将揭示并分析这些常见误区,教您如何规避。 第三章:美学与设计——让数据“呼吸” 色彩的力量与原则: 颜色不仅仅是装饰,更是强大的信息载体。我们将探讨色彩的心理学效应、如何选择和谐且有意义的配色方案、以及如何运用颜色来突出重点、区分类别。 排版与布局的艺术: 清晰的标题、准确的标签、合理的坐标轴设置、留白的运用,都能显著提升图表的可读性。本章将分享优秀排版和布局的秘诀。 数据故事的叙事结构: 一张好的图表应该能讲述一个引人入胜的故事。我们将探讨如何通过图表的演进、标注和交互,引导观众理解数据的变化和含义。 设计工具概览(不限于特定工具): 虽然本书不拘泥于特定工具,但会提及一些在设计中常用的辅助思路和技术,帮助读者理解如何将设计原则应用于实践。 第二部分:实践出真知——主流工具与技术 理解了理论基础后,我们将进入实践环节,深入学习目前主流的数据可视化工具和技术,让您能够亲手将数据转化为生动的图表。 第四章:Python与Matplotlib/Seaborn——科学计算的视觉化语言 Python数据可视化生态概览: 简要介绍Python在数据科学领域的重要地位,以及Matplotlib和Seaborn作为核心可视化库的重要性。 Matplotlib入门: 基本绘图元素:Figure, Axes, Plot。 创建各种基本图表:线图、散点图、条形图、饼图。 图表定制:标题、轴标签、图例、网格线、颜色、线型、标记。 多图绘制:Subplots, Figure-level vs. Axes-level API。 Seaborn进阶: 基于Matplotlib的优雅封装:Seaborn如何简化复杂图表的创建。 统计图表:分布图(distplot, kdeplot)、关系图(scatterplot, lineplot, lmplot)、分类图(countplot, boxplot, violinplot)、回归图(regplot)。 主题与风格:如何使用Seaborn的预设主题提升图表美感。 DataFrame集成:Seaborn与Pandas DataFrame的无缝对接。 案例实践: 演示如何使用Matplotlib和Seaborn分析并可视化一个真实数据集(例如,电影评分数据、销售数据)。 第五章:JavaScript与D3.js——交互式Web可视化的王者 Web可视化的优势: 交互性、可访问性、动态更新,D3.js如何实现这一切。 D3.js核心概念: 数据绑定(Data Binding):D3.js的核心机制,理解enter, update, exit。 选择集(Selections):如何使用CSS选择器来操作DOM元素。 SVG与Canvas:D3.js常用的渲染技术。 比例尺(Scales):将数据域映射到视觉属性域。 坐标轴(Axes):自动生成和格式化坐标轴。 过渡与动画(Transitions & Animation):为图表添加流畅的动态效果。 D3.js常用图表实现: 基本条形图、线图、散点图。 饼图与环形图。 力导向图(Force-directed graphs)。 地图可视化(TopoJSON, GeoJSON)。 案例实践: 构建一个简单的交互式仪表板,展示用户行为数据或地理信息。 第六章:Tableau/Power BI——商业智能的强大引擎 商业智能(BI)工具的定位: Tableau和Power BI如何赋能业务分析师和决策者,无需编程即可进行数据探索和可视化。 Tableau入门与进阶: 数据连接与准备。 拖放式界面操作。 创建各种报表和仪表板。 计算字段、参数、集。 高级可视化技巧:地图、树状图、动态仪表板。 Power BI入门与进阶: Power Query数据转换。 DAX(Data Analysis Expressions)基础。 创建报表与仪表板。 Power BI服务与共享。 嵌入式分析。 对比分析与最佳实践: 比较Tableau和Power BI的优劣势,并提供在不同场景下的应用建议。 案例实践: 使用一个实际的商业数据集,分别用Tableau和Power BI构建一个销售分析仪表板。 第三部分:深入与扩展——高级技巧与趋势 在掌握了基本工具和技术之后,本书将带领您进入更广阔的领域,探索高级的可视化技巧,并关注行业前沿趋势。 第七章:交互式可视化的设计哲学 交互的类型与目的: 探索不同的交互方式,如悬停(hovering)、点击(clicking)、筛选(filtering)、缩放(zooming)、平移(panning),以及它们如何增强用户对数据的理解。 信息层次与渐进式披露: 如何设计交互,让用户能够从宏观概览逐步深入到细节,避免信息过载。 用户体验(UX)在可视化中的应用: 考虑用户的需求和使用习惯,设计直观易懂、易于操作的交互式可视化。 响应式设计: 如何让您的可视化在不同设备和屏幕尺寸上都能良好呈现。 案例研究: 分析一些优秀的交互式可视化作品,学习其设计思路和实现方法。 第八章:地理空间可视化进阶 地图投影与坐标系: 理解不同的地图投影方式对数据呈现的影响。 地理编码(Geocoding): 将地址信息转换为地理坐标。 高级地图类型: 分面地图(Choropleth Maps)的精细控制。 点密度图(Point Density Maps)。 热力图(Heatmaps)与聚类地图(Clustering Maps)。 叠加与多层地图。 可视化与地理信息系统(GIS)的结合: 探讨可视化如何在GIS分析中发挥作用。 案例实践: 利用地理信息数据(如人口密度、犯罪率、疫情传播),创建精美的地理空间可视化。 第九章:高级图表类型与技巧 网络图(Network Graphs)与关系可视化: 深入了解如何可视化复杂的关系网络,如社交网络、依赖关系。 时间序列分析可视化: 探索如何有效展示时间序列数据的趋势、季节性、异常值,如蜡烛图、桑基图(Sankey Diagrams)。 词云(Word Clouds)与文本数据可视化: 如何从大量文本中提取信息并进行可视化。 多维数据可视化: 探索如平行坐标图(Parallel Coordinates)、散点图矩阵(Scatter Plot Matrix)等方法。 数据故事的连续性设计: 如何将多个图表串联起来,形成一个完整的数据叙事。 第十章:数据可视化的未来趋势与挑战 人工智能(AI)与机器学习(ML)在可视化中的应用: 自动图表推荐、异常检测、自然语言生成图表标题。 虚拟现实(VR)与增强现实(AR)可视化: 沉浸式数据探索的可能性。 实时数据流可视化: 如何处理和展示不断变化的数据。 可解释性AI(XAI)与可视化: 如何利用可视化来解释复杂的AI模型。 数据隐私与伦理: 在可视化过程中如何保护用户隐私,避免歧视性表示。 学习资源的持续更新: 指导读者如何保持对数据可视化领域新知识的持续学习。 通过本书的学习,您将能够自信地驾驭各种数据可视化工具和技术,将枯燥的数据转化为富有洞察力、引人入胜的视觉信息,无论是用于科学研究、商业决策还是公众传播,都将成为您不可或缺的强大武器。让我们一起开启这段精彩的数据可视化之旅吧!