标签分类
当前位置:首页 > 程序设计电子书 > Node.js电子书网盘下载
深入浅出Node.js 深入浅出Node.js
qingyi5000

qingyi5000 提供上传

资源
27
粉丝
45
喜欢
221
评论
2

    深入浅出Node.js PDF 高质量版

    Node.js电子书
    • 发布时间:

    给大家带来的一篇关于Node.js相关的电子书资源,介绍了关于深入浅出、Node.js方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小19.3 MB,朴灵编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.4,更多相关的学习资源可以参阅 程序设计电子书Web前端视频、等栏目。

  • 深入浅出Node.js PDF 下载
  • 下载地址:https://pan.baidu.com/s/1isE_xmPpqrdN9jPdSXZmfw
  • 分享码:kdd6
  • 深入浅出Node.js PDF

    这书从不一样的角度介绍了 Node 本质的特性和构造。由首章Node 介绍为数据库索引,涉及到Node的各个方面,主题思想包括控制模块体制的揭示、多线程I/O 保持原理的呈现、多线程编写程序的讨论、运行内存操纵的介绍、二进制统计数据Buffer的关键点、Node 中的网络编程基本、Node 中的Web 开发设计、系统进程间的消息传递、Node 检测及其根据Node搭建商品必须的常见问题。*后的附则介绍了Node 的安裝、调节、编号标准和NPM 库房等事项。

    这书合适想深层次掌握 Node 的工作人员阅读文章。

    目录

    • 第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

    上一篇:JavaScript DOM编程艺术  下一篇:JavaScript之美

    展开 +

    收起 -

    码小辫二维码
     

    Node.js相关电子书
    学习笔记
    网友NO.130102

    Node.JS循环删除非空文件夹及子目录下的所有文件

    最近要实现一个循环文件夹的功能,文件夹可能不是空的,还可能带有子文件夹和文件,网上找了一些现有的库,但是都不提供删除进度。所以就自己写了一个。 var fs = require('fs')var path = require('path')var remove = function(tarPath, cb, removeStates) { if (!removeStates) { removeStates = { cur: 0, all: 0 } } else { if (!removeStates.cur) { removeStates.cur = 0; } if (!removeStates.all) { removeStates.all = 0; } } removeStates.all++; fs.stat(tarPath, function(err, states) { removeStates.cur++; if (err) { cb cb() return } if (states.isDirectory()) { fs.readdir(tarPath, function(err, files) { if (err) { console.log(err) cb cb() return } if (files.length 1) { fs.rmdir(tarPath, cb) return } var count = 0 var checkEnd = function() { if (++count == files.length) { fs.rmdir(tarPath, cb) } } files.forEach(function(file) { remove(path.join(tarPath, file), checkEnd, removeStates) }) }) } else { fs.unlink(tarPath, function(err) { if (err) { console.log(err) } cb cb() return }) } }) return removeStates} 使用很简单 var states = remove('./testdir', function() { console.log('delete complete') clearInterval(checkTimer)});var checkTimer = setInterval(function() { console.log(states)}, 500); 输出结果: node remove.js{ cur: 546, all: 546 }delete complete PS:下面看下NodeJs递归删除非空文件夹 此文由于第一次使用fs.unlink()删除文件夹时报“Error: EPERM: operation not permitted, unlink”错误而写,这……

    网友NO.276000

    Node.js连接mongodb实例代码

    前面介绍了node.js操作mysql以及redis的内容,这里继续学习操作mongodb的内容。 安装驱动 安装命令 cnpm install mongodb 安装成功 数据库操作 因为mongodb是文档类型的数据库,与mysql有很大不同,mongodb会自动创建数据库和集合,并不需要提前进行手动创建。 Insert var MongoClient = require("mongodb").MongoClient;var DB_CONN_STR = "mongodb://sa:sa@localhost:27017/test_db";var insertData = function (db, callback) { //连接数据表my_firsrt_collection var collection = db.collection("my_firsrt_collection"); var data = [{ "name": "wolfy1", "age": 20 }, { "name": "wolfy2", "age": 20 }] collection.insert(data, function (err, result) { if (err) { console.log("error:" + err); return; }; callback(result); });}; MongoClient.connect(DB_CONN_STR, function (err, db) { if (err) { console.log("连接失败:" + err); return; }; console.log("连接成功"); insertData(db,function(result){ console.log(result); db.close(); }); }); 结果 查询数据 var MongoClient = require("mongodb").MongoClient;var DB_CONN_STR = "mongodb://sa:sa@localhost:27017/test_db"; //查询 var queryData = function (db, callback) { //连接数据表my_firsrt_collection var collection = db.collection("my_firsrt_collection"); //查询条件 var where = { "name": "wolfy1" }; collection.find(where).toArray(function (err, result) { if (err) { console.log("error:" + err); return; }; callback(result); }); }; MongoClient.connect(DB_CONN_STR, function (er……

    网友NO.597680

    Node.js重新刷新session过期时间的方法

    在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态。那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新session的过期时间呢?类似于ASP.NET中session会话状态,只要在一定的时间内页面一直保持活动状态,session就不会过期。通过下面的代码可以实现这个功能,我们在Node.js的代码中加入下面的中间件: // use this middleware to reset cookie expiration time// when user hit page every timeapp.use(function(req, res, next){req.session._garbage = Date();req.session.touch();next();}); 这样,每次当有请求过来时,该中间件都会重新修改session的过期时间,从而达到预期的效果。 然后,在代码中加入对session的使用: app.use(session({secret: 'test', resave: false, saveUninitialized: true,cookie:{maxAge: 1000*60*60 // default session expiration is set to 1 hour},store: new MemcachedStore({hosts: ['127.0.0.1:9000'],prefix: 'test_'})})); 上面的session使用了memcached作为session的存储方式,有关如何使用memcached可以参考Github上的这个地址https://github.com/balor/connect-memcached 当然,你也可以使用其它的session存储方式,例如memoryStore,redis,mongoDB等等,使用方法都大同小异。 下面给大家说说Node.js session 存储的几种方法 node.js session store 有可选的四种方法的性能测试如下……

    网友NO.354415

    基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践

    淘宝网线上应用的传统软件栈结构为 Nginx + Velocity + Java,即: 在这个体系中,Nginx 将请求转发给 Java 应用,后者处理完事务,再将数据用 Velocity 模板渲染成最终的页面。 引入 Node.js 之后,我们势必要面临以下几个问题: 技术栈的拓扑结构该如何设计,部署方式该如何选择,才算是科学合理?项目完成后,该如何切分流量,对运维来说才算是方便快捷?遇到线上的问题,如何最快地解除险情,避免更大的损失?如何确保应用的健康情况,在负载均衡调度的层面加以管理?承系统拓扑 按照我们在前后端分离的思考与实践(二)- 基于前后端分离的模版探索一文中的思路,Velocity 需要被 Node.js 取代,从而让这个结构变成: 这当然是最理想的目标。然而,在传统栈中首次引入 Node.js 这一层毕竟是个新尝试。为了稳妥起见,我们决定只在收藏夹的宝贝收藏页面(shoucang.taobao.com/item_collect.htm)启用新的技术,其它页面沿用传统方案。即,由 Nginx 判断请求的页面类型,决定这个请求究竟是要转发给 Node.js 还是 Java。于是,最后的结构成了: 部署方案 上面的结构看起来没什么问题了,但其实新问题还等在前面。在传统结构中,Nginx 与 Java 是部署在同一台服务器上的,Nginx 监听 80 端口,与监听高位 7001 端口的 Java 通信。现在引入了 ……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明