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

Javascript性能 - Dom Reflow - Google文章

首先,我们需要了解什么是“Reflow”。在浏览器中,Reflow是指浏览器对页面进行重新布局,这个过程会导致整个页面重新计算布局、几何属性和绘制,这是一个非常耗时的过程。

在JavaScript中,如果我们对DOM元素进行操作,例如添加、删除或修改元素,浏览器就需要重新计算布局,这个过程就是Reflow。因此,在编写JavaScript代码时,我们应该尽量避免过多的DOM操作,特别是那些会导致Reflow的操作,因为这会影响页面的性能和响应速度。

针对上述问题,我们可以采用以下方法来优化JavaScript性能:

  1. 使用DocumentFragment:在操作DOM元素时,可以使用DocumentFragment来暂时存储元素,然后再将它们添加到页面中。这样可以减少页面的Reflow次数,从而提高性能。
  2. 避免使用table布局:由于table布局会导致浏览器进行多次Reflow,因此应该尽量避免使用table布局。
  3. 使用CSS3动画:在可能的情况下,应该使用CSS3动画来代替JavaScript动画。CSS3动画可以通过GPU加速,从而提高性能。
  4. 使用requestAnimationFrame:在进行动画操作时,应该使用requestAnimationFrame来代替setTimeout或setInterval。这样可以保证浏览器在每一帧中都进行优化,从而提高性能。
  5. 避免使用CSS表达式:CSS表达式会导致浏览器进行多次Reflow,因此应该尽量避免使用CSS表达式。

总之,在编写JavaScript代码时,我们应该尽量避免过多的DOM操作,特别是那些会导致Reflow的操作,从而提高页面的性能和响应速度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

浏览器渲染原理

Javascript,脚本,主要是通过DOM API和CSSOM API来操作DOM Tree和CSS Rule Tree. 2)解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule...你可以看到很多这样的网页在滚动的时候性能有多差。因为滚屏也有可能会造成reflow。 基本上来说,reflow有如下的几个原因: Initial。网页初始化的时候。 Incremental。...一些Javascript在操作DOM Tree时。 Resize。其些元件的尺寸变了。 StyleChange。如果CSS的属性发生变化了。 Dirty。...几个工具和几篇文章 有时候,你会也许会发现在IE下,你不知道你修改了什么东西,结果CPU一下子就上去了到100%,然后过了好几秒钟repaint/reflow才完成,这种事情以IE的年代时经常发生。...最后,别忘了下面这几篇提高浏览器性能文章Google – Web Performance Best Practices Yahoo – Best Practices for Speeding Up

1K00

浏览器渲染原理

Javascript,脚本,主要是通过DOM API和CSSOM API来操作DOM Tree和CSS Rule Tree. 2)解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule...你可以看到很多这样的网页在滚动的时候性能有多差。因为滚屏也有可能会造成reflow。 基本上来说,reflow有如下的几个原因: Initial。网页初始化的时候。 Incremental。...一些Javascript在操作DOM Tree时。 Resize。其些元件的尺寸变了。 StyleChange。如果CSS的属性发生变化了。 Dirty。...几个工具和几篇文章 有时候,你会也许会发现在IE下,你不知道你修改了什么东西,结果CPU一下子就上去了到100%,然后过了好几秒钟repaint/reflow才完成,这种事情以IE的年代时经常发生。...最后,别忘了下面这几篇提高浏览器性能文章Google – Web Performance Best Practices Yahoo – Best Practices for Speeding Up

48120

浏览器渲染原理

