`

Chrome渲染分析之Rendering工具使用

 
阅读更多

转:http://www.ghugo.com/chrome-rendering-tools-1/

 

页面的绘制时间(paint time)是每一个前端开发都需要关注的的重要指标,它决定了你的页面流畅程度。而如何去观察页面的绘制时间,找到性能瓶颈,可以借助Chrome的开发者工具。

本文主要介绍Chrome渲染分析工具 Rendering。

rendering1

如上图,按F12调出开发者工具,然后按“ESC”调出Rendering界面。

以上5个选项的意思如下:

1、Show paint rectangles 显示绘制矩形

2、Show composited layer borders 显示层的组合边界(注:蓝色的栅格表示的是分块)

3、Show FPS meter 显示FPS帧频

4、Enable continuous page repainting 开启持续绘制模式 并 检测页面绘制时间

5、Show potential scroll bottlenecks 显示潜在的滚动瓶颈。

OK,简单的翻译了下,估计这样看也不清楚是啥意思。下面以这个网站http://css3exp.com/moon/ 和 我负责的拍拍网站:http://www.paipai.com 作为基础 逐个讲解:

由于时间及篇幅关系,本文分为几篇文章进行讲解。

1、Show paint rectangles

开启 显示绘制矩形 这个选项,可以看到绿色的框(之前的版本都是红色的框,现在改绿色了,呵呵),这个绿色的框,表示页面正在绘制的区域,即是页面正在渲染,发生绘制操作的区域。 这是用来了解滚动时页面表现的第一个指示器。

鼠标移到图片上,可以发现css3动画的位移,而css3动画的位移导致页面重绘,重绘的区域即是绿色框住的部分。细心的朋友可能会发现,这个绿色框住的部分,并不仅仅就是刚好那个div所在的区域,而涉及到周边的位置。发生这种情况的原因,是页面的重绘是个连带反应,会影响周边元素。

rendering3

开启这个选项之后,可以做一些常规的页面交互操作,如Slider切换,拍拍网左侧导航mouse over时效果,可以看到页面效果所影响的范围。

再比如滚动页面,拍拍首页会出现一个返回顶部的按钮,滚动的时候,会发现返回顶部这个区域在不停的进行重绘,而返回顶部是position:fixed定位的。这也解释了为什么fixed定位是最耗性能的属性之一

rendering4

如果这个时候,我们给头部的再加个position:fixed,然后滚动页面时,会发现整个页面都几乎是绿色框住了,这主要是所有具有fixed定位的元素,在页面绘制时会处于同一个渲染层级上,一头一尾的fixed无疑会导致整个页面进行重绘,性能非常差。

rendering5

这里提到一个渲染层级的概念,webkit内核的浏览器在进行页面绘制、渲染并最终展示在浏览器窗口上,实际上就像是Photoshop上的图层,不同的图层进行叠加最后生成一个图片的过程。

这个层的详细介绍,我下一篇文章会详细介绍,这里先卖个关子。

回到之前的话题,既然绿色框住的部分表示页面重绘,那哪些操作会导致重绘呢?

影响页面重绘的因素

主要有2大类:

1、页面滚动

2、互动操作
1).Dom节点被Javascript改变,导致Chrome重新计算页面的layout。

2).动画不定期更新。

3).用户交互,如hover导致页面某些元素页面样式的变化。

4).调整窗口大小 和 改变字体

5).内容变化,比如用户在input框中输入文字

6).激活 CSS 伪类,比如 :hover

7).计算 offsetWidth 和 offsetHeight 属性

8).增加或者移除样式表

总结

影响重绘的因素很多,这里列举了部分常见的操作,在前端开发的过程中,1、应该尽量避免重绘,并且尽可能的使绘制区域最小,以提升页面性能。

就上面拍拍网的例子,一头一尾加上fixed定位导致整个页面重绘,是不可取的。也许你分析完后以后都不敢用fixed,但是可能在实际工作中这种情况无法避免(设计师或产品经理要求)。何东西都有它适用的地方,重要的是作为前端人员,你应该能够测量并知道你写的代码所带来的性能损耗及所造成的影响。

2、同时避免组合触发,如滚动的时候同时执行hover效果操作,一个例子(Expensive Scrolls),
在滚动的时候同时也有可能触发页面模块的hover效果,而hover效果用了box-shadow 、border-radius等耗性能大的样式。从而可能导致丢帧现象。

如何去优化:技巧在于滚动时,关闭模块的hover效果,然后设定一个计时器,时间到了再把hover打开。意思是我们保证在滚动时不去执行昂贵的互动事件重绘。当你停止动作一段时间后,我们再将动画开启。

具体可参看这篇文章《Avoiding Unnecessary Paints

分享到:
评论

相关推荐

    rendertron:无头Chrome渲染解决方案

    Rendertron ... Rendertron使用Headless Chrome渲染请求的页面,您的PWA何时完成加载,并将响应序列化回原始请求。 要使用Rendertron,您的应用程序将配置以确定是否将请求代理到Rendertron。 Rendertron

    CSS 文本渲染属性text-rendering的介绍和使用示例

    CSS关于文本渲染的属性text-rendering告诉渲染引擎工作时如何优化显示文本。 浏览器会在渲染速度、易读性(清晰度)和几何精度方面做一个权衡。 我们知道,SVG-可缩放矢量图形(Scalable Vector Graphics)是由W3C...

    pdf-rendering-srv:基于Puppeteer ChromeHTML到PDF渲染微服务。 呈现PDF的自助服务

    pdf-rendering-srv:基于Puppeteer ChromeHTML到PDF渲染微服务。 呈现PDF的自助服务

    文本渲染引擎trmix.zip

    trmix(Type Rendering Mix) 是个基于浏览器的应用 CSS 文本渲染的引擎。Type Rendering Mix 通过解析用户代理字符串检测浏览器的文本 rasterizer 和 antialiasing 方法。 Type Rendering Mix 支持的浏览器: IE6 ,...

    Font Rendering Enhancer-crx插件

    适用于Chrome的字体渲染增强器。 页面(http和https)上的文字更暗更清晰。 描述字体渲染增强器来自thunder13的Opera字体渲染。 几乎每个页面(http和https)上的文字都更暗,更清晰。 通过proxxy修改并移植了Mac ...

    puppeteer-renderer:基于Puppeteer(Chrome无头节点API)的网页渲染器

    基于Puppeteer(Chrome无头节点API)的网页渲染器 (Chrome无头节点API)的网页渲染器。 通过代理进行有用的服务器端渲染。 将HTML,PDF和屏幕截图输出为PNG。 要求 您可以运行Chromium或docker。 入门 安装依赖项...

    Pixelated.js:“图像渲染:pixelated” CSS属性的polyfill

    它提供与image-rendering: pixelated类似的功能image-rendering: pixelated CSS属性,当前Webkit浏览器(Chrome,Safari,Opera)支持此属性,但Edge或Firefox不支持。 Pixelated.js还是使用image-rendering: crisp...

    Android性能优化篇 [ 谷歌官方 ]-10211632

    目 录 性能优化典范 第一季 第二季 第三季 Android性能优化之渲染篇 Android性能优化之运算篇 Android性能优化之内存篇 Android性能优化之电量篇

    breezy-pdf-lite:通过Chrome将HTMLCSSJS输入,PDF输出

    提交一段HTML,重新获得Google Chrome渲染的PDF。 由无头Google Chrome提供支持的快速站起来HTML到PDF服务。 一键部署,然后开始从Web应用程序或命令行生成PDF。 入门 1.提交要转换HTML 这是通过Web服务器上的POST...

    Web渲染代理:在现代Web上使用老式的、历史的、遗留的浏览器——tenox7/wrp

    WRP - Web Rendering Proxy A browser-in-browser "proxy" server that allows to use ...This machine should be pretty modern, high spec and Google Chrome / Chromium Browser is required to be preinst

    graphics-algorithm:3D图形学算法代码。包括软渲染,光线追踪,PBR等〜

    3D骨架分析(3D模型骨架提取及分析) [] [] 3D场景模糊(屏幕后处理-景深模糊) [] [] 多缓冲区X射线(离屏渲染FBO-人物透墙) [] 3D Medical Body(医疗项目3D人体展示系统) [] [] OpenGL MotionStreak...

    udacity-FEWD-P4

    通过使用Chrome Dev。 工具和Google Page Speed API来衡量页面性能。 测量后,优化CSS,JS和HTML,并使用grunt来最小化文件和图像:投资组合页面优化: Google字体将阻止html dom和css cssom进程,使用了字体加载器...

    koa-seo:koa SEO中间件

    该项目想要以通用的方式解决此类问题,它检测到来自搜索引擎爬虫的请求,然后使用无头chrome渲染出您的现代网页并返回到爬虫。 这是koa-seo的架构图: 利用 npm i koa-seo 然后使用它: const Koa = require ( '...

    XPath-Helper 爬虫 网络

    提取,编辑和轻松评估XPath...One word of caution: When rendering HTML tables, Chrome inserts artificial <tbody> tags into the DOM, which will consequently show up in queries extracted by this extension.

    reactime:Chrome扩展程序,用于改善和优化React应用程序中的性能(与Gatsby和Next.js兼容)

    当前,Reactime支持使用状态组件和Hook的React应用,包括Gatsby和Next.js之类的框架,并具有对Recoil和Context API的beta支持。 Reactime 9.0版允许您通过存储“一系列”状态数据快照在应用程序上运行A / B测试。 ...

    View Rendered Source-crx插件

    对于使用Angular,ReactJS和Vue.js之类JavaScript框架的Web开发人员以及SEO来说,这是一个必不可少的工具,它可以帮助SEO了解搜索引擎如何查看您的网页,尤其是考虑到Google的动态服务解决方案。 原始版本和呈现版本...

    boilerplate.react.spa.full-server:用于在具有完整服务器的React中创建SPA的样板

    启动开发服务器yarn start:server:dev 当服务器以dev模式启动时,您可以通过访问chrome://inspect调试服务器代码(如果您使用的是Chrome浏览器)。 然后转到“ Sources选项卡,找到要调试的文件。建立并启动生产程序...

Global site tag (gtag.js) - Google Analytics