javaScript引擎,运行时和调用堆栈的概述
2018-01-19 本文已影响9人
技术与健康
下图是关于js引擎的简化图
image.png
主要包含两个组件:
*内存堆 -内存分配发生的地方
*调用堆栈 - 代码执行时的堆栈
对js有一些深入了解的人,都知道v8引擎,就是这里说的一种js引擎。chrome和node用的就是v8引擎。
在实际的前端开发中,会用到很多很多浏览器提供的API,这些API来自于JS的运行时。也就是
runtime. 运行时的逻辑简图如下
这里面引入两个概念一个是eventloop 和callback queue.
先说callback queue
function multiply(x, y) {
return x * y;
}
function printSquare(x) {
var s = multiply(x, x);
console.log(s);
}
printSquare(5);
image.png
关于callback queue,特别要注意递归函数,处理不当,会导致的栈溢出,如
image.png
image.png
js是单线程运行的,当callback queue中有一个耗时事件时,
image.png见过上图吧
这就是当单线程被某个处理耗时请求时,会导致网站失去对用户的响应。。。
这就涉及js的事件循环了。对与这种问题的解决方案,就要用到异步回调的处理了,这也是js里面最主要事件模型。对于同步的处理逻辑,一定要控制好处理时间。