• 【包邮】 深入浅出Node.js 【正版九新】
  • 【包邮】 深入浅出Node.js 【正版九新】
  • 【包邮】 深入浅出Node.js 【正版九新】
  • 【包邮】 深入浅出Node.js 【正版九新】
  • 【包邮】 深入浅出Node.js 【正版九新】
21年品牌 40万+商家 超1.5亿件商品

【包邮】 深入浅出Node.js 【正版九新】

九品消毒塑封

18.7 2.7折 69 九五品

库存12件

天津宝坻
认证卖家担保交易快速发货售后保障

作者朴灵

出版社人民邮电出版社

ISBN9787115335500

出版时间2013-12

装帧平装

开本16开

定价69元

货号9787115335500

上书时间2024-11-22

文渊文化传媒

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:九五品
商品描述
导语摘要

本书从不同的视角介绍了 Node 内在的特点和结构。由首章Node 介绍为索引,涉及Node的各个方面,主要内容包含模块机制的揭示、异步I/O 实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer的细节、Node 中的网络编程基础、Node 中的Web 开发、进程间的消息传递、Node 测试以及通过Node构建产品需要的注意事项。*后的附录介绍了Node 的安装、调试、编码规范和NPM 仓库等事宜。
 本书适合想深入了解 Node 的人员阅读。



作者简介

朴灵
真名田永强,文艺型码农,就职于*数据平台,资深工程师,Node.js布道者,写了多篇文章介绍Node.js的细节。活跃于CNode社区,是线下会议NodeParty的组织者和JSConfChina(沪JS和京JS)的组织者之一。热爱开源,多个Node.js模块的作者。叩首问路,码梦为生。



目录

