事件循环
JS为什么是单线程语言
因为JS运行在浏览器环境下,如果有两个操作,删除某个DOM,给该DOM改变样式,那么如果是多线程的话就会造成冲突,所以它的运行环境决定了它是一个单线程语言。
异步
前端开发中,通过异步来解决单线程的问题,因为有一个耗时操作,不能让页面阻塞,所以需要在一段时间之后或者某个特定的时间点执行一定的逻辑,比如:用户点击按钮执行某段逻辑、发起请求接收到结果执行一段逻辑,定时器一段时间后执行一段逻辑...
浏览器事件循环机制
JS都是在渲染进程的主线程中执行,首先执行同步代码,遇到微任务加到微任务队列,遇到宏任务加入宏任务队列(但是要到时间),比如定时器两秒之后,那就两秒后加入。然后先把微任务取出来放到主线程执行,然后宏任务...
浏览器在一帧(16.6ms)内做了什么?
1.解析DOM(生成DOM树)--解析style(CSSOM)=>生成render树(渲染树)--paint--layer(图层)
2.解析JS(defer,async,DOMcontentloaded load)
3.CSS会阻塞DOM树的渲染,不会阻塞DOM树的解析。JS会阻塞DOM树的渲染,defer,async另说。CSS会阻塞JS。因为JS可能会操作样式。
nextTick
在页面渲染之后拿到数据。
(1)在beforecreae里面拿到data里的数据或调用methods里面的方法。
(2)在修改数据之后不能及时拿到修改后的数据,用nextTick可以。