深入浅出nodejs
深入浅出nodejs
第一章 nodejs简介
1.1 nodejs诞生历程
浏览器内核组成:渲染引擎+JS引擎
浏览器一般由七个模块组成,User Interface(用户界面)、Browser engine(浏览器引擎)、Rendering engine(渲染引擎)、Networking(网络)、JavaScript Interpreter(js解释器)、UI Backend(UI 后端)、Date Persistence(数据持久化存储)
nodejs是基于V8引擎(C++开发,开源的JavaScript引擎,Google chrome,运行速度媲美二进制程序)开发的轻量级web服务器库。
1.2 node命名与起源
选择javascript:高性能、符合事件驱动、没有历史包袱
nodejs发展为一个强制不共享任何资源的单线程、单进程系统,包含十分适宜的网络的库,为构建大型分布式应用程序提供基础设施,其目标也是成为一个构建快速、可伸缩的网络应用平台。
js是一门图灵完备的语言,图灵完备:在可计算性理论中,若一系列操作数据的规则可用来模拟单带图灵机,那么他就是图灵完备的。
1.3 node给javascript带来的意义
Node和chrome十分相似,他们都是基于事件驱动的异步架构,浏览器通过事件驱动来服务界面上的交互,Node通过事件驱动来服务I/O。
组件构成:
Chrome浏览器:HTML+JavaScript+Webkit+V8+中间层+网卡+硬盘+显卡
Node:JavaScript+V8+中间层(libuv)+网卡+硬盘……
1.4 nodejs特点
1.4.1 异步I/O
1.4.2 事件和回调函数
1.4.3 单线程
1.4.4 跨平台
1.5nodejs应用场景
第二章 模块机制
第三章 异步I/O
第四章 异步编程
第五章 内存控制
第六章 理解Buffer
第七章 网络编程
第八章 构建web应用
第九章 玩转进程
第十章 测试
第十一章 产品化
附录部分
安装nodejs
调试nodejs
node编码规范
搭建局域网npm仓库
nodejs学习指南
Nodejs核心API
Buffer(缓冲)
fs(文件系统)
path(路径)Nodejs编程基础
http(服务器)
- 学习数据库MySQL
学习数据库MySQL
Nodejs操作MySQL-增删改查
存储Nodejs程序中的数据
Connect
Connect自带的中间件
Express
Express进阶
Nodejs测试
Nodejs爬虫
Nodejs读取文件
nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三个方法,针对写操作为我们提供了writeFile,write, createWriteStream三个方法,下面分析一下它们的区别:
readFile和writeFile
readFile
方法是将要读取的文件内容完整读入缓存区,再从该缓存区中读取文件内容1
2
3fs.readFile('./test.txt', 'utf8', function(err, data){
console.log(data);
});对应的同步方法:
1
2var data = fs.readFileSync('./test.txt','utf-8');
console.log(data);同步与异步的区别:
在使用同步方法执行的操作结束之前,不能执行后续代码的执行;而异步方法将操作结果作为回调函数的参数返回,方法调用之后,就可以立即执行后续代码,读取完毕后会调用对应的回调函数。
异步读取文件的时候由操作系统在后台进行读取,不会阻碍下面的代码执行。同步读取的时候会阻碍下面的代码执行
writeFile
方法是将要写入的文件内容完整的读入缓存区,然后一次性的将缓存区中的内容写入都文件中1
2
3
4
5
6
7
8
9
10
11// fs.writeFile(filename, data[, options], callback)
/* 异步方法 */
var fs = require("fs");
fs.writeFile("./demo.txt", "天才美少女卡莎", "utf-8", function (err) {
if (err) console.log("出错了!");
else console.log("写入成功!");
});
/* 同步方法 */
fs.writeFileSync('./message.txt','天才美少女卡莎');
以上的读写操作,Node.js将文件内容视为一个整体,为其分配缓存区并且一次性将文件内容读取到缓存区中,在这个期间,Node.js将不能执行任何其他处理。所以当读写大文件的时候,有可能造成缓存区“爆仓”。
read和write
- read或readSync方法读取文件内容是不断地将文件中的一小块内容读入缓存区,最后从该缓存区中读取文件内容
createReadStream和createWriteStream
灯火阑珊