Node.js设计模式(第三版)
品相核验准确、体验好,不符包售后;下午5点前订单,当日发货
¥
60.75
4.1折
¥
148
九五品
仅1件
作者 [爱尔兰]马里奥·卡西罗;[意]卢西安诺·马米诺
出版社 中国电力出版社
出版时间 2021-08
版次 1
装帧 其他
货号 9787519855970503
上书时间 2024-10-28
商品详情
品相描述:九五品
图书标准信息
作者
[爱尔兰]马里奥·卡西罗;[意]卢西安诺·马米诺
出版社
中国电力出版社
出版时间
2021-08
版次
1
ISBN
9787519855970
定价
148.00元
装帧
其他
开本
16开
纸张
胶版纸
页数
616页
字数
810.000千字
【内容简介】
本书中使用好的办法来实现各种设计模式以创造高效且健壮的Node.js应用程序。本书首先介绍Node.js的基础知识,包括异步事件驱动架构以及基本的设计模式。然后,介绍怎样用callback (回调)、Promise以及async/await机制来构建异步的控制流模式。其次,介绍Node.js的stream (流)并演示stream的强大功能,使读者能充分地利用这些功能。本书分析了三大类设计模式,即创建型的设计模式、结构型的设计模式以及行为型的设计模式,并介绍了怎样在JavaScript语言及Node.js平台中充分运用这些模式。后,书中研究了一些比较高端的概念,例如UniversalJavaScript、Node.js程序的扩展问题以及消息传递模式等,以帮助读者打造企业级的分布式应用程序。 本书适合已了解Node.js技术,同时希望在程序的效率、设计及可扩展程度方面有所提高的开发者。阅读本书需要读者掌握Web应用程序、WebService、数据库与数据结构方面的开发技术。
【作者简介】
Mario Casciaro是一位软件工程师和企业家,对技术,科学和开源知识充满热情。Mario毕业于软件工程硕士学位,并开始了他在IBM的职业生涯。目前,Mario是Sponsorama.com的联合创始人兼首席执行官,该平台通过企业赞助来帮助在线项目筹集资金,还是版Node.js设计模式的作者。Luciano Mammino是一位软件工程师,出生于1987年。他从12岁开始使用父亲的旧Intel 386(仅提供DOS操作系统和qBasic解释器)进行编码。在获得计算机科学硕士学位之后,他主要是作为网络开发人员发展了自己的编程技能,主要是为意大利各地的公司和初创公司担任自由职业者。在担任CTO和Sbaam.com在意大利和爱尔兰的联合创始人长达三年的创业后,在Smartbox担任高级PHP工程师。他喜欢开发开源库并喜欢使用Symfony和Express这样的框架。
【目录】
目录 前言 第1章 Node.js平台 1 1.1 Node.js开发理念 1 1.1.1 小核心 2 1.1.2 小模块 2 1.1.3 小接触面 (小暴露面) 3 1.1.4 简单实用 3 1.2 Node.js的工作原理 4 1.2.1 I/O是慢速操作 4 1.2.2 阻塞式I/O 4 1.2.3 非阻塞式的I/O 5 1.2.4 事件多路分离 6 1.2.5 reactor模式 8 1.2.6 Node.js的I/O引擎———Libuv 10 1.2.7 Node.js的全套结构 10 1.3 Node.js平台之中的JavaScript 11 1.3.1 放心地使用版的JavaScript 11 1.3.2 模块系统 12 1.3.3 访问操作系统中的各项服务 12 1.3.4 运行原生代码 13 1.4 小结 14 第2章 模块系统 15 2.1 为什么需要模块 15 2.2 JavaScript与Node.js的模块系统 16 2.3 模块系统及其模式 17 2.4 CommonJS模块 19 2.4.1 自制的模块加载器 19 2.4.2 定义模块 21 2.4.3 module.exports与exports 22 2.4.4 require函数是同步函数 23 2.4.5 模块解析算法 23 2.4.6 模块缓存 25 2.4.7 循环依赖 26 2.5 定义模块所用的模式 30 2.5.1 命名导出模式 30 2.5.2 函数导出模式 31 2.5.3 类导出模式 32 2.5.4 实例导出模式 33 2.5.5 通过monkeypatching模式修改其他模块或全局作用域 34 2.6 ECMAScript模块 (ESM) 35 2.6.1 在Node.js平台中使用ESM 36 2.6.2 命名导出模式与命名引入 36 2.6.3 默认导出与默认引入 39 2.6.4 混用命名导出与默认导出 40 2.6.5 模块标识符 41 2.6.6 异步引入 42 2.6.7 详细解释模块的加载过程 44 2.6.8 修改其他模块 51 2.7 ESM与CommonJS之间的区别以及交互使用技巧 55 2.7.1 ESM是在严格模式下运行的 55 2.7.2 ESM不支持CommonJS提供的某些引用 55 2.7.3 在其中一种模块系统里面使用另一种模块 56 2.8 小结 57 第3章 回调与事件 58 3.1 Callback (回调)模式 58 3.1.1 continuation-passing风格 (CPS) 59 3.1.2 某个函数究竟是同步函数,还是异步函数? 62 3.1.3 在Node.js里面定义回调的惯例 68 3.2 Observer(观察者)模式 72 3.2.1 EventEmitter 73 3.2.2 创建并使用EventEmitter 74 3.2.3 播报错误信息 75 3.2.4 让任何一个对象都能为监听器所观察 75 3.2.5 EventEmitter与内存泄露 77 3.2.6 同步事件与异步事件 78 3.2.7 EventEmitter与callback(回调)之间的对比 80 3.2.8 把回调与事件结合起来 81 3.3 小结 82 3.4 习题 82 第4章 利用回调实现异步控制流模式 84 4.1 异步编程所遇到的困难 84 4.1.1 创建简单的网页爬虫 85 4.1.2 callbackhell 87 4.2 涉及回调的编程技巧与控制流模式 88 4.2.1 编写回调逻辑时所应遵循的原则 89 4.2.2 运用相关的原则编写回调 89 4.2.3 顺序执行 92 4.2.4 平行执行 98 4.2.5 限制任务数量的平行执行 104 4.3 async库 112 4.4 小结 113 4.5 习题 113 第5章 利用Promise与async/await实现异步控制流模式 115 5.1 Promise 116 5.1.1 什么是Promise? 116 5.1.2 Promises/A 与thenable 119 5.1.3 PromiseAPI 119 5.1.4 创建Promise 121 5.1.5 把回调方案改写成Promise方案 122 5.1.6 顺序执行与迭代 124 5.1.7 平行执行 128 5.1.8 限制任务数量的平行执行 129 5.2 async/await 132 5.2.1 async函数与await表达式 133 5.2.2 用async/await处理错误 134 5.2.3 顺序执行与迭代 137 5.2.4 平行执行 139 5.2.5 限制任务数量的平行执行 141 5.3 无限递归的Promise解析链所引发的问题 145 5.4 小结 148 5.5 习题 149 第6章 用Stream编程 150 6.1 理解stream在Node.js平台中的重要作用 150 6.1.1 缓冲模式与流模式 151 6.1.2 流模式在空间占用方面的优势 152 6.1.3 流模式在处理时间方面的优势 154 6.1.4 stream之间的组合 157 6.2 开始学习Stream 160 6.2.1 流对象的体系结构 161 6.2.2 Readable流 (可读流) 161 6.2.3 Writable流 (可写流) 169 6.2.4 Duplex流 (双工流/读写流) 175 6.2.5 Transform流 (传输流) 176 6.2.6 PassThrough流 183 6.2.7 lazystream (惰性流) 188 6.2.8 用管道连接流对象 189 6.3 用stream实现异步控制流模式 193 6.3.1 顺序执行 194 6.3.2 无序的平行执行 196 6.3.3 无序且带有并发上限的平行执行模式 201 6.3.4 有序的平行执行 203 6.4 管道模式 205 6.4.1 组合stream 205 6.4.2 拆分stream (fork模式) 210 6.4.3 合并stream (merge模式) 211 6.4.4 多路复用与解多路复用 (mux/demux模式) 213 6.5 小结 220 6.6 习题 221 第7章 创建型的设计模式 222 7.1 Factory(工厂)模式 223 7.1.1 把对象的创建流程与该流程的实现方式解耦 223 7.1.2 强化封装效果 225 7.1.3 构建一款简单的codeprofiler(代码测评工具) 226 7.1.4 Node.js大环境之中的工厂模式 229 7.2 Builder(生成器/建造者)模式 229 7.2.1 实现URL对象生成器 233 7.2.2 Node.js大环境之中的Builder模式 237 7.3 RevealingConstructor模式 238 7.3.1 构建不可变的缓冲区 239 7.3.2 Node.js大环境之中的RevealingConstructor模式 242 7.4 Singleton (单例/单件)模式 243 7.5 管理模块之间的依赖关系 247 7.5.1 用Singleton模式管理模块之间的依赖关系 247 7.5.2 用DI(依赖注入)管理模块之间的依赖关系 250 7.6 小结 255 7.7 习题 256 第8章 结构型的设计模式 258 8.1 Proxy(代理)模式 258 8.1.1 怎样实现Proxy模式 259 8.1.2 创建带有日志功能的 Writable流 270 8.1.3 用Proxy实现ChangeObserver模式 271 8.1.4 Node.js大环境之中的Proxy模式 274 8.2 Decorator(修饰器)模式 274 8.2.1 实现Decorator模式的几种办法 275 8.2.2 用Decorator模式来修饰LevelUP数据库 279 8.2.3 Node.js大环境之中的Decorator模式 282 8.3 Proxy模式与Decorator模式之间的区别 283 8.4 Adapter(适配器)模式 284 8.4.1 通过fs式的API来使用LevelUP 284 8.4.2 Node.js大环境之中的Adapter模式 288 8.5 小结 289 8.6 习题 290 第9章 行为型的设计模式 291 9.1 Strategy(策略)模式 292 9.1.1 处理各种格式的配置信息 293 9.1.2 Node.js大环境之中的Strategy模式 297 9.2 State(状态)模式 297 9.3 Template(模板)模式 304 9.3.1 用Template模式重新实现配置管理器 305 9.3.2 Node.js大环境之中的Template模式 308 9.4 Iterator(迭代器)模式 308 9.4.1 iterator协议 309 9.4.2 iterable协议 311 9.4.3 在JavaScript语言内建的机制之中使用iterator与iterable 314 9.4.4 Generator(生成器) 316 9.4.5 asynciterator(异步迭代器) 321 9.4.6 asyncgenerator(异步生成器) 324 9.4.7 asynciterator(异步迭代器)与Node.js平台的stream (流) 325 9.4.8 Node.js大环境中的Iterator模式 326 9.5 Middleware(中间件)模式 327 9.5.1 Express里面的中间件 327 9.5.2 从模式的角度谈中间件 328 9.5.3 创建针对ZeroMQ的中间件框架 330 9.5.4 Node.js大环境之中的 Middleware模式 337 9.6 Command(命令)模式 337 9.6.1 Task模式 339 9.6.2 用复杂一些的办法实现Command 340 9.7 小结 344 9.8 习题 344 第10章 用UniversalJavaScript开发 Web应用程序 347 10.1 让Node.js与浏览器共用同一套代码 348 10.2 跨平台开发的基础知识 360 10.2.1 在运行程序的时候做代码分支 360 10.2.2 在构建程序的时候做代码分支 362 10.2.3 模块交换 (模块替换) 365 10.2.4 适用于跨平台开发的设计模式 366 10.3 React简介 367 10.3.1 React编程入门 369 10.3.2 用其他写法取代react.createElement 371 10.3.3 有状态的Reactcomponent 373 10.4 创建UniversalJavaScript应用程序 379 10.4.1 先构建一款只有前端逻辑的应用程序 380 10.4.2 给程序添加服务器端的渲染逻辑 388 10.4.3 让程序用异步的方式获取数据 394 10.4.4 在服务器端与浏览器端采用同一套方案获取数据 400 10.5 小结 415 10.6 习题 416 第11章 高级技巧 417 11.1 如何应对初始化过程中需要执行异步任务的组件 417 11.1.1 初始化过程中含有异步任务的组件所面对的问题 418 11.1.2 预初始化队列 (pre-initializationqueue) 420 11.1.3 Node.js大环境之中的解决方案 425 11.2 批量处理异步请求并缓存处理结果 426 11.2.1 什么叫作批量处理异步请求? 426 11.2.2 用更好的办法来缓存异步请求的处理结果 427 11.2.3 不带缓存或批处理机制的API服务器 428 11.2.4 利用Promise实现批处理与缓存 430 11.3 取消异步操作 435 11.3.1 采用基本方案创建可叫停的函数 435 11.3.2 把可叫停的异步函数所要执行的异步调用包装起来 437 11.3.3 利用生成器实现可叫停的异步函数 439 11.4 运行CPU密集型任务 443 11.4.1 解决subsetsum (子集合加总)问题 443 11.4.2 通过setImmediate分步执行 447 11.4.3 使用外部进程执行任务 450 11.4.4 用工作线程执行任务 458 11.4.5 在实际工作中处理CPU密集型任务 462 11.5 小结 463 11.6 习题 463 第12章 用架构模式实现扩展 465 12.1 浅谈如何扩展应用程序 466 12.1.1 扩展Node.js应用程序 466 12.1.2 从三个方面考虑可扩展能力 467 12.2 克隆与负载均衡 469 12.2.1 cluster模块 470 12.2.2 如何处理需要根据状态来执行的通信请求 480 12.2.3 用反向代理扩展应用程序 483 12.2.4 动态的水平扩展 489 12.2.5 端对端的负载均衡 497 12.2.6 用容器扩展应用程序 501 12.3 分解复杂的应用程序 511 12.3.1 单体式的架构 511 12.3.2 微服务架构 513 12.3.3 适用于微服务架构的集成模式 516 12.4 小结 522 12.5 习题 523 第13章 消息传递与集成模式 524 13.1 消息传递系统的基础知识 525 13.1.1 是单向通信,还是采用请求/响应模式来通信 525 13.1.2 消息的类型 526 13.1.3 异步消息传递机制、队列、流 (stream) 527 13.1.4 端对端的消息传递与基于中介的消息传递 529 13.2 Publish/Subscribe(发布/订阅)模式 530 13.2.1 构建一款极简的实时聊天程序 531 13.2.2 用Redis充当简单的messagebroker(消息中介) 535 13.2.3 用ZeroMQ实现端对端的Publish/Subscribe 538 13.2.4 用队列确保消息可靠地得到投递 542 13.2.5 用Stream (流)可靠地传递消息 552 13.3 任务分配模式 557 13.3.1 用ZeroMQ实现Fanout/Fanin模式 558 13.3.2 根据AMQP协议制作管道并实现CompetingConsumers (互相竞争的消费者)模式 567 13.3.3 用Redis流实现任务分配模式 571 13.4 Request/Reply(请求/响应)模式 577 13.4.1 关联标识符 577 13.4.2 ReturnAddress(返回地址)模式 584 13.5 小结 591 13.6 习题 591
点击展开
点击收起
— 没有更多了 —
以下为对购买帮助不大的评价