Javascript,脚本,主要是通过DOM API和CSSOM API来操作DOM Tree和CSS Rule Tree. 2)解析完成后,浏览器引擎会通过DOM Tree 和 CSS Rule Tree...你可以看到很多这样的网页在滚动的时候性能有多差。因为滚屏也有可能会造成reflow。 基本上来说,reflow有如下的几个原因: Initial。网页初始化的时候。 Incremental。...一些Javascript在操作DOM Tree时。 Resize。其些元件的尺寸变了。 StyleChange。如果CSS的属性发生变化了。 Dirty。...几个工具和几篇文章 有时候,你会也许会发现在IE下,你不知道你修改了什么东西,结果CPU一下子就上去了到100%,然后过了好几秒钟repaint/reflow才完成,这种事情以IE的年代时经常发生。...最后,别忘了下面这几篇提高浏览器性能文章Google – Web Performance Best Practices Yahoo – Best Practices for Speeding Up

2.7K31

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

根据Opera浏览器,重绘的代价是高昂的,因为浏览器必须验证DOM树上其他节点元素的可见性。而回流更是性能的关键因为其变化涉及到部分页面(或是整个页面)的布局。...注意:这里我限定了自己只能讨论CSS对回流的影响,如果您是一位JavaScript程序员,我是推荐您读一下我的reflow链接(zxx: 原作者收藏标记的一些关于reflow的一些文章或页面链接),有一些非常好的东西...面向对象的CSS始终尝试获得它们影响的类对象(DOM节点或节点),但在这种情况下,它已尽可能的减少了回流的影响,增加性能优势。 避免设置多层内联样式 我们都知道与DOM交互很慢。...例如,改变浏览器窗口的大小,使用一些JavaScript方法,包括计算样式,对DOM进行元素的添加或删除,或是改变元素的class等。...从上边的表格我们可以清晰的看到并不是所有JavaScript改变的样式都会在浏览器中产生回流(reflow),所花费的回流(reflow)时间也是多样的。

1.1K40

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

优化关键渲染路径可提高渲染性能。 大致步骤是这样:在解析 HTML 时会创建 DOM,HTML 可以请求 JavaScript,而 JavaScript 反过来,又可以更改 DOM。...JavaScript 与关键路径渲染 前面聊步骤的时候基本都是聊的 HTML 、CSS 与 CRP 的关系,最后再聊一下 JS 与 CRP 的关系,再看一下文章开头的这个图。...这其实是非常合理的 因为 JavaScript 可以修改网页的内容,它可以更改 DOM,如果不阻塞,那么这边在构建 DOM,那边 JavaScript 在改 DOM,如何保障最终得到的 DOM 是否正确...关键渲染路径(CRP)[1] 理解 Web 的重排和重绘[2] 参考文章: 关键渲染路径[3] developers.google.cn:关键渲染路径[4] 参考资料 [1]关键渲染路径(CRP): https.../repaint-and-reflow.html [3]关键渲染路径: https://github.com/berwin/Blog/issues/29 [4]developers.google.cn:

1.3K71

一篇文章带你了解JavaScript Html DOM html

HTML DOM允许JavaScript来修改HTML元素的内容。 一、修改HTML输出流 JavaScript可以创建动态的HTML内容 。...我们使用HTML DOM得到id="header"元素。 JavaScript 修改这个元素的内容 (innerHTML)。...我们使用HTML DOM 得到id="myImage"的元素。...四、总结 本文基于JavaScript基础,介绍了通过JavaScript修改Html输出流,改变Html内容,介绍了如何修改属性值,以及在for...in 语句遍历对象的属性的应用,都做了详细的讲解。...希望大家可以根据文章的内容,积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。

60320

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

值得注意的是,每一次的dom或者造成布局影响的变动,都会触发 reflow(回流/重排),会消耗很大的页面资源。...reflow是由于dom或者布局的变动而触发,如修改了dom位置,或是宽高,margin, padding等。...reflow的方法这里可以看看如何减少reflow的次数 对CSS的优化 根据上面的内容我们知道了,想要渲染页面必须有render tree,而render tree是由DOM tree以及CSSOM...DOM,将控制权移交给 JavaScript 引擎;等 JavaScript 引擎运行完毕,浏览器会从中断的地方恢复 DOM 构建。...为了实现最佳性能,建议去除关键渲染路径中任何不必要的JavaScript /关键渲染路径是指优先显示与当前用户操作有关的内容。/

