首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【前端性能优化】深入解析重绘和回流,构建高性能Web界面

回流(Reflow) 在Web浏览器工作流程中,回流是一个关键步骤,它发生在浏览器需要根据DOM元素尺寸、位置或某些视觉属性变化来重新计算元素布局情况时。...分层合成准备:对于复杂布局变化,可能还需要对页面进行分层处理,确定哪些部分可以独立重绘,哪些需要一起重排。 绘制合成:最后,浏览器根据更新后渲染树和分层信息,重新绘制屏幕上内容。...避免不必要读取 缓存布局信息:如果需要频繁访问某个元素布局信息(如尺寸),最好先将其值缓存起来,避免重复计算。...其他策略 懒加载图像和资源:只在需要时加载图片和脚本,减轻首次加载负担。 代码拆分按需加载:通过webpack等工具将代码分割成小块,用户只需加载当前页面所需代码。...答案: 引起回流操作包括但不限于: 添加或删除可见DOM元素元素尺寸或位置动态改变(例如,通过JavaScript修改元素宽高或使用动画); 浏览器窗口尺寸变化,导致页面布局调整; 计算某些特定

6810

最详尽浏览器页面渲染机制分析

页面加载过程 在介绍浏览器渲染过程之前,我们简明扼要介绍下页面的加载过程,有助于更好理解后续渲染过程。...JavaScript加载、解析执行会阻塞DOM构建,也就是说,在构建DOM时,HTML解析器若遇到了JavaScript,那么它会暂停构建DOM,将控制权移交给JavaScript引擎,等JavaScript...回流:当我们对 DOM 修改引发了 DOM 几何尺寸变化(比如修改元素宽、高或隐藏元素等)时,浏览器需要重新计算元素几何属性(其他元素几何属性和位置也会因此受到影响),然后再将计算结果绘制出来...1)常见引起回流属性和方法 任何会改变元素几何信息(元素位置和尺寸大小)操作,都会触发回流, 添加或者删除可见DOM元素元素尺寸改变——边距、填充、边框、宽度和高度 内容变化,比如用户在input...CSS优化: 标签 rel属性 中属性值设置为 preload 能够让你在你HTML页面中可以指明哪些资源是在页面加载完成后即刻需要,最优配置加载顺序,提高渲染性能 总结 综上所述

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

前端性能优化原理实践

「计算样式」 浏览器将识别并加载所有的 CSS 样式信息 DOM 树合并,最终生成页面 render 树(:after :before 这样元素会在这个环节被构建到 DOM 树中)。...DOM优化 回流和重绘 「回流」:当对DOM修改引发了DOM尺寸变化时,浏览器需要重新计算元素几何属性,然后将结果进行绘制。该过程为回流。...「重绘」:当对DOM修改引发了样式变化,但是没有尺寸变化时,浏览器不需要重新计算元素几何属性,直接绘制新样式。该过程为重绘。 结论:「回流一定导致重绘,重绘不一定导致回流。」...因为浏览器需要实时计算最新值,会进行回流。 优化方案有: 缓存特定属性值,防止频繁获取导致频繁回流避免逐条改变样式,使用类名去合并样式。 将DOM离线。也就是display: none 。...// 内容处理好了,最后再触发真实DOM更改 container.appendChild(content) Flush队列 当频繁回流或者重绘时候,浏览器缓存一个flush队列,把我们触发回流重绘任务都塞进去

93320

前端资源浏览器渲染原理

