From 70f9f602cf8ce5b5c8fb22676637036fa3ca1b0b Mon Sep 17 00:00:00 2001 From: ZiuChen <457353192@qq.com> Date: Tue, 7 Feb 2023 23:31:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0=20?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E5=B7=A5=E7=A8=8B=E5=8C=96/Node.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.ts | 6 ++- .../The Node.js System.jpeg | Bin 0 -> 50035 bytes docs/note/Front-end Engineering.md | 47 ++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 docs/note/Front-end Engineering.assets/The Node.js System.jpeg create mode 100644 docs/note/Front-end Engineering.md diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 6d316467..387af3cb 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -33,7 +33,8 @@ export default defineConfig({ items: [ { text: 'JavaScript基础', link: '/note/JavaScript' }, { text: 'CSS基础', link: '/note/CSS' }, - { text: 'JavaScript进阶', link: '/note/JavaScriptEnhanced' } + { text: 'JavaScript进阶', link: '/note/JavaScriptEnhanced' }, + { text: '前端工程化', link: '/note/Front-end Engineering' } ] }, { @@ -73,7 +74,8 @@ export default defineConfig({ items: [ { text: 'JavaScript基础', link: '/note/JavaScript' }, { text: 'CSS基础', link: '/note/CSS' }, - { text: 'JavaScript进阶', link: '/note/JavaScriptEnhanced' } + { text: 'JavaScript进阶', link: '/note/JavaScriptEnhanced' }, + { text: '前端工程化', link: '/note/Front-end Engineering' } ] } ], diff --git a/docs/note/Front-end Engineering.assets/The Node.js System.jpeg b/docs/note/Front-end Engineering.assets/The Node.js System.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1054480924e80a4b3bcfa13db9bef9ace19a403e GIT binary patch literal 50035 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 Blink 是 Google Chrome 浏览器的渲染引擎,V8 是 Blink 内置的 JavaScript 引擎 + + - 预分析:检查语法错误但不生成AST树 + - 生成AST:语法分析、词法分析后,生成抽象语法树(AST) + - AST 为每一行代码定义键值对。初始类型标识符定义 AST 属于一个程序,然后所有代码行将定义在主体内部,主体是一个对象数组。 + - 生成字节码:基线编译器(Ignition)将 AST 转换为字节码 + - 生成机器代码:优化编译器 (Turbofan) 将字节码转换为优化的机器代码。另外,在逐行执行字节码的过程中,**如果一段代码经常被执行,V8会直接将这段代码转换并保存为机器码**,下次执行不需要经过字节码,优化了执行速度 + +- Node.js + + - 只处理JavaScript代码 内部V8引擎负责JS代码的执行 + - JavaScript代码 -> V8 -> Node.js Bindings -> LibUV + - LibUV是使用**C语言编写的库**,提供了**事件循环、文件系统读写、网络IO、线程池**等等内容 + +![The Node.js System](Front-end Engineering.assets/The Node.js System.jpeg) + +### Node.js的应用场景 + +- 前端开发的库都是以node包形式管理的 +- npm yarn pnpm成为前端开发使用最多的工具 +- 使用Node.js作为Web服务器开发、中间件、代理服务器 +- 借助Node.js完成前后端渲染的同构应用 +- 编写脚本工具 构建项目 打包代码等 +- Electron桌面应用程序