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

精读《web reflow

那么排除 JS、DOM、CSSOM、Composite 可能导致的性能问题外,剩下的就是我们这次关注的重点,reflow 了。从顺序上可以看出来,重排后一定重绘,而重绘不一定触发重排。...但也不尽然,因为浏览器会自动合并更改,在达到某个数量或时间后,会合并为一次 reflow,而 reflow 是渲染页面的重要一步,打开浏览器就一定会至少 reflow 一次,所以我们不可能避免 reflow...那为什么要注意 reflow 导致的性能问题呢?...这是因为某些代码可能导致浏览器优化失效,即明明能合并 reflow 时没有合并,这一般出现在我们用 js API 访问某个元素尺寸时,为了保证拿到的是精确值,不得不提前触发一次 reflow,即便写在...当然也不是每次访问元素位置都会触发 reflow,在浏览器触发 reflow 后,所有已有元素位置都会记录快照,只要不再触发位置等变化,第二次开始访问位置就不会触发 reflow,关于这一点会在后面详细展开

63210

性能优化之reflow和repaint

首先对浏览器渲染引擎下网页呈现过程简要说一下: 浏览器的渲染引擎开始解析html构建成DOM树,DOM树是以document对象为根节点,包含所有的html标签, 包括display: none隐藏的,也包括js...三: 什么时候触发reflow和repaint 注: repaint不一定需要reflow,例如:改变某元素的颜色,只会触发repaint,不会触发reflow。...DOM Tree里的每个节点都会有reflow方法,一个结点的reflow可能导致其子结点,甚至父点以及同级结点的 reflow。在PC端或许还没什么,但是在手机上,还是比较耗性能和耗电的。...以下情况会导致reflow: 增加货移除css样式 改变字体大小 改变窗口大小 操作class属性 激活css伪类 内容变化,如在input内输入文字 js操作DOM 获取offsetTop, offsetLeft...从图中可以判断出性能问题到底出现在哪个环节,是js的执行,还是渲染 ?   图中不同颜色代表不同的事件, 哪个色块越大, 说明耗时越长,问题越大.可以根据此去进行优化.

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

前端页面优化,减少 reflow 的方法

reflow也就是 重排或者回流 由DOM或者布局的变动而触发。 如你改变了一个div的位置,或者是改变了这个div的width, height, position 或者布局类的样式。...所以,我们可以将元素先display:none,然后用JS对该元素进行操作。等操作完成在会后,再将它display:block,这样只会触发2次的reflow。...text fragment.appendChild(li) }) parentNode.appendChild(fragment) 复制代码 如果不使用DocumentFragment的话,会造成4次reflow...,随着需要修改的dom次数变多,还会造成更多次的reflow,但是通过fragment,只需要一次就够了。...CSS 层面的优化 我们上面说了,不只是DOM tree的改变会触发reflow,CSSOM的改变同样会触发。 这里我们可以用替代的CSS属性替代会造成reflow的属性。

23010

什么是回流与重绘 (Reflow & Repaint)

