vue 事件循环、nextTick详解

54 阅读1分钟

事件循环

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可以。