浏览器渲染页面过程 HTML解析过程 一般情况下服务器会给浏览器返回 xx.html 文件 解析html 其实就是 Dom构建过程 我们可以根据以下html 结构 来简单分析出 html...渲染树会表示显示哪些节点以及其他样式,但是不表示每个节点尺寸、位置等信息; 布局是确定呈现树中所有节点宽度、高度和位置信息; 将每个节点绘制(Paint)到屏幕上 在绘制阶段,浏览器将布局阶段计算每个...回流性能并不好 也很明显 重新渲染整个DOM 很浪费性能 总结 修改样式 尽可能减少回流次数 也就是设计好之后,非必要不去改动样式和DOM结构 避免频繁使用 JS 去操作DOM 尽可能减少函数获取储存位置信息...JS 有操作和修改DOM作用 为什么会先去执行js脚本? 因为之前提到了 回流时很吃性能所以最好一次性弄好 减少不必要回流 代码案例 index.html <script src="....来解决这个问题 defer属性 defer 属性告诉浏览器不要等待脚本下载,而继续解析<em>HTML</em>,构建<em>DOM</em> Tree,如果脚本提前下载好就等待<em>加载</em>,等<em>DOM</em>完成 在触发DOMContentLoaded

55220

浏览器渲染页面DOM相关常见面试题以及问题

reflow 会从 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow 几乎是无法避免。...现在界面上流行一些效果,比如树状目录折叠、展开(实质上是元素显示隐藏)等,都将引起浏览器 reflow。...7.repaint(重绘):改变某个元素背景色、文字颜色、边框颜色等等不影响它周围或内部布局属性时,屏幕一部分要重画,但是元素几何尺寸没有变,只需要重新走第五步。...()) 什么情况会引起重排/回流(reflow) 添加或者删除可见DOM元素元素位置改变——display、float、position...队列属性,如果你确实要访问,利用缓存; 让元素脱离动画流,减少回流Render Tree规模; DOM是什么?

1.2K30

前端性能优化 | 回流重绘

