深入浅出nodejs

深入浅出nodejs

第一章 nodejs简介

1.1 nodejs诞生历程

浏览器内核组成:渲染引擎+JS引擎

image-20220121215537942

浏览器一般由七个模块组成,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
      3
      fs.readFile('./test.txt', 'utf8', function(err, data){
      console.log(data);
      });

      对应的同步方法:

      1
      2
      var 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