Node学习之笔录

一、Node背景

1、技术栈:
http、js、es6、命令行

2、定义:
Node不是一门语言, 是用js编写的一种基于v8引擎的事件驱动、非I/O阻塞的技术

3、工作原理:
一个CPU只开一个进程, 一个进程中只有一个线程(event loop);
(单线程只针对主进程, CPU有几个核, 就启几个进程)

4、高性能前提:
Web场景下、 I/O操作密集

5、使用场景:
1)、Web Server
2)、 本地代码构建
3)、 使用工具开发 (爬虫)

6、引申概念:

1、进程: 进行中的程序 (计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位);
2、线程: 进程内相对独立的、可调度的执行单元, 与同属一个进程的线程共享资源;
3、阻塞I/O: (input/output) 性能慢: 逐条顺序执行, 待底层操作完成并返回后进行下一步;
4、非阻塞: 不等待, 立即返回
5、操作分类:
- 1). CPU: 压缩、解压、加密、解密;
- 2). GPU: 图形计算;
- 3). I/O: 文件操作、数据库、网络操作;

二、环境

( 可通过npm root -g查看根路径安装位置 )

1、commonJS规范:
1)、 每个文件都是一个模块,有自己的作用域;
2)、 在模块内部module变量代表模块本身;
3)、module.exports属性代表模块对外的接口

2、require规则:
1)、 /表示绝对路径, ./代表相对路径;
2)、 支持 js /json /node, 如果不写, 会默认依次尝试;
3)、 不写后缀则认为是build-in模块或各级node-modules内的第三方模块
(如内置模块: fs, 第三方模块: chalk)

3、require特性:
1)、 加载模块时所有语句都会被执行, 加载后会缓存内容;
2)、 一旦出现某个模块被循环加载,就只输出已执行部分,未执行部分不会被加载(要避免);

4、exports和module.exports区别:
见于( function( exports, require, module, __filename, __dirname ){ ... } )中,
exports可以看作是module.exports的快捷方式引入, 相当于:
const exports = module.exports;
exports可以给其添加属性, 但应注意不能修改其指向 !

5、golbal:
默认常用方法: CommonJS、Buffer、process、console、timer
const { argv, argv0, execArgv、execPath} = process;
const {env} = process;
timer中有一个新增方法: setImmediate, 其与时间无关, 只有一个参数, 与nextTick 方法很像, 执行顺序: nextTick > setTimeout > setImmediate

  • nextTick: 插入队尾, 其中可嵌套使用, 会导致无法执行下一步;
  • setImmediate: node优化版本中提供, 会插入下一个队列首部, 更推荐使用;

三、调试

1、vscode: (需一些额外的配置)
2、Inspector:

  1. 运行: node --inspect xx.js, 为方便调试, 参数可用--inspect-brk会在入口停下来;
  2. 打开浏览器 chrome://inspect 中Remote Target会新增target, 点击inspect即可;

你可能感兴趣的:(Node学习之笔录)