59410

Web前端性能优化解决方案

** 3、请减少对DOM的操作 ** 基本原理: 对DOM操作的代价是高昂的,这在网页应用中的通常是一个性能瓶颈。 天生就慢。...在《高性能JavaScript》中这么比喻:“把DOM看成一个岛屿,把JavaScript(ECMAScript)看成另一个岛屿,两者之间以一座收费桥连接”。...解决办法: 修改和访问DOM元素会造成页面的Repaint和Reflow,循环对DOM操作更是罪恶的行为。...所以请合理的使用JavaScript变量储存内容,考虑大量DOM元素中循环的性能开销,在循环结束时一次性写入。 减少对DOM元素的查询和修改,查询时可将其赋值给局部变量。...9、注意控制Cookie大小和污染 基本原理和使用方法: 有关Cookie的基础和高级知识可以去看本人写过的一篇文章JavaScript 操作 Cookie》。

82910

记一次网易前端实习面试

repaint主要是针对某一个DOM元素进行的重绘,reflow则是回流,针对整个页面的重排 严重性: 在性能优先的前提下,性能消耗 reflow大于repaint。...牺牲平滑度满足性能:动画精度太强,会造成更多次的repaint/reflow,牺牲精度,能满足性能的损耗,获取性能和平滑度的平衡。...使用虚拟domJavaScript构建完全响应式的UI框架 扩展 Vue 组件 使用Three.js制作酷炫无比的无穷隧道特效 一个治愈JavaScript疲劳的学习计划 全栈工程师技能大全 WEB...前端性能优化常见方法 一小时内搭建一个全栈Web应用框架 干货:CSS 专业技巧 四步实现React页面过渡动画效果 让你分分钟理解 JavaScript 闭包 ---- ---- 小手一抖,资料全有...长按二维码关注京程一灯,阅读更多技术文章和业界动态。

65620

浏览器渲染原理及流程

一个结点的 Reflow 很有可能导致子结点,甚至父点以及同级结点的 Reflow 。在一些高性能的电脑上也许还没什么,但是如果 Reflow 发生在手机上,那么这个过程是延慢加载和耗电的。...实际使用时,可以遵循下面两个原则: CSS 优先:引入顺序上,CSS 资源先于 JavaScript 资源。 JavaScript 应尽量少影响 DOM 的构建。...(移动设备) 这里主要参考Google的浏览器渲染性能的基础讲座,想看更详细内容可以去瞅瞅~ 4.1 优化JS的执行效率 1....使用Chrome DevTools的Timeline来分析JavaScript性能 打开 ChromeDevTools>Timeline>JSProfile,录制一次动作,然后分析得到的细节信息,从而发现问题并修复问题...4.2 降低样式计算的范围和复杂度 添加或移除一个DOM元素、修改元素属性和样式类、应用动画效果等操作,都会引起DOM结构的改变,从而导致浏览器要repaint或者reflow

4.5K32

前端各种优化

请减少对DOM的操作     基本原理:   对DOM操作的代价是高昂的,这在网页应用中的通常是一个性能瓶颈。 天生就慢。...在《高性能JavaScript》中这么比喻:“把DOM看成一个岛屿,把JavaScript(ECMAScript)看成另一个岛屿,两者之间以一座收费桥连接”。...解决办法: 修改和访问DOM元素会造成页面的Repaint和Reflow,循环对DOM操作更是罪恶的行为。...所以请合理的使用JavaScript变量储存内容,考虑大量DOM元素中循环的性能开销,在循环结束时一次性写入。   减少对DOM元素的查询和修改,查询时可将其赋值给局部变量。...注意控制Cookie大小和污染     基本原理和使用方法:   有关Cookie的基础和高级知识可以去看本人写过的一篇文章JavaScript 操作 Cookie》。

