Nodejs学习笔记【三】

116 阅读3分钟

全局变量--Buffer

Buffer让JavaScript可以操作二进制。Nodejs平台下JavaScript可实现IO。IO行为操作的是二进制数据。Stream流操作并非Nodejs独创,流操作配合管道实现数据分段传输。

image.png Nodejs中Buffer是一片内存空间。

  • 无须require的一个全局变量
  • 实现Nodejs平台下的二进制数据操作
  • 不占据V8堆内存大小的内存空间
  • 内存的使用由Node来控制,由V8的GC回收
  • 一般配合Stream流使用,充当缓冲区

创建Buffer

Buffer是Nodejs的内置类

创建Buffer实例

  • alloc:创建指定字节大小的buffer
  • allocUnsafe:创建指定大小的buffer(不安全)
  • from:接收数据,创建buffer

Buffer实例方法

  • fill:使用数据填充buffer
  • write:
  • toString:
  • slice:
  • indexOf:
  • copy:

Buffer静态方法

  • concat:将多个buffer拼接成一个新的buffer
  • isBuffer:判断当前数据是否为buffer

核心模块--FS

  • FS是内置核心模块,提供文件系统操作的API
  • 代码层面上fs分为基本操作类和常用API
  • 权限位、标识符、文件描述符 image.png

前置知识

权限位、标识符、文件描述符

  • 权限位:用户对于文件所具备的操作权限(r:读,w:写,x:执行权限) image.png
  • 标识位: Nodejs中flag表示对文件操作方式 image.png
  • 文件描述符:fd就是操作系统分配给被打开文件的标识

FS常用API

文件操作API

image.png

目录操作API

image.png

模块化规范

  • 模块化是前端走向工程化中的重要一环
  • 早期JavaScript语言层面没有模块化规范
  • Commonjs、AMD、CMD都是模块化规范
  • ES6中将模块化纳入标准规范
  • 当下常用规范是Commonjs与ESM

Commonjs规范

主要应用于Nodejs,是语言层面上的规范。同步加载(所有不适用于浏览器环境)

  • 模块引用
  • 模块定义
  • 模块标识

nodejs与Commonjs

image.png

  • 任意一个文件就是一模块,具有独立作用域
  • 使用require导入其他模块
  • 将模块ID导入require实现目标模块定位

module属性

  • 任意js文件就是一个模块,可以直接使用module属性
  • id:返回模块标识符,一般是一个绝对路径
  • filename:返回文件模块的绝对路径
  • loaded:返回布尔值,表示模块是否完成加载
  • parent:返回对象存放调用当前模块的模块
  • children:返回数组,存放当前模块调用的其他模块
  • exports:返回当前模块需要暴露的内容
  • paths:返回数组,存放不同目录下的node_modules位置

module.exports与exports的区别

exports是nodejs为了方便导出自己定义的一个指向module.exports的变量,不能直接进行赋值 image.png

require属性

  • 读入并且执行一个模块文件
  • resolve:返回模块文件绝对路径
  • extensions:依据不同后缀名执行解析操作
  • main:返回主模块对象

模块分类及加载流程

模块分类

  • 内置模块
  • 文件模块

模块加载速度

image.png

加载流程

image.png

1.路径分析之标识符:路径标识符,非路径标识符(核心模块)

image.png 找不着路径会抛出错误

image.png

2.文件定位

image.png

3.编译执行

image.png

js文件的编译执行

image.png

JSON文件编译执行

将读取到的内容通过JSON.parse()进行解析

缓存优化原则

image.png