深入Node

作者: Mr_Treasure | 来源:发表于2018-03-29 23:02 被阅读20次

本篇是深入的Node的读书笔记,相关知识点的归纳以及自己的简介《深入Node》

Node架构一览

Node架构

libuv架构

libuv架构

V8架构

V8架构

现代JS引擎执行: 源代码(.js)→抽象语法树(AST)→字节码→JIT→本地代码

V8直接将AST通过JIT编译为本地代码,并且在生成本地代码以后采集相关信息,优化本地代码

Isolate

Isolate

一个 Isolate 是一个独立的虚拟机。对应一个或多个线程。但同一时刻 只能被一个线程进入。所有的 Isolate 彼此之间是完全隔离的, 它们不能够有任何共享的资源。如果不显示创建 Isolate, 会自动创建一个默认的 Isolate。

堆的构成

v8的堆
  • 新生区
    大多数对象开始时被分配在这里。新生区是一个很小的区域,垃圾回收在这个区域非常频繁,与其他区域相独立。
  • 老生指针区
    包含大多数可能存在指向其他对象的指针的对象。大多数在新生区存活一段时间之后的对象都会被挪到这里。
  • 老生数据区
    这里存放只包含原始数据的对象(这些对象没有指向其他对象的指针)。字符串、封箱的数字以及未封箱的双精度数字数组,在新生区经历一次 Scavenge 后会被移动到这里。
  • 大对象区
    这里存放体积超过 1MB 大小的对象。每个对象有自己 mmap 产生的内存。垃圾回收器从不移动大对象。
  • Code区
    代码对象,也就是包含 JIT 之后指令的对象,会被分配到这里。
  • Cell 区、属性 Cell 区、Map 区
    这些区域存放 Cell、属性 Cell 和 Map,每个区域因为都是存放相同大小的元素,因此内存结构很简单。

模块加载

  1. 如果模块在缓存中,返回它的exports对象
  2. 如果是原生的模块,通过 NativeModule.require() 返回结果
  3. 否则,创建一个新的模块,并保存到缓存中

可见,被缓存命中的程序拥有最高加载权

事件循环

事件循环

相关文章

  • 深入Node

    本篇是深入的Node的读书笔记,相关知识点的归纳以及自己的简介《深入Node》 Node架构一览 libuv架构 ...

  • 2021-04-07each和foreach

    深入浅出 Node.js(三):深入 Node.js 的模块机制 https://www.infoq.cn/art...

  • 第十周-Node.js(续)

    书籍 《深入理解Node.js:核心思想与源码分析》 Debug 《Node.js 调试指南》 Node 案发现场...

  • Nodejs学习记录(一)-- 简介、安装Node.js开发环境

    1、学习资料 深入浅出Node.js http://www.infoq.com/cn/minibooks/node...

  • Node.js基础知识(转载)

    深入学习Node之前,需要先知道Node这个框架的基本知识。 控制台 console对象:Node中使用该对象表示...

  • Node.js 有什么弊端

    《深入浅出 Node.js》阅读随笔 此文为《为什么选择 Node.js》姊妹篇,简单聊一下 Node.js 的缺...

  • 前端资源推荐-第3天

    第3期 深入Node模块的安装和发布 用过这么多得node模块,现在就让我们自己来写一个node模块吧,文章讲解了...

  • 理解 Node.js 的 GC 机制

    《深入浅出Node.js》第五章《内存控制》阅读笔记 随着 Node 的发展,JavaScript 的应用场景早已...

  • Buffer模块

    前言 《深入浅出Node.js》这本书写得好,建议阅读。以下摘录自原书。 what Buffer对象是Node处理...

  • Node.js 有必要写测试用例吗?

    《深入浅出 Node.js》阅读随笔 先说结论:很有必要!不单是 Node.js,除非是作为体验或者 Demo 演...

网友评论

    本文标题:深入Node

    本文链接:https://www.haomeiwen.com/subject/orzvcftx.html