92580

浏览器渲染流程

页面的设计与实现之后,前端工程师就需要关注性能优化了。其中浏览器渲染机制是前端性能优化的关键,弄浏览器在背后做了什么,才能在明白如何优化。...总结 浏览器解析(包括HTML,SVG,XHTML,CSS,JavaScript等等) 解析HTML代码,构建Document Object Model (DOM) 解析CSS代码,构建CSS Object...在一些高性能的电脑上也许还没什么,但是如果reflow发生在手机上,那么这个过程是非常痛苦和耗电的。 所以,下面这些动作有很大可能会是成本比较高的。...你可以看到很多这样的网页在滚动的时候性能有多差。因为滚屏也有可能会造成reflow。 基本上来说,reflow有如下的几个原因: Initial。网页初始化的时候。 Incremental。...一些Javascript在操作DOM Tree时。 Resize。其些元件的尺寸变了。 StyleChange。如果CSS的属性发生变化了。 Dirty。

46330

性能优化之reflow和repaint

DOM Tree里的每个节点都会有reflow方法,一个结点的reflow可能导致其子结点,甚至父点以及同级结点的 reflow。在PC端或许还没什么,但是在手机上,还是比较耗性能和耗电的。...以下情况会导致reflow: 增加货移除css样式 改变字体大小 改变窗口大小 操作class属性 激活css伪类 内容变化,如在input内输入文字 js操作DOM 获取offsetTop, offsetLeft...四.如何减小reflow的影响: 减少不必要的DOM层级. 避免使用table进行布局,因为可能很小的一个小改动会造成整个 table 的重新布局。...从图中可以判断出性能问题到底出现在哪个环节,是js的执行,还是渲染 ?   图中不同颜色代表不同的事件, 哪个色块越大, 说明耗时越长,问题越大.可以根据此去进行优化....黄色: javaScript执行时间 紫色: 样式重新计算和布局, 即reflow时间 绿色: repaint时间 如何对线上项目进行性能监控

1.3K80

精读《web reflow

网页重排(回流)是阻碍流畅性的重要原因之一,结合 What forces layout / reflow 这篇文章与引用,整理一下回流的起因与优化思考。...那么排除 JS、DOM、CSSOM、Composite 可能导致的性能问题外,剩下的就是我们这次关注的重点,reflow 了。从顺序上可以看出来,重排后一定重绘,而重绘不一定触发重排。...那为什么要注意 reflow 导致的性能问题呢?...(源码) 精读 What forces layout / reflow 下面引用了几篇关于 reflow 的相关文章,笔者挑几个重要的总结一下。...虽然当 JavaScript 运行时,前一帧中的所有旧布局值都是已知的,但当你对布局做了修改后,前一帧所有布局值缓存都会作废,因此当下次获取值时,不得不重新触发一次 reflow

63910

前端硬核面试专题之 HTML 24 问

严重性: 在性能优先的前提下,性能消耗 reflow 大于 repaint。 体现:repaint 是某个 DOM 元素进行重绘;reflow 是整个页面进行重排,也就是页面所有 DOM 元素渲染。...除上面所提到的 DOM 元素 style 的修改基本为 reflow。例如元素的任何涉及 长、宽、行高、边框、display 等 style 的修改。...牺牲平滑度满足性能:动画精度太强,会造成更多次的 repaint/reflow,牺牲精度,能满足性能的损耗,获取性能和平滑度的平衡。...最典型的有 Overture 当然也包括 Google 的广告项目 Google Adwords。...这是 Javascript 语言和 DOM 主宰的领域。 ---- 有这么一段 HTML,请挑毛病 ? 哥写的不是HTML,是寂寞。

1.1K20

浏览器重绘与回流

