浏览器渲染优化4(styles and layout)

你已经学会了查找和解决问题。希望你的js能正常运行了,但这只是制作帧的一小部分。在这节课里,你将处理样式,也就是像开发工具里标记的那样,重新计算样式。学完这节课后,你将学会从样式计算过程中找到性能问题并学会解决这些问题。请记住,对于我们将要介绍的问题,经常可能是由js触发的,但并不一定是js的问题,在前面我们学习过,样式计算过程将根据DOM确定每个元素的外观属性应该是什么,浏览器获得和DOM很像的渲染树,但只包括需要绘制的元素。

除了考虑元素数量之外,还需要考虑选择器匹配,选择器匹配是只确定某些样式是否应该应用到任何指定DOM元素的过程。

可能会选择这个div包含这样的类或者是这样的更复杂选择器,.b-s:nth-child(3),复杂是因为为了知道样式是否适用它需要弄清楚这个是否是第三个子项。数量少的时候没有问题,但是一旦数量大了,就会有影响。一种非常好的方法是BEM即块(block),元素(element),修饰符(modifier),这是一种编写css的方式,它会对样式元素使用单个类名称,不仅会提供更加模块化,课重复使用,课阅读的样式,并且对性能更优优势。因为对现代浏览器来说,通常类批判是最快的匹配选择器。对于我们刚刚提到的示例,你可以使用这样的类,是一个box即block没有任何元素,而修饰符是three(

.box--three)表示是第三个方框

刚刚解释了复杂的css选择器会如何给浏览器增加工作量,选择器越复杂浏览器就更需要多次在DOM树上上下下移动,次数越多,找到正确元素花费时间就越长,

  

看http://jsbin.com/gozula/1/quiet这个来找

https://dl.dropboxusercontent.com/u/2272348/codez/udacity/box-recalc-style-slow.html打开这个网址,打开时间轴,按下红色的录制按钮,然后点击“clilke me”按钮,在时间轴重找到Recalculate Style部分,发现self time时间太长,根本达不到60帧/秒,这种情况下,可以采取三种措施,可以减少受影响元素的数量,可以降低选择器的复杂性活或者同时实现二者。

减少受影响元素的数量,意味着减少在渲染树中修改更少的节点,降低选择器复杂度意味着使用更少的标记和类名称来选择选择,但为何不二者都采用呢?这样就双赢了,

https://dl.dropboxusercontent.com/u/2272348/codez/udacity/box-recalc-style-slow.html

性能的提升很明显。

http://output.jsbin.com/aqavin/2/quiet这个网址拖动一下滑条,这一过程需要很长时间,要找出原因,我们需要重新查看下管道,尤其是各个任务的顺序,

顺序很清晰,先执行js,然后执行样式计算,然后执行布局流程,保持这一顺序非常重要,

这段代码问题是使用offsetwidth获取每个元素的宽度,浏览器必须先计算该宽度,这就需要布局,我们来看看这对管道造成的影响,代码将管道布局移到了这里,使布局跑到了样式计算的前方,这并不是问题,除非你更改了样式,而当我们设置段落的宽度时,就更改了样式。

现在陆篮球就要重新完成一遍,这一错误的代价很高。如果你触发了强制同步布局,开发者工具会在这里用感叹号标出来,在帧图表视图中,你会在布局记录的右上角看到红色的三角形。

就会出现强制同步布局,当我们访问某些属性时,就会导致布局流程问题。

(我们称之为布局抖动,也就是快速多次进行强制同步布局)在重新计算样式和布局之间切换,所以这段代码时强制同步布局。第二段代码同样访问offsetHeight导致浏览器运行布局,然后,这里出现了样式更改。这个选项肯定对性能有负面影响。

,然后读取布局属性,这个答案似乎是合理的,因为你先更改了样式,然后读取布局属性,问题在与这个loops,更改样式后,需要运行布局,如果就发生一次,没什么关系。如果在帧结束前,你需要重新计算样式,并再次运行布局则导致浏览器重新执行大量工作,最终导致同步布局。

在js阶段先读取布局属性,意味着你将使用上一帧的布局,然后进行所有样式更改的话,在这个管道中,剩余部分看起来正常,这里关键是批量,所有样式更改将在js之后批量发生,这意味着重新计算样式将在帧结束时发上,并处在管道的正确位置。

然后批量处理所有的样式更改,这个一个非常简单的修正方法,但是可以大大提高性能。

时间: 2024-10-20 13:53:52

浏览器渲染优化4(styles and layout)的相关文章

浏览器渲染优化

在学习react-script时有推荐学习渐进式web apps里有一个关于讲解浏览器渲染优化的视频,内容如下 每个视频都很短小,但是每个知识点都讲的极好,还有一些小测试辅助,跟着老师做,对浏览器渲染会有进一步的认识.

浏览器渲染优化3

