首页 > 其他分享 >js执行的比dom渲染快很多,执行完一定的js才在页面渲染一次dom,UI渲染是宏任务

js执行的比dom渲染快很多,执行完一定的js才在页面渲染一次dom,UI渲染是宏任务

时间:2023-11-11 12:45:31浏览次数:37  
标签:style dom 渲染 js UI 执行

假设HTML有一个按钮id为btn,经过以下操作最终会变成什么颜色?

document.getElementById('btn').style = 'background: blue';
document.getElementById('btn').style = 'background: red';
Promise.resolve().then(() => {
document.getElementById('btn').style = 'background: black';
})

A
由blue变成red再变成black
B
颜色不会发生改变
C
red
D
black

正确答案:D

官方解析:
首先明确UI渲染是宏任务,而按照事件循环的模型,先执行的是整体的主干代码,这期间style频繁变化但是还没有被渲染所以不会有颜色的变化,
同时因为有个微任务也就是promise回调函数,最终改变了style为black,之后才执行的UI渲染,也就是最后被改变的颜色了。

JS执行会阻塞渲染,是因为 js 有可能影响dom的解析,比如在 js 里面新增 dom 等这些操作。
而 dom 的渲染 是需要等js, css都解析完成后才进行的,所有代码都执行完之后,颜色就是黑色,不存在颜色变化的情况。

可以理解为js执行的比dom渲染快很多,执行一定的js才在页面渲染一次dom,

并且要考虑优化: 要是执行一行js就渲染更新一次页面的dom,那浏览器不是会累死

首先 js 是单线程,前两个同步代码执行完后,会产生两个 UI 渲染任务到交互消息队列,然后执行下面微任务代码,执行完后又产生一个 UI 渲染为黑色的任务到交互消息队列末尾,主线程到此执行结束,然后微消息队列为空,从交互队列中以此取任务,最后执行为黑色

关于JS阻塞DOM渲染,推荐看一下这个文章https://juejin.cn/post/6844903497599549453

标签:style,dom,渲染,js,UI,执行
From: https://www.cnblogs.com/longmo666/p/17825785.html

相关文章

  • js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继
    js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承,以及ES6新增的class继承,但不包括关联继承https://www.cnblogs.com/Leophen/p/11401734.html构造函数继承是每次继承都会把父类的所有属性方法全部拷贝一份,而对于公用的方法......
  • 下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?
    下面哪些方式在同一个窗口下能够检测一个js对象是数组类型?AArray.isArray()BinstanceofCtypeofDObject.prototype.toString.call()正确答案:ABDA:Array为js的原生对象,它有一个静态方法:Array.isArray(),能判断参数是否为数组B:instanceof运算符返回一个布尔值,表示对象是......
  • Lodash-前端 js工具库
    官网:Lodash简介|Lodash中文文档|Lodash中文网(lodashjs.com) import_from'lodash'constdialogHandler=(val)=>{if(val){listCompanyByCurrentUserIdFn()if(!_.isEmpty(props.dialogData.id)){baseDialog.value.setProps({......
  • js实现深拷贝
    functiondeepClone(obj,hash=newWeakMap()){if(obj===null)returnobj//如果是null或者undefined我就不进行拷贝操作if(objinstanceofDate)returnnewDate(obj)if(objinstanceofRegExp)returnnewRegExp(obj)//可能是对象或者普通的值如果是......
  • Js选择器总结
    Js选择器总结 一、原生JS选择器#JS选择器常用的有getElementById()、getElementsByName()、getElementsByTagName()、getElementsByClassName()、querySelector()、querySelectorAll()A:getElementById(ID):返回对指定ID的第一个对象的引用,如果在文档中查找一个特定的元......
  • VS Code搭建Node.js环境
    VSCode搭建Node.js环境VSCode集成了方便的Node.js插件,使您可以轻松安装和配置Node.js环境。您可以采用以下步骤来搭建Node.js环境。1.安装VSCode在VSCode官网上下载并安装VSCode2.安装Node.js插件在VSCode插件市场中搜索并安装“Node.js”扩展3.配置Node.js路径单......
  • 23.11.10(Ajax和Json的数据传输问题)
    使用Ajax写查询功能,后端数据一直传不到前端,遇到parse解析的卡住原因:传来的json数据格式不正确,后端Java还respond了一个success解决方法:把success去掉<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script><script>$(d......
  • vue中执行npm install提示:npm WARN deprecated [email protected]
    场景:在执行npminstall时提示[email protected],导致安装不了 提示的意思是:版本低不再维护了,让升级upgradeyourdependenciestotheactualversionofcore-js.   [email protected]:core-js@<3.23.3isnolongermaintainedand......
  • China's Wisdom for Water Pollution Control
    一、BasicmethodsforwaterpollutioncontrolThepurposeofwastewatertreatmentistoseparatethepollutantsinthewastewaterinacertainway,ordecomposethemintoharmlessandstablesubstances,sothatthesewagecanbepurified.Generally,itis......
  • JavaScript--DOM概述&Element对象获取与使用
      通过DOM对HTML进行操作  1、获取Element对象 2、常见的HTMLElement对象的使用查看文档:https://www.w3cschool.cn/jsref/<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"conten......