一、回流重绘概念在 HTML 中,每个元素都可以理解成一个盒子,在浏览器解析过程中,会涉及到回流重绘:回流(reflow):当DOM结构发生改变或者某个元素样式发生变化时,浏览器需要重新计算并重新布局...要了解回流重绘产生,首先需要了解浏览器解析渲染机制,如下所示:浏览器解析渲染机制可以分为以下几个步骤:HTML解析:当浏览器接收到 HTML 文档后,会对其进行解析。...解析器会将 HTML 文档按照标签层次结构转换成一个 DOM 树(文档对象模型)。 DOM 树表示了文档结构,每个 HTML 标签都对应着 DOM 树中一个节点。...所以在页面初始渲染阶段,回流不可避免触发,可以理解成页面一开始是空白元素,后面添加了新元素使页面布局发生改变当我们对 DOM 修改引发了 DOM 几何尺寸变化(比如修改元素宽、高或隐藏元素等...二、回流重绘触发条件回流触发条件触发条件:当渲染树中部分或者全部元素尺寸、结构或者属性发生变化以下这些操作会导致回流添加或删除DOM元素:当添加、删除、修改DOM元素时,会导致整个或部分页面的布局发生变化

56120

页面优化——重绘和回流

二、重绘和回流是什么 我们都知道一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点进行几何布局形成render树(渲染树),当渲染树构建完成后,页面就根据DOM树开始布局,渲染树也根据设置样式渲染这些节点...在这一过程中,比如我们删除DOM节点,修改一个元素宽高,页面布局发生变化,DOM树也发生变化,那么肯定要重新构建DOm树,而DOM树和渲染树紧密相连,DOM树渲染完了,渲染树也会随之进行渲染,这个过程就称为回流...在比如说,我们给一个元素修改颜色,这样行为是不会影响页面的布局DOM树不会发生改变,但是颜色变了,渲染树得重新绘制,这就是重绘。 所以说回流一定会触发重绘,重绘不一定触发回流。...三、怎么样减少回流 回流会重构DOM树,渲染树也得重新渲染,比较麻烦,哪些行为可以引发回流,如何去避免呢? 1、DOM删除行为 比如删除某个节点,或者给父元素插入子节点,这类操作都会触发回流。...5、页面初次渲染触发回流 页面的初次渲染触发回流这样无法避免。 6、浏览器窗口尺寸改变 resize事件发生也会触发回流。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

71320

【综合篇】Web前端性能优化原理问题

查找,将js和css设置为外部,避免重定向,配置etag,使用ajax缓存,减少dom元素数量,没有404,减少cookie大小,不缩放HTML图像避免使用过滤器,使用favicon.icon...脚本优化,减少重绘和回流,缓存dom选择计算,缓存列表length,尽量使用事件代理,避免批量绑定事件,尽量使用id选择器,使用touchstart,touchend代替click。...回流,当render tree中一部分因为元素规模尺寸,布局等改变需要重新构建,会触发回流,重绘,当render tree中一些元素需要修改属性,这些属性不影响元素外观,风格,布局,就叫做重绘,...所以回流一定会引起重绘,但是重绘不一定会引起回流。 掌握一些css属性​ ​ ? 将频繁重绘回流元素单独出来,作为一个独立图层,那么这个元素重绘回流就只能影响这个图层中。...把一个元素独立成独立图层,用css属性 避免使用触发重绘,回流css属性,重绘和回流很频繁可以独立出来。

1.7K30

chrome对页面重绘和回流以及优化进行优化

页面的绘制时间(paint time)是每一个前端开发都需要关注重要指标,它决定了你页面流畅程度。而如何去观察页面的绘制时间,找到性能瓶颈,可以借助Chrome开发者工具。回流重绘1....当render tree中一部分(或全部)因为元素规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载时候。...优化重绘回流CSS避免使用table布局。尽可能在DOM最末端改变class。避免设置多层内联样式。将动画效果应用到position属性为absolute或fixed元素上。...避免频繁操作DOM,创建一个documentFragment,在它上面应用所有DOM操作,最后再把它添加到文档中。也可以先为元素设置display: none,操作结束后再把它显示出来。...因为在display属性为none元素上进行DOM操作不会引发回流和重绘。避免频繁读取会引发回流/重绘属性,如果确实需要多次使用,就用一个变量缓存起来。

79510

前端| 性能优化总结

04 .css放在头部文件,js文件放在底部,css执行会阻塞渲染,阻止js执行 js加载和执行会阻塞HTML解析,阻止cssom构建 (cssom 指css object model,它和DOM类似,...如比如下拉选择国籍配置参数时,配置带上国旗和未带上国旗时大小差异很大、 06 .减少重绘重排,减少操作domdom元素添加或删除,元素位置改变,浏览器窗口尺寸改变。...回流(Reflow) 当 Render Tree 中部分或全部元素尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档过程称为回流。...会导致回流操作: (1) 页面首次渲染 (2) 浏览器窗口大小发生改变 (3) 元素尺寸或位置发生改变元素内容变化(文字数量或图片大小等等) (4)元素字体大小变化 (5)添加或者删除可见 DOM...避免频繁读取会引发回流/重绘属性,如果确实需要多次使用,就用一个变量缓存起来。 对具有复杂动画元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流

71420

css布局优化:布局计算限制— containwill-change合成层

在《浏览器层面优化前端性能(2):Reader引擎线程模块分析优化点》提过:避免大规模、复杂布局布局,就是浏览器计算DOM元素几何信息过程:元素大小和在页面中位置。...尽可能避免触发布局布局时间消耗主要在于:需要布局DOM元素数量 布局过程复杂程度减少绘制区域有时候尽管把元素提升到了一个单独渲染层,渲染工作依然是必须。...但是,我们可是使用css contain 属性来限制 回流重绘contain CSS 新出了 contain 属性,拥有 contain 属性(不为 none)元素页面其他元素相对独立,并且该元素及其后代元素样式...、DOM 发生变化时不会导致整个页面回流和重绘。...用子元素是撑不开这个元素(声明都不给它尺寸会一直是 0x0),必须声明尺寸,且子元素不能超出元素范围,这个属性能够阻止子元素不断变大 -> 改变父元素尺寸 -> 影响更多节点 -> 发成大面积重排

1.3K30

网站优化之静态资源优化

不同网络环境(Wifi/4G/3G)下,加载不同尺寸和像素图片,通过在图片 URL 后 缀加不同参数改变。 ...• JS 引用放在 HTML 底部 • 防止 JS 加载、解析、执行对阻塞页面后续元素正常渲染。 ...      • 加载元素顺序 CSS 文件放在  里, JavaScript 文件放在  里。 ...• ES6 import 2 7、减少回流和重绘重要举措   CSS      • 避免过多样式嵌套      • 避免使用 CSS 表达式      • 使用绝对定位,可以让动画元素脱离文档流      ... JavaScript      • 最小化回流和重排      • 为了减少回流发生次数,避免频繁或操作 DOM,可以合并多次对 DOM 修改,然后一次 性批量处理。

1.7K10

前端性能优化 常见面试题速查

根据这个原理,可以使用 HTML5 data-xx 属性来存储图片地址,在需要加载时候,将 data-xx 属性值赋给 src 属性,就实现了图片按需加载,即懒加载。...# 回流 当渲染树中部分或者全部元素尺寸、结构或者属性发生变化时,浏览器会重新渲染部分或者全部文档过程即回流。...可能会导致回流操作有: 页面的首次渲染 浏览器窗口大小发生变化 元素内容发生变化 元素尺寸或者位置发生变化 元素字体大小发生变化 激活 CSS 伪类 查询某些属性或者调用某些方法 添加或者删除可见...、text-decoration、border-radius、visibility、box-shadow 等 注意:当触发回流时,一定会触发重绘,但是重绘不一定引发回流 # 如何避免回流和重绘 减少回流重绘措施...可以修改类名,而不是样式 使用 absolute 或 fixed 使元素脱离文档流,这样他们发生变化就不会影响其他元素 避免频繁操作 DOM,可以创建一个文档片段 documentFragment,然后把需要操作元素添加到文档片段中

42320

「一道面试题」输入URL到渲染全面梳理中-页面渲染篇

) 当我们修改元素尺寸,页面就会回流(Reflow) 当页面需要Repaing和Reflow时GUI线程执行,绘制页面 回流(Reflow)比重绘(Repaint)成本要高,我们要尽量避免Reflow...,所以就算 DOM 已经构建完了,也得等 CSSOM,然后才能进入下一个阶段 所以 CSS 加载速度构建 CSSOM 速度会影响首屏渲染速度,这就是我们常说 CSS 资源加载会阻塞渲染 怎么优化...,而且一个节点回流往往还会导致子节点以及同级节点回流,所以优化方案中一般都包括,尽量避免 回流 什么会引起回流 页面渲染初始化 DOM结构改变,比如删除了某个节点 render树变化,比如减少了padding...节点 display:none ( 会触发一次 reflow),然后做修改后,再把它显示出来 克隆一个DOM节点在内存里,修改之后,在线节点相替换 避免多次读取offset等属性,无法避免则将它们缓存到变量...操作,尽量访问离线DOM样式信息,避免过度触发回流 减少通过 JS 代码修改元素样式,尽量使用修改 class 名方式操作样式或动画 尽量减少浏览器重排和重绘一些情况发生 2020年了!

75820

浏览器常见考点

加载过程 要点如下: DNS服务器解析域名IP地址 建立TCP握手连接 向IP指向服务器发送HTTP请求 服务器收到、处理并返回HTTP请求 浏览器获取返回内容 ② 渲染过程 要点如下: 根据HTML...重绘和回流 重绘(repaint)和回流(reflow)会在样式节点变动时候出现,回流所需要成本更高,回流一定会引重绘。 重绘是只一些元素更新属性,这些属性只影响外观,不影响布局。...回流元素尺寸、布局、可见等属性发生改变。会导致渲染树重新构造。比如窗口字体大小变化、样式表改动、元素内容(尤其是输入控件)、css 伪类激活、offsetWidth 等属性计算。...如何减少重绘回流避免逐项更改样式。一次性更改style属性,或者直接定义class属性 避免直接插入DOM。...interactive:document 加载成功,DOM 树构建完成 complete:图像,样式表和框架之类子资源完成加载 所以,DOMContentLoaded是在onload前进行

99020

从 8 道面试题看浏览器渲染过程性能优化

谈谈浏览器回流重绘 回流必将引起重绘,重绘不一定会引起回流。...回流(Reflow) 当 Render Tree 中部分或全部元素尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档过程称为回流。...会导致回流操作: 页面首次渲染 浏览器窗口大小发生改变 元素尺寸或位置发生改变元素内容变化(文字数量或图片大小等等) 元素字体大小变化 添加或者删除可见 DOM 元素 激活 CSS 伪类(例如::hover...性能影响 回流比重绘代价要更高。 有时即使仅仅回流一个单一元素,它元素以及任何跟随它元素也会产生回流。...避免频繁读取会引发回流/重绘属性,如果确实需要多次使用,就用一个变量缓存起来。 对具有复杂动画元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流。 8.

1.1K40

面试官:DTD 有什么作用?

哪些新特性?新增了哪些语义化标签?新增了哪些表单元素HTML5 是什么? 它是一个新版本HTML语言,具有新元素,属性和行为, 它有更大技术集,允许构建更多样化和更强大网站和应用程序。...1.标签语义化有助于构架良好HTML结构,有利于搜索引擎建立索引、有助于爬虫抓取更多有效信息.简单来说,试想在H1标签中匹配到关键词和在div中匹配到关键词搜索引擎会吧那个结果放在前面。...是一类被称为自定义数据属性属性,它赋予我们在所有 HTML 元素上嵌入自定义数据属性能力,并可以通过脚本在 HTML DOM 表现之间进行专有数据交换。...,从而去计算出每个节点在屏幕中位置 painting 绘制 reflow 回流 repaint 重绘 改变某个元素背景色、文字颜色、边框颜色等等不影响它周围或内部布局属性时,屏幕一部分要重画,但是元素几何尺寸没有变...,屏幕一部分要重画,但是元素几何尺寸没有变。

95010

【面试系列一】如何回答如何理解重排和重绘

重排(Reflow):元素 位置发生变动 时发生重排,也叫回流。此时在 Layout 阶段,计算每一个元素在设备视口内的确切位置和大小。...JavaScript 关键路径渲染 前面聊步骤时候基本都是聊 HTML 、CSS CRP 关系,最后再聊一下 JS CRP 关系,再看一下文章开头这个图。...JavaScript 执行是在生成渲染树之前。这也是为什么 JavaScript 加载、解析执行会阻塞 DOM 构建,阻塞页面的渲染。...放在页面底部位置,并尽可能用 defer 或者 async 避免阻塞 js 加载,确保 DOM 树生成完才会去加载 JS 用 link 替代@import 如果页面 css 较少,尽量使用内嵌式 为了减少白屏时间...而是先应该通过 webpack-bundle-analyzer 插件去分析包大原因是什么? 是依赖包太大了,没有做按需加载? 还是重复打包了几个版本相同依赖?

1.3K71

浏览器层面优化前端性能(2):Reader引擎线程模块分析优化点

回流重绘回流(reflow):当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染。...reflow 会从这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow 几乎是无法避免。...没有js理想情况下,htmlcss会并行解析,分别生成DOMCSSOM,然后合并成Render Tree,进入Rendering Pipeline;但如果有js,css加载会阻塞后面js语句执行...(初始 HTML 文档被完全加载和解析完成之后触发,无需等待样式表图像和子框架完成加载) 事件。...如果想在这一帧开始时候,读取一个元素属性值,就需要修改当前元素某个属性(可能触发重绘回流)。为了避免触发不必要布局过程,你应该首先批量读取元素样式属性,然后再对样式属性进行写操作。

1.2K20
领券