关于html:什么是重排或回流重绘如何减少重排
什么是重排、重绘?首先咱们须要先理解浏览器渲染机制,浏览器渲染引擎是浏览器的外围组成部分之一,它负者将网页代码(html,CSS,javaScript) 转换为可视化的内容。 浏览器在渲染页面时,大抵分为解析HTML、解析CSS、构建DOM树和CSS树、合并DOM树和CSS树、布局和绘制,以及解决用户交互等。 解析HTML:浏览器首先会获取HTML文件,而后从上到下逐行解析HTML文档,生成DOM(Document Object Model)树。DOM树是一个节点树,它示意了文档的构造,使得开发者能够不便地操作和批改文档的内容和构造。解析CSS:在解析HTML的同时,浏览器也会解析CSS文件,生成CSSOM(CSS Object Model)树。CSSOM树蕴含了文档的款式信息,如元素的色彩、大小、地位等。构建渲染树:浏览器将DOM树和CSSOM树合并,生成渲染树(Render Tree)。渲染树只蕴含须要显示的节点和这些节点的款式信息。布局:浏览器依据渲染树,计算每个元素的地位和大小,这就是布局(Layout)过程。绘制:最初,浏览器依据渲染树和计算出的布局信息,将每个元素绘制到屏幕上,这就是绘制(Painting)过程。1. 解析html生成DOM树,解析css,生成CSSOM树,将DOM树和CSSOM树联合,生成渲染树;2. 依据渲染树,浏览器能够计算出网页中有哪些节点,各节点的CSS以及从属关系 - 回流3. 依据渲染树以及回流失去的节点信息,计算出每个节点在屏幕中的地位 - 重绘4. 最初将失去的节点地位信息交给浏览器的图形处理程序,让浏览器中显示页面在渲染过程中,浏览器还会进行各种优化,以进步渲染速度和效率。例如,浏览器会尽可能地并行加载和解析HTML、CSS和JavaScript文件,以缩小等待时间。此外,浏览器还会应用缓存、预加载等技术,以进步渲染速度。这些优化和并行处理使得浏览器的渲染速度更快,用户体验更好。 重排重排(reflow):当页面的元素的地位、尺寸等产生扭转时,浏览器会从新计算该元素的几何属性并摆放到正确的地位的过程叫做重排。个别页面首次渲染、带有动画的元素、增加或删除性能、图片放大放大、浏览器扭转时都可能会触发重排。重排和回流其实是一回事,重排也叫回流。 要缩小重排,能够采取以下策略:批量批改元素:尽可能减少单个元素的批改次数,能够将屡次批改合并成一次,缩小浏览器的重排次数。防止频繁查问布局信息:在JavaScript中,防止频繁查问布局信息,如offsetWidth和offsetHeight,因为这些查问会导致浏览器强制同步,减少重排次数。应用文档片段:如果须要频繁地向页面中增加大量DOM节点,能够先将他们增加到文档片段中,最初再对立插入文档中,这样能够缩小重排的次数。应用CSS动画和过渡:在须要实现动画成果时,应用CSS动画和过渡,而不是JavaScript来操作元素款式,因为CSS动画和过渡能够由浏览器的合成线程来解决,不会触发重排。应用CSS Grid和Flex布局:这两种布局形式能够缩小对元素地位的频繁调整,从而缩小重排。防止table布局:table属性变动应用会间接导致布局重排或者重绘,因而尽量减少table的应用。请留神,尽管上述策略有助于缩小重排,但在某些状况下,重排是必要的,例如当页面的内容或布局发生变化时。因而,在优化重排时,须要衡量性能和用户体验,确保页面可能正确地出现并响应用户的操作。 缩小重排和重绘1.合并款式缩小重排的次数,比方给一个元素增加多个css款式属性,每一个属性都会造成重排回流,应将屡次操作合并成一个。例如:border、padding、margin。。。尽量将屡次操作合并成一次。 <style> p{ padding:10px; margin: 0px; border:1px solid red }</style>2.批量操作DOM3.防止屡次触发布局