我们之前已经学到并非所有样式更改都是对等的,某些会触发布局,绘制和渲染层合成流程,某些只会触发绘制和渲染层合成流程,而某些仅触发渲染层合成流程,在这节课里,你将学习如何优化渲染管道的最后两个阶段,及绘制和渲染层合成.如果你想详细了解样式是如何影响到渲染管道的,请看https://csstriggers.com/,如果你想知道你要创建动画效果的内容是否会触发布局,绘制和合成流程也可以看看https://csstriggers.com/. 我们来看看我们的工具包中有没有解决绘制难题的工具,绘制流程通

浏览器渲染优化2

我们已经做好获得良好性能的准备了,你明白为何我们力求达到60帧/秒的目标,创建帧涉及哪些内容,并且知道更改属性,会以不同的方式影响到性能.在应用的生命周期的某些阶段问题更大,你需要把时间和经历投入到用户最关心的领域. http://jakearchibald.github.io/jank-invaders/

浏览器渲染原理的个人整理

近年来,随着各种virtual dom的技术大行其道,越来越多新入行的同学对于dom的概念,乃至浏览器渲染的知识的了解和熟悉程度都越来越低了,当然,毕竟浏览器渲染牵涉到内容广大而深远,不同浏览器的策略又不完全相同,但是近来团队里的童鞋频繁遇到了动效实现的具体方式上选择的困扰,于是笔者从前到后梳理了一下有关的知识点,只是没想到不理不知道,一理吓一跳,整个过程感觉自己也有了很多新的收获,真可谓温故而知新. 首先是大家都熟悉的一张传统的浏览器渲染流程图,图来源为耗子叔的blog,笔者最开始入门的时候也

浏览器渲染性能优化

染性能 页面不仅要快速加载,而且要顺畅地运行:滚动应与手指的滑动一样快,并且动画和交互应如丝绸般顺滑. 60fps 与设备刷新率 目前大多数设备的屏幕刷新率为 60 次/秒.因此,如果在页面中有一个动画或渐变效果,或者用户正在滚动页面,那么浏览器渲染动画或页面的每一帧的速率也需要跟设备屏幕的刷新率保持一致. 其中每个帧的预算时间仅比 16 毫秒多一点 (1 秒/ 60 = 16.66 毫秒).但实际上,浏览器有整理工作要做,因此所有工作需要在 10 毫秒内完成.如果无法符合此预算,帧率将下降,并

浏览器渲染基本原理(五):优化渲染性能

渲染卡顿是怎么回事? 网页不仅应该被快速加载,同时还应该流畅运行,比如快速响应的交互,如丝般顺滑的动画等. 大多数设备的刷新频率是60次/秒,也就说是浏览器对每一帧画面的渲染工作要在16ms内完成,超出这个时间,页面的渲染就会出现卡顿现象,影响用户体验. 为了保证页面的渲染效果,需要充分了解浏览器是如何处理HTML/JavaScript/CSS的. 渲染流程分为几步? JavaScript:JavaScript实现动画效果,DOM元素操作等. Style(计算样式):确定每个DOM元素应该应用什

浏览器渲染阻塞与优化-详解推迟加载、异步加载。

我认为一个前端工程师是否优秀,很大程度上取决于对前端性能上优化的功力.所以性能优化对前端真的很重要!!! 本文介绍了什么是阻塞.为什么会阻塞?阻塞优化常用的5种方式以及他们的注意事项. 浏览器渲染阻塞与优化      什么是阻塞?在页面中我们通常会引用外部文件,而浏览器在解析HTML页面是从上到下依次解析.渲染,如果<head>中引用了一个a.js文件,而这个文件很大或者有问题,需要2秒加载,那么浏览器会停止渲染页面(此时是白屏显示,就是页面啥都没有),2秒后加载完成才会继续渲染,这个就是阻塞

浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)

先看一下标准定义的浏览器渲染过程(网上找的): 浏览器打开网页的过程 用户第一次访问网址,浏览器向服务器发出请求,服务器返回html文件: 浏览器开始载入html代码,发现 head 标签内有一个 link 标签引用外部CSS或JS文件: 浏览器又发出CSS及JS文件的请求,服务器返回这个CSS,JS文件: 浏览器继续载入html中 body 部分的代码,并且CSS,JS文件已经拿到手了,可以开始渲染页面了: 浏览器在代码中发现一个 img 标签引用了一张图片,向服务器发出请求.此时浏览器不会等

浏览器渲染速度优化

前言: 要实现网站的大提速,必须在各个环节进行精确的设置和安排.网站一旦打开速度变慢,往常,站长们第一时间肯定会认为“服务器慢”,其实看完本章后,你会发现或许结果并不完全是这样.影响网站速度的因素千差万别,服务器仅是其中一小部分因素而已. 有一种常见的情况,同样的服务器,网站与网站之间的打开速度也千差万别,这就和网站的制作工艺有相当大的关系:本节重点讲一下网站制作工艺优化. 我们可以大致将影响网络速度的因素分为五个来进行分别优化: 一.服务器硬件配置和设置: 二.服务器的线路及带宽: 三.用户电