堆栈追踪论V8引擎工作原理

731 阅读1分钟

首先,请看图

1567131860219_10_24_18__08_30_2019.jpg
根据上图 2:9(throw) 6:3(hello) 9:1(world) 可以看出堆栈是根据执行函数的位置进行追踪

那么当运行一个js函数时v8引擎是如何进行工作的呢?

v8引擎由两个主要模块组成:内存堆/调用堆栈

内存堆用于分配内存地址 调用堆栈用于执行代码

调用栈是一个盒子,当执行一个函数时,它会将函数放置到栈顶!函数返回时则弹出

1567133549003_10_52_26__08_30_2019.jpg

我们都知道javascript是单线程编程语言,这意味着它只有一个调用堆栈

当执行以下代码时

1567134310941_11_01_53__08_30_2019.jpg

这个时候调用堆栈怎么了?

1567134363314_11_06_01__08_30_2019.jpg

当调用堆栈中有一个函数需要花费大量时间处理时,浏览器或node不能做任何事情,因为它被阻塞了 浏览器一般会询问你是否想关掉页面或者等待函数执行完成, 我们可以在不阻塞ui和不使浏览器失去响应的情况下执行大量代码吗?

你猜