简介
Node.js是一个基于V8 JavaScript引擎的JavaScript运行时的环境
浏览器内核
事实上,我们经常说的浏览器内核指的是浏览器的排版引擎
排版引擎,也称为浏览器引擎、页面渲染引擎或样板引擎
渲染引擎工作的过程
在HTML解析的过程中如果遇到了script标签,那么浏览器就会停止解析HTML,转而去加载和执行JavaScript代码
那么,为什么不去直接异步加载执行JavaScript代码,而非要停止HTML的解析呢?
因为JavaScript代码可以操作我们的DOM,浏览器希望将HTML解析的DOM和JavaScript操作之后的DOM放到一起来生成最终的DOM树,而不是频繁的去生成新的DOM树
JavaScript引擎
为什么需要JavaScript引擎呢?
- 事实上我们编写的JavaScript代码无论是交给浏览器还是
Node去执行,最终都是需要被CPU处理的 - 但是
CPU只认识机器语言,所以我们需要JavaScript引擎帮助我们将JavaScript代码先翻译成汇编语言,然后再翻译成机器语言之后才能执行
JS引擎和浏览器内核的关系
这里我们先以Webkit为例,Webkit事实上由两部分组成
WebCore:负责HTML解析、布局、渲染等等相关的工作JavaScriptCore:解析、执行JavaScript代码,微信小程序中的JS代码用的就是JsCore来执行的
V8引擎
- V8是用
C++编写的Google开源高性能的JavaScript和WebAssembly引擎,它用于Chrome和Node.js - V8引擎是跨平台的
- V8可以独立运行,也可以嵌入到任何
C++应用程序中
Node.js是什么?
也就是说Node.js是基于V8引擎来执行JavaScript代码的,但是其不仅仅只有V8引擎
- 无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码的
- 但是在Chrome浏览器中,还需要有解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等
- 另外,在Node.js中我们也需要一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作
浏览器和Node.js架构的区别
Node.js架构
Node.js并不是单纯的由js来进行编写的,其不同的模块用到了不同的语言,比如V8引擎是用C++编写的,Node对应的一些API又是用JS来编写的,LIBUV这个库是由C语言来编写的,所以不能单纯的说Node是由某一种语言来编写出来的
Node.js的应用场景
- 目前前端开发的库都是以node包的形式进行管理的
npm(安装node的时候会自动安装npm)、yarn工具成为前端开发使用最多的工具- 越来越多的公司使用Node.js作为服务器开发
- 大量项目需要借助Node.js完成前后端渲染的同构引用
- 资深前端工程师需要为项目编写脚本工具
- 很多企业在使用
Electron来开发桌面应用程序(比如Vscode,其基于Node.js和Chromium)
Node的版本工具(以下工具Mac才支持,Windows是不支持的,但支持nvm-window)
- 安装
n:直接使用npm安装即可
npm install -g n
- 安装最新的lts版本
- 前面添加的
sudo是权限问题 - 可以同时安装多个版本,之后我们可以通过n快速在两个版本之间来回切换
-
n lts(安装最新的lts版本)n latest(安装最新的版本)
Node的REPL
什么是REPL呢?
- REPL是
Read-Eval-Print Loop的简称,翻译为“读取-求值-输出”循环 - REPL是一个简单的、交互式的编程环境
其实你在浏览器的控制台或者是开启了node环境下的命令行中编写代码都算是REPL