第1章 Node简介  1
1.1  Node的诞生历程  1
1.2  Node的命名与起源  1
1.2.1  为什么是JavaScript  2
1.2.2  为什么叫Node  2
1.3  Node给JavaScript带来的意义  2
1.4  Node的特点  4
1.4.1  异步I/O  4
1.4.2  事件与回调函数  6
1.4.3  单线程  7
1.4.4  跨平台  7
1.5  Node的应用场景  8
1.5.1  I/O密集型  8
1.5.2  是否不擅长CPU密集型业务  8
1.5.3  与遗留系统和平共处  10
1.5.4  分布式应用  10
1.6  Node的使用者  10
1.7  参考资源  11
第2章 模块机制  12
2.1  CommonJS规范  13
2.1.1  CommonJS的出发点  13
2.1.2  CommonJS的模块规范  14
2.2  Node的模块实现  15
2.2.1  优先从缓存加载  16
2.2.2  路径分析和文件定位  16
2.2.3  模块编译  18
2.3  核心模块  20
2.3.1  JavaScript核心模块的编译过程  21
2.3.2  C/C  核心模块的编译过程  22
2.3.3  核心模块的引入流程  25
2.3.4  编写核心模块  25
2.4  C/C  扩展模块  27
2.4.1  前提条件  28
2.4.2  C/C  扩展模块的编写  29
2.4.3  C/C  扩展模块的编译  30
2.4.4  C/C  扩展模块的加载  31
2.5  模块调用栈  32
2.6  包与NPM  33
2.6.1  包结构  34
2.6.2  包描述文件与NPM  34
2.6.3  NPM常用功能  37
2.6.4  局域NPM  42
2.6.5  NPM潜在问题  43
2.7  前后端共用模块  44
2.7.1  模块的侧重点  44
2.7.2  AMD规范  44
2.7.3  CMD规范  45
2.7.4  兼容多种模块规范  45
2.8  总结  46
2.9  参考资源  46
第3章 异步I/O  47
3.1  为什么要异步I/O  47
3.1.1  用户体验  48
3.1.2  资源分配  49
3.2  异步I/O实现现状  50
3.2.1  异步I/O与非阻塞I/O  50
3.2.2  理想的非阻塞异步I/O  54
3.2.3  现实的异步I/O  54
3.3  Node的异步I/O  56
3.3.1  事件循环  56
3.3.2  观察者  56
3.3.3  请求对象  57
3.3.4  执行回调  59
3.3.5  小结  60
3.4  非I/O的异步API  60
3.4.1  定时器  60
3.4.2  process.nextTick()  61
3.4.3  setImmediate()  62
3.5  事件驱动与高性能服务器  63
3.6  总结  65
3.7  参考资源  65
第4章 异步编程  66
4.1  函数式编程  66
4.1.1  高阶函数  66
4.1.2  偏函数用法  67
4.2  异步编程的优势与难点  68
4.2.1  优势  69
4.2.2  难点  70
4.3  异步编程解决方案  74
4.3.1  事件发布/订阅模式  74
4.3.2  Promise/Deferred模式  82
4.3.3  流程控制库  93
4.4  异步并发控制  105
4.4.1  bagpipe的解决方案  105
4.4.2  async的解决方案  109
4.5  总结  110
4.6  参考资源  110
第5章 内存控制  111
5.1  V8的垃圾回收机制与内存限制  111
5.1.1  Node与V8  112
5.1.2  V8的内存限制  112
5.1.3  V8的对象分配  112
5.1.4  V8的垃圾回收机制  113
5.1.5  查看垃圾回收日志  119
5.2  高效使用内存  121
5.2.1  作用域  121
5.2.2  闭包  123
5.2.3  小结  124
5.3  内存指标  124
5.3.1  查看内存使用情况  124
5.3.2  堆外内存  126
5.3.3  小结  127
5.4  内存泄漏  127
5.4.1  慎将内存当做缓存  127
5.4.2  关注队列状态  130
5.5  内存泄漏排查  130
5.5.1  node-heapdump  131
5.5.2  node-memwatch  132
5.5.3  小结  135
5.6  大内存应用  135
5.7  总结  136
5.8  参考资源  136
第6章  理解Buffer  137
6.1  Buffer结构  137
6.1.1  模块结构  137
6.1.2  Buffer对象  138
6.1.3  Buffer内存分配  139
6.2  Buffer的转换  141
6.2.1  字符串转Buffer  141
6.2.2  Buffer转字符串  142
6.2.3  Buffer不支持的编码类型  142
6.3  Buffer的拼接  143
6.3.1  乱码是如何产生的  144
6.3.2  setEncoding()与string_decoder()  144
6.3.3  正确拼接Buffer  145
6.4  Buffer与性能  146
6.5  总结  149
6.6  参考资源  149
第7章 网络编程  150
7.1  构建TCP服务  150
7.1.1  TCP  150
7.1.2  创建TCP服务器端  151
7.1.3  TCP服务的事件  153
7.2  构建UDP服务  154
7.2.1  创建UDP套接字  154
7.2.2  创建UDP服务器端  154
7.2.3  创建UDP客户端  155
7.2.4  UDP套接字事件  155
7.3  构建HTTP服务  155
7.3.1  HTTP  156
7.3.2  http模块  157
7.3.3  HTTP客户端  161
7.4  构建WebSocket服务  163
7.4.1  WebSocket握手  164
7.4.2  WebSocket数据传输  167
7.4.3  小结  169
7.5  网络服务与安全  169
7.5.1  TLS/SSL  170
7.5.2  TLS服务  172
7.5.3  HTTPS服务  173
7.6  总结  175
7.7  参考资源  176
第8章 构建Web应用  177
8.1  基础功能  177
8.1.1  请求方法  178
8.1.2  路径解析  179
8.1.3  查询字符串  180
8.1.4  Cookie  181
8.1.5  Session  184
8.1.6  缓存  190
8.1.7  Basic认证  193
8.2  数据上传  195
8.2.1  表单数据  195
8.2.2  其他格式  196
8.2.3  附件上传  197
8.2.4  数据上传与安全  199
8.3  路由解析  201
8.3.1  文件路径型  202
8.3.2  MVC  202
8.3.3  RESTful  207
8.4  中间件  210
8.4.1  异常处理  214
8.4.2  中间件与性能  215
8.4.3  小结  216
8.5  页面渲染  217
8.5.1  内容响应  217
8.5.2  视图渲染  219
8.5.3  模板  220
8.5.4  Bigpipe  231
8.6  总结  235
8.7  参考资源  235
第9章 玩转进程  236
9.1  服务模型的变迁  236
9.1.1  石器时代:同步  236
9.1.2  青铜时代:复制进程  237
9.1.3  白银时代:多线程  237
9.1.4  黄金时代:事件驱动  237
9.2  多进程架构  238
9.2.1  创建子进程  239
9.2.2  进程间通信  240
9.2.3  句柄传递  242
9.2.4  小结  247
9.3  集群稳定之路  248
9.3.1  进程事件  248
9.3.2  自动重启  249
9.3.3  负载均衡  254
9.3.4  状态共享  255
9.4  Cluster模块  257
9.4.1  Cluster工作原理  258
9.4.2  Cluster事件  259
9.5  总结  259
9.6  参考资源  260
第10章 测试  261
10.1  单元测试  261
10.1.1  单元测试的意义  261
10.1.2  单元测试介绍  263
10.1.3  工程化与自动化  276
10.1.4  小结  277
10.2  性能测试  278
10.2.1  基准测试  278
10.2.2  压力测试  280
10.2.3  基准测试驱动开发  281
10.2.4  测试数据与业务数据的转换  283
10.3  总结  284
10.4  参考资源  284
第11章 产品化  285
11.1  项目工程化  285
11.1.1  目录结构  285
11.1.2  构建工具  286
11.1.3  编码规范  289
11.1.4  代码审查  289
11.2  部署流程  290
11.2.1  部署环境  291
11.2.2  部署操作  291
11.3  性能  293
11.3.1  动静分离  293
11.3.2  启用缓存  294
11.3.3  多进程架构  294
11.3.4  读写分离  295
11.4  日志  295
11.4.1  访问日志  295
11.4.2  异常日志  296
11.4.3  日志与数据库  299
11.4.4  分割日志  299
11.4.5  小结  299
11.5  监控报警  299
11.5.1  监控  300
11.5.2  报警的实现  302
11.5.3  监控系统的稳定性  303
11.6  稳定性  303
11.7  异构共存  304
11.8  总结  305
11.9  参考资源  305
附录A  安装Node  306
A.1  Windows系统下的Node安装  306
A.2  Mac系统下Node的安装  307
A.3  Linux系统下Node的安装  308
A.4  总结  309
A.5  参考资源  309
附录B  调试Node  310
B.1  Debugger  310
B.2  Node Inspector  311
B.2.1  安装Node Inspector  312
B.2.2  错误堆栈  312
B.3  总结  313
附录C  Node编码规范  314
C.1  根源  314
C.2  编码规范  315
C.2.1  空格与格式  315
C.2.2  命名规范  317
C.2.3  比较操作  318
C.2.4  字面量  318
C.2.5  作用域  318
C.2.6  数组与对象  319
C.2.7  异步  320
C.2.8  类与模块  320
C.2.9  注解规范  321
C.3  实践  321
C.3.1  冲突的解决原则  321
C.3.2  给编辑器设置检测工具  321
C.3.3  版本控制中的hook  322
C.3.4  持续集成  322
C.4  总结  322
C.5  参考资源  323
附录D  搭建局域NPM仓库  324
D.1  NPM仓库的安装  325
D.1.1  安装Erlang和CouchDB  325
D.1.2  搭建NPM仓库  326
D.2  高阶应用  328
D.2.1  镜像仓库  328
D.2.2  私有模块应用  328
D.2.3  纯私有仓库  329
D.3  总结  331
D.4  参考资源  332