Reflow的成本比Repaint的成本高得多的多。DOM Tree里的每个结点都会有reflow方法,一个结点的reflow很有可能导致子结点,甚至父点以及同级结点的reflow。...在一些高性能的电脑上也许还没什么,但是如果reflow发生在手机上,那么这个过程就会卡顿与耗电。...,浏览器会把回流和重绘的操作积攒一批,当操作达到一定数量或者到达时间阈值,然后做一次reflow,称为异步reflow或增量异步reflow。...调试 在很多浏览器的开发者工具中提供了渲染操作的性能分析,以谷歌浏览器为例,其performance就可以查看各构建过程的性能消耗,在Rendering中可以使用Paint flashing高亮重绘区域...wordpress/2010/01/%E5%9B%9E%E6%B5%81%E4%B8%8E%E9%87%8D%E7%BB%98%EF%BC%9Acss%E6%80%A7%E8%83%BD%E8%AE%A9javascript

97620

Web 性能优化-页面重绘和回流(重排)

前言 早在五年前,Google 就提出了 1s 完成终端页面的首屏渲染的标准。...,再加上主流前端框架(react、vue、angular)的已经帮我们解决了大多数的性能问题,但是前端渲染性能优化依然值得学习,除去网络方面的消耗,留给前端渲染的时间已经不多了。...浏览器是如何渲染一个页面的 浏览器把获取到的 HTML 代码解析成1个 DOM 树,HTML 中的每个 tag 都是 DOM 树中的1个节点,根节点是 document 对象。...Reflow 的成本比 Repaint 高得多的多。DOM Tree 里的每个结点都会有 reflow 方法,一个结点的 reflow 很有可能导致子结点,甚至父点以及同级结点的 reflow。...假如需要在下面的 html 中添加两个 li 节点: 使用 JavaScript: let ul = document.getElementByTagName('ul'

1.1K20

【转】不同内核浏览器的差异以及浏览器渲染简介

经常看见很多文章在报道说哪个浏览器更快,其实大部分说的就是JavaScript的渲染速度,而不是页面的载入速度。在网速许可的情况下,其实各个浏览器的页面载入速度差别不大(Opera逊色一些)。...通常我们都无法预估浏览器到底会reflow哪一部分的代码,它们都彼此相互影响着。 ?  reflow问题是可以优化的,我们可以尽量减少不必要的reflow。...今天我们主要根据浏览器的渲染原理对CSS的书写性能做一点改进(当然还有JS本篇文章暂不考虑,后面的文章会做介绍),下面让我们一起来揭开浏览器的渲染原理这一神秘的面纱吧: 最终决定浏览器表现出来的页面效果的差异是...文档,转换树中的标签到DOM节点,它被称为“内容树”。...主要的流程就是:构建一个dom树,页面要显示的各元素都会创建到这个dom树当中,每当一个新元素加入到这个dom树当中,浏览器便会通过css引擎查遍css样式表,找到符合该元素的样式规则应用到这个元素上。

2K10

webApp开发心得「建议收藏」

关于页面渲染 浏览器会解析三个东西:HTML、Javascript、CSS 浏览器首先会根据HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,javascript可以通过DOM...上面的描述简单而言可以分为以下流程: l 生成DOM树 l 计算CSS样式 l 构建render tree l reflow,定位元素位置大小 l 绘制页面 在这个过程中,若是javascript...reflow分为局部回流与全局回流,会影响下面的,不会影响上面的元素 reflow耗用的系统资源较大,DOM Tree中受到影响的节点皆会reflow,然后影响其子节点最坏的情况是所有节点reflow...,该问题引发的现象便是低性能的电脑风扇不停的转,手机变得很热,并且非常耗电,以下操作可能引起reflow l 操作dom结构 l 动画 l DOM样式修改 l 获取元素尺寸的API 减少使用定位属性...l 避免将获取DOM样式属性的操作写在循环中,可能引起重复reflow 内存资源优化 移动端的javascript 首先,移动端的性能与PC端的性能完全不在一个数量级上,比如,我哥做过一个测试,使用

82340
领券