Javascript执行机制(八)垃圾回收机制
我们都知道,JavaScript 是一门自动垃圾回收的语言,也就是说,我们不需要去手动回收垃圾数据,这一切都交给 V8 的垃圾回收器来完成。V8 为了更高效地回收垃圾,引入了两个垃圾回收器,它们分别针对着不同的场景。
我们就来一起分析下,这两个回收机制的使用场景以及工作原理。
我们都知道,JavaScript 是一门自动垃圾回收的语言,也就是说,我们不需要去手动回收垃圾数据,这一切都交给 V8 的垃圾回收器来完成。V8 为了更高效地回收垃圾,引入了两个垃圾回收器,它们分别针对着不同的场景。
我们就来一起分析下,这两个回收机制的使用场景以及工作原理。
上一篇博客我们讲了V8的整体执行的流程,这次我就继续总结下,V8是如何实现对象上属性的快速查找的。
注意,这部分内容不是作用域链,也不是原型链。作用域链是用来找到对象的,如obj,原型链是如果obj上没有属性a,去它的原型上找,而本文的主题,是如何快速在obj上找到a。
这周在极客时间上买了李兵老师的另一门课,关于Google V8原理简介的课程。很多知识点,包括V8的整体执行流程,变量是如何存储的,对象是如何快速检索属性的,函数是如何编译的,闭包是如何实现的,不同的调用方法是是如何影响堆栈的分布的等。
感觉内容很多,就继续原本的系列,这一次总结下我看完以后对V8执行JavaScript的流程的理解。
使用React也有两个月了,总结下这两个月在实战中以及自己买的课程中的关于React Hook的一些收获。
上一个博客大概讲了下babel-parser的工作流程,主要有两个内容,一个是Tokenizer把代码字符串拆分成Token数组,一个是parser把Token数组转换为AST树。
这一次就来仔细看看Tokenizer的逻辑。
上一篇文章分析 Babel 编译流程的时候,提到 Babel 会将 JS 代码转换成 AST(抽象语法树)。这种行为是一种通用的行为,无论什么编程语言都会将源代码解析成 AST,AST 不是 Babel 特有的,更不是 JS 特有的。
为什么要这么做呢?原始的 JS 文件是计算机是无法理解的,计算机也很难直接修改 JS 代码,但是转换成 AST 后,由于 AST 本质上是一组表示程序结构的对象,我们可以通过修改这个对象,间接的实现修改代码的目的。chrome V8 引擎也是这么做的,比起 Bable 更进一步的是,V8 引擎会编译 AST 生成字节码。
Parser的过程分为两步,第一步,词法分析,也就是编译原理中的有限状态机,将一段代码拆分为一个个Token,第二步,语法分析,将Token数组,转换为AST树。
这次我就看一下源码,简单分析一下这个过程。
最近接触了一点关于Babel的知识,产生了一些兴趣,于是就打算看一看Babel的原理,然后总结学习下,这东西太复杂了,就分多个博客来写吧,这篇博客主要讲两件事,第一,简单描述下Babel的工作流程,第二,简单介绍下Babel的项目结构,也就是微内核模式。
这几个周算是把慕课上400大洋买的关于React最佳工程实践的课程听的七七八八了,剩下的主要就是两部分,一部分是一些交互的优化,还有一点点关于性能的优化,这两部分我感觉不是很急,可以在我的工作中去慢慢体会。
我目前在react方面的当务之急是,我只学了实践,但是很多东西我都不知道为什么要这样写,比如为什么要setState才能更新,hook是如何生效的,react fiber是什么等等,不了解这些,我感觉自己的react还浮在半空中,没有比较好的落地,所以下一步的计划就是去了解一下原理,至于是否要去阅读源码,下一步再说。
这篇博客的主要内容是读了一下几位国内外大佬的博客,先对react的fiber有个大概的了解