转:http://www.ghugo.com/chrome-rendering-tools-1/
页面的绘制时间(paint time)是每一个前端开发都需要关注的的重要指标,它决定了你的页面流畅程度。而如何去观察页面的绘制时间,找到性能瓶颈,可以借助Chrome的开发者工具。
本文主要介绍Chrome渲染分析工具 Rendering。
如上图,按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所在的区域,而涉及到周边的位置。发生这种情况的原因,是页面的重绘是个连带反应,会影响周边元素。
开启这个选项之后,可以做一些常规的页面交互操作,如Slider切换,拍拍网左侧导航mouse over时效果,可以看到页面效果所影响的范围。
再比如滚动页面,拍拍首页会出现一个返回顶部的按钮,滚动的时候,会发现返回顶部这个区域在不停的进行重绘,而返回顶部是position:fixed
定位的。这也解释了为什么fixed定位是最耗性能的属性之一
如果这个时候,我们给头部的再加个position:fixed
,然后滚动页面时,会发现整个页面都几乎是绿色框住了,这主要是所有具有fixed定位的元素,在页面绘制时会处于同一个渲染层级上,一头一尾的fixed无疑会导致整个页面进行重绘,性能非常差。
这里提到一个渲染层级的概念,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》
相关推荐
Chrome浏览器的Timeline工具是一款强大的性能分析工具,用于检查Web应用程序的性能表现,特别是在页面加载、DOM事件处理、页面布局和渲染方面。Timeline工具提供了一种可视化的方式,通过事件、帧和实时内存用量的...
本篇将深入探讨Chrome的核心组件——渲染引擎(Rendering Engine),也称为Blink,以及它与HTML5标准的紧密关系。 一、Blink渲染引擎 Blink是由Google开发的一款开源渲染引擎,它负责解析网页内容,呈现图形,处理...
离屏渲染(Offscreen Rendering)是OpenGL中的一个重要技术,它允许我们在屏幕之外的纹理或帧缓冲区进行渲染操作,然后将结果用于后续的图形处理或者保存为图像文件。这个初级的OpenGL程序Demo就是围绕离屏渲染展开...
3. **VS2017集成**:使用Visual Studio 2017编译CEF示例,开发者可以利用其强大的调试工具、代码编辑器和项目管理功能,方便地调试和优化离屏渲染代码。 4. **CEF与Chromium的兼容性**:由于CEF是基于Chromium的,...
为了解决这个问题,我们可以使用动态服务器端渲染(Dynamic Server-Side Rendering, DSSR)。Go-Rendora就是这样一款工具,它利用无头Chrome技术,将JavaScript网站的内容预先渲染成静态HTML,以便于搜索引擎抓取。 ...
工具的使用也非常重要,开发过程中可能会用到版本控制工具(如Git)、代码编辑器(如VS Code)、调试工具(如Chrome DevTools)以及性能分析工具(如Lighthouse或Chrome Performance)。这些工具可以帮助开发者高效...
Rendertron ... Rendertron使用Headless Chrome渲染请求的页面,您的PWA何时完成加载,并将响应序列化回原始请求。 要使用Rendertron,您的应用程序将配置以确定是否将请求代理到Rendertron。 Rendertron
2. 将第一项“覆盖软件渲染列表”(英文为Override software rendering list)选择“启用”(enable)。 3. 关闭Chrome浏览器,然后重新打开,输入chrome://gpu/,检查是否启用了WebGL功能。 接下来,需要安装Node....
Vue.js Devtools 是一个强大的浏览器开发者工具,专为Vue.js应用程序设计,帮助开发者在Chrome浏览器中进行调试和分析Vue实例。这个插件能够提供组件树、状态观察、性能分析等功能,极大地提升了开发和调试Vue应用的...
文本渲染属性`text-rendering`是CSS中一个用于控制渲染引擎如何优化文本显示的属性,尤其在SVG(可缩放矢量图形)中使用。尽管目前没有CSS标准对其作出正式定义,但像Firefox和WebKit核心的浏览器已经在HTML/XML内容...
CEF,全称Chromium Embedded Framework,是一个开源项目,它允许开发者在自己的应用程序中嵌入Google Chrome浏览器引擎。离屏渲染(Off-Screen Rendering, OSR)是CEF提供的一种功能,它使得CEF可以在没有窗口或者不...
在Web开发中,JavaScript框架如React、Vue或Angular等通常使用客户端渲染(Client-Side Rendering, CSR),这种模式下,浏览器下载JavaScript后才开始构建DOM并呈现页面。然而,这会导致首次加载时间较长,因为...
pdf-rendering-srv:基于Puppeteer ChromeHTML到PDF渲染微服务。 呈现PDF的自助服务
另外,Chrome还使用预加载技术来优化资源加载,这包括Browser Prefetching和Pre-rendering等策略。这些技术能够帮助浏览器预测用户即将访问的链接,从而在后台加载相关资源,减少等待时间。 在移动平台上,Chrome...
在这个特定的示例"cef离屏渲染osr示例-lq20190604.zip"中,我们关注的是离屏渲染(Off-Screen Rendering,简称OSR)和透明背景的实现。 离屏渲染是CEF提供的一种高级特性,它允许在没有实际显示设备的情况下进行...
这个系统利用了Vue.js的单文件组件(Single File Components, SFC)和Node.js的Express框架,实现了服务端渲染(Server-Side Rendering, SSR),提升了用户体验和SEO性能。 Vue.js是一个渐进式前端框架,其核心特性...
trmix(Type Rendering Mix) 是个基于浏览器的应用 CSS 文本渲染的引擎。Type Rendering Mix 通过解析用户代理字符串检测浏览器的文本 rasterizer 和 antialiasing 方法。 Type Rendering Mix 支持的浏览器: IE6 ,...
11. 渲染进程中的多线程模型(MultiThreadsModelsinRendererProcess):在渲染进程内部使用多个线程来提高页面渲染的并行性和效率。 12. Chromium 调度器(ChromiumScheduler):确保正确的任务在正确的时间执行,...
3. **调试工具的使用**:Chrome 开发者工具提供了丰富的功能,如 Rendering 工具和 FPS Meter,它们可以帮助识别性能瓶颈。 4. **硬件加速的代价**:虽然硬件加速可以提升用户体验,但过度使用可能会带来反效果,...