Contents 1 写在前面 2 回流(Reflow) 3 重绘(Repaint) 4 影响 5 避免重绘与回流 6 总结 写在前面 在讨论今天的主角之前,我们要先了解一下浏览器的渲染机制。...生成CSSOM 规则树 将 DOM 树与 CSSOM 规则树合并在一起生成渲染树Render Tree 根据渲染树遍历拿到每个节点开始布局,计算每个节点的位置大小信息 将渲染树每个节点绘制到屏幕 回流(Reflow...elem.scrollLeft, elem.scrollTop 其他 上述主要是我们经常使用的一些API,其他还有一个api已经有热心网友帮我们整理出来了 我们可以看一下 What forces layout / reflow...我们抽离中间或者底部的一个积木块,我们的积木会重新找到重心并且稳固下来,我们把这个过程称之为回流 我们在某个积木上涂上颜色,这并不会造成整个积木的稳定,我们把这个过程叫做重绘 或者说,我们简单理解会引起元素位置变化的就会reflow...,会引起位置变化的,只是在以前的位置进行改变背景颜色等,只会repaint 本文首发于什么是回流与重绘 (Reflow & Repaint)

83710

reflow和repaint(摘录自张鑫旭的翻译)

注意:这里我限定了自己只能讨论CSS对回流的影响,如果您是一位JavaScript程序员,我是推荐您读一下我的reflow链接(zxx: 原作者收藏标记的一些关于reflow的一些文章或页面链接),有一些非常好的东西...另一篇有关reflow的翻译 回流(reflow)这个名词指的是网络浏览器为了重新渲染部分或全部的文档而重新计算文档中元素的位置和几何结构的过程。...因为回流(reflow)在浏览器中属于一种用户主导的模块化操作,所以知道如何去改进回流(reflow)时间以及知道各种文档属性(DOM节点深度,css的渲染效率,各种各样的样式改变)对回流(reflow...有大量的用户行为以及潜在的DHTML改变会触发回流(reflow)。...从上边的表格我们可以清晰的看到并不是所有JavaScript改变的样式都会在浏览器中产生回流(reflow),所花费的回流(reflow)时间也是多样的。

1.1K40

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

6.reflow(回流or重排):当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,这个回退的过程叫 reflow。...reflow 会从 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow 几乎是无法避免的。...浏览器从服务端拿到html文件后,首先开始解析html文件,构建DOM tree,并且同时构建Render Tree; 遇到js文件的话,阻塞DOM tree的构建;因为js可能会改变dom和css,因此浏览器会先解析... js添加defer属性之后,script加载的外部文件成为了异步加载,执行是同步的...一个节点的 Reflow 很有可能导致子节点,甚至父节点以及兄弟节点的 Reflow

1.2K30

现代浏览器的渲染流程

一、html解析解析过程中遇到css解析css,遇到JS执行JS。...reflow本质就是重新计算layout树,需要重新计算布局树,会引发layout为了避免连续的多次操作导致布局反复计算,浏览器会合并这些操作,当js代码全部完成后再进行统一的计算,所以,改动属性造成的...reflow时异步完成的,进而导致js获取布局属性时,就可能造成无法获取到最新的布局信息。...浏览器在反复权衡,最终决定获取属性立即reflow。当然,js获取元素的几何属性,也会导致reflow。b. 什么是repaintrepaint的本质就是重新根据分层信息计算绘制指令。...所以,reflow肯定会引起repaint,但是repaint不会引起reflow。c. 为什么transform的效率高。

278100

页面中元素的锚点定位

这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情 >> [锚点定位] 点击相应的按钮,页面滚动到相应的位置,目前我知道实现该功能的方式有两种: 使用a标签定位 使用js模拟锚点定位...> 视图2 这种定位方式很简单,支持任意标签的定位,但是a标签的定位会改变路由的hash,如果有相关路由会进行路由跳转 [使用js...模拟锚点定位] 通过js获取元素的scrollTop值,使其滚动到指定的位置,就能实现锚点定位效果,这里的tab切换选项,用到是的element-ui的el-tabs组件,具体实现如下: <!...(下次会对导致页面reflow和repaint 的操作做一个总结),过度的reflow会导致页面性能下降,所以我们应该尽量减少reflow的次数,以便给用户更好的体验。...如果产品可以接受效果有延迟,就可以使用节流函数控制在一定时间内只执行一次函数(节流函数可以使用lodash.js 封装好的 throttle 方法)

2K70

Web渲染和虚拟Dom

如前,若一次操作中有10次更新DOM的动作,虚拟DOM不会立即操作DOM,而是将这10次更新的diff内容保存到本地一个JS对象中,最终将这个JS对象一次性attch到DOM树上,再进行后续操作,避免大量无谓的计算量...所以,用JS对象模拟DOM节点的好处是,页面的更新可以先全部反映在JS对象(虚拟DOM)上,操作内存中的JS对象的速度显然要更快,等更新完成后,再将最终的JS对象映射成真实的DOM,交由浏览器去绘制。...不同的直接DOM操作会触发浏览器不同的repaint和reflow,这时,Virtual DOM的优势就来了。...它优化了触发浏览器reflow和repaint的步骤,把众多页面节点改动集中到一次来进行触发。...简单来说,它减少了同一时间内的页面多处内容修改所触发的浏览器reflow和repaint的次数,可能把多个不同的DOM操作集中减少到了几次甚至一次,优化了触发浏览器reflow和repaint的次数。。

71710

一次完整的 Web 请求和渲染过程以及如何优化网页

reflow是由于dom或者布局的变动而触发,如修改了dom位置,或是宽高,margin, padding等。...reflow的方法这里可以看看如何减少reflow的次数 对CSS的优化 根据上面的内容我们知道了,想要渲染页面必须有render tree,而render tree是由DOM tree以及CSSOM...*以及使用@media进行优化 为了获得最佳性能,你可以使用一些inline css,这样不会去CDN获取资源,从而造成多次往返 对JS的优化 当 HTML 解析器遇到一个 script 标记时,它会暂停构建...因为React需要将整个APP 渲染到一个DOM节点上,如果放置在DOM之上,会造成React找不到该渲染的节点,从而报错/ 而我们一般不建议在render tree刚刚建立的时候,就使用JS去操作DOM...,从而造成reflow,也就是说,希望JS不要成为render tree的一部分。

59010

深入探讨前端UI框架

为止 一些读取元素的位置信息的代码就让浏览器立刻进行reflow,因为浏览器需要返回元素最新的位置信息 这个test case也可以看到,reflow对性能的损耗有多大。。。...另外还需要注意的,在第一个test case执行完了之后,页面还是一片空白,第一个test case插入的节点并没有展示出来 即使执行了reflow,页面也没有展示UI 直到js执行完才展示 原因是reflow...) 从上面的例子可以看到,浏览器每次计算reflow都会消耗很多性能,因此浏览器对这块做了优化 浏览器的优化是浏览器会缓存一些DOM操作,直到以下两个条件之一才会进行真正的reflow 浏览器必须要立刻进行...reflow,比如上面test case展示的那样,浏览器需要返回元素最新的位置信息 一段时间之后 详见:Rendering: repaint, reflow/relayout, restyle...是在执行js的过程中执行的,它对性能有很大的影响 而UI渲染是js执行之后才执行的,它对性能的消耗更加巨大 因此,UI更新的性能目标有两个: 减少reflow 减少UI渲染次数 4.2 为什么 virtual

1.4K70

深入探讨前端UI框架

为止 一些读取元素的位置信息的代码就让浏览器立刻进行reflow,因为浏览器需要返回元素最新的位置信息 这个test case也可以看到,reflow对性能的损耗有多大。。。...另外还需要注意的,在第一个test case执行完了之后,页面还是一片空白,第一个test case插入的节点并没有展示出来 即使执行了reflow,页面也没有展示UI 直到js执行完才展示 原因是reflow...) 从上面的例子可以看到,浏览器每次计算reflow都会消耗很多性能,因此浏览器对这块做了优化 浏览器的优化是浏览器会缓存一些DOM操作,直到以下两个条件之一才会进行真正的reflow 浏览器必须要立刻进行...reflow,比如上面test case展示的那样,浏览器需要返回元素最新的位置信息 一段时间之后 详见:Rendering: repaint, reflow/relayout, restyle...是在执行js的过程中执行的,它对性能有很大的影响 而UI渲染是js执行之后才执行的,它对性能的消耗更加巨大 因此,UI更新的性能目标有两个: 减少reflow 减少UI渲染次数 4.2 为什么 virtual

80820

从 URL 输入到页面展现发生了什么

这个过程比较复杂,涉及到两个概念: reflow(回流)和repain(重绘)。...页面在首次加载时必然会经历reflow和repain。reflow和repain过程是非常消耗性能的,尤其是在移动设备上,它会破坏用户体验,有时会造成页面卡顿。...所以我们应该尽可能少的减少reflow和repain。 ? Paste_Image.png JS的解析是由浏览器中的JS解析引擎完成的。...原因是因为JS有可能修改DOM结构,这就意味着JS执行完成前,后续所有资源的下载是没有必要的,这就是JS阻塞后续资源下载的根本原因。CSS文件的加载不影响JS文件的加载,但是却影响JS文件的执行。...JS代码执行前浏览器必须保证CSS文件已经下载并加载完毕。

53240
领券