作者回复: 这个比喻形象
作者回复: 你对微任务的理解还是有些偏差的!
每个宏任务都有一个微任务列表,在宏任务的执行过程中产生微任务会被添加到改列表中,等宏任务快执行结束之后,会执行微认为列表,所以微任务依然运行在当前宏任务的执行环境中,这个特性会导致宏任务和微任务有一些本质上的区别!我们后面再介绍,你可以重点关注下。
作者回复: 首先我的观点是工作和知识体系的构建都是重要的,这两者向铺相成。
所以学习过程也是停不下来的,基础知识的学习不要间断。
工作是实践的好机会,但是在工作中你涉及到内容通常会限定在一个很窄的领域,要想通过工作拓宽自己的知识边界,那该如何突破呢?
我是这样做:
把工作中的项目看成是一个探险游戏,游戏中有你熟悉的领域,也有你不熟悉的领域,通常你所做的工作都是在你最熟悉的领域。
不过我还会做另外一件事,就是把游戏地图画出来,画地图的过程也就是全面熟悉项目架构的过程,其中可能涉及到很多你不熟悉的领域,然后你要做的事逐步拓宽这张地图!
当然人的精力是有限的,所以搭建知识架构很重要,然后再找几个领域深耕。
作者回复: 是这样的,部分css3的动画效果是在合成线程上实现的,不需要主线程介入,所以省去了重拍和重绘的过程,这就大大提升了渲染效率。
JavaScript都是在在主线程上执行的,所以JavaScript的动画需要主线程的参与,所以效率会大打折扣!
作者回复: 是的,他们都是在渲染进程的主线程上工作,所以同时只能执行一个。
比如v8除了在主线程上执行JavaScript代码之外,还会在主线程上执行垃圾回收,所以执行垃圾回收时停止主线程上的所有任务,我们把垃圾回收这个特性叫着全停顿。
作者回复: 主要有IO线程,用开负责和其它进程IPC通信的,然后主线程主要跑页面的!
V8是在主线程上执行的,因为dom操作啥的都是在主线程上执行的。
当然还有其它很多辅助线程,比如预解析DOM的线程,垃圾回收也有一些辅助线程。
作者回复: 第一个理解没错,事件循环系统就是在监听并执行消息队列中的任务!
第二个理解也没问题,不过promise触发的微任务,settimeout触发的是宏任务!
作者回复: 这个我会在微任务那节详细分析
作者回复: 这里提到的任务是指浏览器所以需要处理的任务!
浏览器是基于多进程+多线程架构的,所以多进程通讯(IPC)和多线程同步的问题!
因为JavaScript引擎是运行在渲染进程的主线程上的,所以我们说JavaScript是单线程执行的!
作者回复: 等专栏结束后起来补充介绍。几个主要线程的架构
作者回复: 有啊,比如渲染过程就有合成线程,解析DOM过程中还有预解析线程,这些现场都会和主线程有交互的
作者回复: 这个在下篇文章揭晓
作者回复: 马上会有专门的章节来讲微认为,不过理解消息队列和事件循环是理解微任务的基础!