内容摘要

本书从不同的视角介绍了 Node 内在的特点和结构。由首章Node 介绍为索引,涉及Node的各个方面,主要内容包含模块机制的揭示、异步I/O 实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer的细节、Node 中的网络编程基础、Node 中的Web 开发、进程间的消息传递、Node 测试以及通过Node构建产品需要的注意事项。*后的附录介绍了Node 的安装、调试、编码规范和NPM 仓库等事宜。
 本书适合想深入了解 Node 的人员阅读。



主编推荐

朴灵
真名田永强,文艺型码农,就职于*数据平台,资深工程师,Node.js布道者,写了多篇文章介绍Node.js的细节。活跃于CNode社区,是线下会议NodeParty的组织者和JSConfChina(沪JS和京JS)的组织者之一。热爱开源,多个Node.js模块的作者。叩首问路,码梦为生。



精彩内容

2006年至今,我们时常可以看到JavaScript的新闻,刚开始只是JavaScript引擎性能的提升,到后来发现很多是来自HTML5和Node创造的奇迹。如果只看表面,很容易让人感觉这又是一颗卫星。这种现象让人觉得不可信,所以出现了以下各种版本的误解。
? Node肯定是几个前端工程师在实验室里捣鼓出来的。
? 为了后端而后端,有意思吗?
? 怎么又发明了一门新语言?
? JavaScript承担的责任太重了。
? 直觉上,JavaScript不应该运行在后端。
? 前端工程师要逆袭了。
一方面,大家看到JavaScript在各个地方放出异彩,其他语言的开发者既羡慕它的成果,又担心它对当前所从事的语言造成冲击;另一方面,人们还是有JavaScript只能做前端脚本的定势思维。究其原因,还是因为人们缺乏历史观层次上的认知,所以会产生一些莫须有的惴惴不安。
1995年,JavaScript随网景公司发布的Netscape Navigator2.0发布,它早命名为LiveScript,随后更名为JavaScript。它出自如今的Mozilla公司的CTO——BrendanEich之手,其产生来源于网景公司发布的NetscapeNavigator浏览器需要一种脚本语言来协助浏览器做一些简单的动态操作。当时网景公司与Sun公司合作密切,不懂技术的管理层希望得到一个Java的脚本版语言,以期能像Java一样风靡。BrendanEich原本进入网景公司是希望做Scheme语言的开发,但是却接到了一个不喜欢的任务,但迫于当时形势,不得不完成此事,于是JavaScript之父在10天的时间里仓促完成了JavaScript的设计,当时的项目代号是Mocha,名字叫LiveScript。
这门语言除了看起来像Java外,本质与Java语言相去甚远,管理层期望的JavaScript其实借鉴了C、Scheme、Self、Java的设计。尽管仓促,但是这门语言还是借鉴了其他语言的不少优点,如函数式、原型链继承等。处于Java阴影下的这门语言获得了它终的名字:JavaScript。至今,仍然还有许多人分不清Java与JavaScript的关系,就像分不清雷锋与雷峰塔一样。
虽然JavaScript的产生与NetscapeNavigator浏览器的需求有关系,但它并非只是设计出来用于浏览器前端的。早在1994年,网景公司就公布了其NetscapeEnterpriseServer中的一种服务器端脚本实现,它的名字叫LiveWire,是早的服务器端JavaScript,甚至早于浏览器中的JavaScript公布。对于这门图灵完备的语言,网景早就开始尝试将它用在后端。
随后,微软在次浏览器大战时,于1996年发布的IE3.0中也包含了它的脚本语言:JScript。基于商标的原因,它叫JScript,但是与JavaScript兼容。在1997年年初,微软在它的服务器IIS3.0中也包含了JScript,这就是我们在ASP中能使用的脚本语言。鉴于微软处处与网景针锋相对,出于保护自己的目的,网景公司推进了JavaScript的标准化进程,于1996年11月将JavaScript递交给ECMA国际标准组织,在1997年7月公布了个版本,是为ECMA-262号标准,又称ECMAScript。
可以看到,JavaScript一早就能运行在前后端,但风云变幻,在前后端各自的待遇却不尽相同。伴随着Java、PHP、.NET等服务器端技术的风靡,与前端浏览器中的JavaScript越来越重要相比,服务器端JavaScript逐渐式微。只剩下Rhino、SpiderMonkey用于工具。
然而,这个世界是变化的。次浏览器大战落幕后的JavaScript的世界有些平静,但依然在萌生一些变化。Google对Ajax的应用让JavaScript变得越来越重要。Firefox的发布掀起了对IE的反攻,迎来了第二次浏览器大战,竞争令JavaScript的性能不断提升,Chrome的加入令它高潮迭出。CommonJS规范的提出,不断在完善JavaScript。ECMAScript标准的不断推进,令语言更加精炼简洁,不停地去芜存菁。
浏览器端JavaScript在Web应用中盛行,甚至让人们忘掉了JavaScript可以在服务器端运行这码事。但是,服务器端JavaScript现在回来了,因为Node诞生了。Node的诞生离不开上述的历史契机,服务器端JavaScript在漫长的历史中长期停滞留下空白,但Node重新将这个领域激活。RyanDahl基于对高性能Web服务器的探索,无意间促成了服务器端JavaScript领域的焕然一新。Node凭借V8的高性能和异步I/O模型将JavaScript重新推向了一个高潮。现在,Node不仅满足JavaScript同时运行在前后端,而且性能还十分高效。与传统印象中的不同,它甚至可比于当前的高效脚本语言。
奇妙的反应还在继续,前后端要跨语言开发的现状已经开始改变,因为语言堆栈的不同,开发者的分工也进行了细分:前端工程师和后端工程师。专业技能因为分工而精进,但也将技能变为专利,似乎前端工程师不能进行后端开发,后端工程师搞不定前端开发,犹如树立的墙。但Node的出现令这种分工的界限又开始模糊了。同时一些后端工程师也关注到Node,他们甚至不关心前后端语言是否一致,而是赤裸裸地表示对Node高性能的垂涎,如实时、高并发等。
大量的前后端工程师加入了Node的开发阵营,GitHub上JavaScript是活跃的开发语言,NPM社区第三方模块恐怖的增长速度和下载量都

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP