西安web培训 如何提升页面渲染效率

  • 发布时间:2017-02-22 10:44:12,加入时间:2015年10月20日(距今3560天)
  • 地址:中国»陕西»西安:陕西省西安市高新区唐兴路10号
  • 公司:蓝鸥科技有限公司西安分公司, 用户等级:普通会员 已认证
  • 联系:杨萍,手机:17791055930 电话:029-88867933 QQ:2962671591

西安web培训 如何提升页面渲染效率

Web页面的性能

我们每天都会浏览很多的Web页面,使用很多基于Web的应用。这些站点看起来既不一样,用途也都各有不同,有在线视频,Social Media,,邮件客户端,在线存储,甚至图形编辑,地理信息系统等等。虽然有着各种各样的不同,但是相同的是,他们背后的工作原理都是一样的:

用户输入网址

浏览器加载HTML/CSS/JS,图片资源等

浏览器将结果绘制成图形

用户通过鼠标,键盘等与页面交互

这些种类繁多的页面,在用户体验方面也有很大差异:有的响应很快,用户很容易就可以完成自己想要做的事情;有的则慢慢吞吞,让焦躁的用户在受挫之后拂袖而去。毫无疑问,性能是影响用户体验的一个非常重要的因素,而影响性能的因素非常非常多,从用户输入网址,到用户最终看到结果,需要有很多的参与方共同努力。这些参与方中任何一个环节的性能都会影响到用户体验。

宽带网速

DNS服务器的响应速度

服务器的处理能力

数据库性能

路由转发

浏览器处理能力

早在2006年,雅虎就发布了提升站点性能的指南,Google也发布了类似的指南。而且有很多工具可以和浏览器一起工作,对你的Web页面的加载速度进行评估:分析页面中资源的数量,传输是否采用了压缩,JS、CSS是否进行了精简,有没有合理的使用缓存等等。

如果你需要将这个过程与CI集成在一起,来对应用的性能进行监控,我去年写过一篇相关的博客。

本文打算从另一个角度来尝试加速页面的渲染:浏览器是如何工作的,要将一个页面渲染成用户可以看到的图形,浏览器都需要做什么,哪些过程比较耗时,以及如何避免这些过程(或者至少以更高效的方式)。

页面是如何被渲染的

说到性能优化,规则一就是:

If you can’t measure it, you can’t improve it. – Peter Drucker

根据浏览器的工作原理,我们可以分别对各个阶段进行度量。

像素渲染流水线

HTML文档

解析HTML文档,生成DOM

文档中引用的CSS、JS

解析CSS样式表,生成CSSOM

将JS代码交给JS引擎执行

合并DOM和CSSOM,生成Render Tree

根据Render Tree进行布局layout(为每个元素计算尺寸和位置信息)

绘制(Paint)每个层中的元素(绘制每个瓦片,瓦片这个词与GIS中的瓦片含义相同)

执行图层合并(Composite Layers)

使用Chrome的DevTools – Timing,可以很容易的获取一个页面的渲染情况

应该注意的是,浏览器可能会将Render Tree分成好几个层来分别绘制,最后再合并起来形成最终的结果,这个过程一般发生在GPU中。

Devtools中有一个选项:Rendering - Layers Borders,打开这个选项之后,你可以看到每个层,每个瓦片的边界。浏览器可能会启动多个线程来绘制不同的层/瓦片。

常规策略

为了尽快的让用户看到页面内容,我们需要快速的完成DOM+CSSOM - Layout - Paint - Composite Layers的整个过程。一切会阻塞DOM生成,阻塞CSSOM生成的动作都应该尽可能消除,或者延迟。

分割CSS

对于不同的浏览终端,同一终端的不同模式,我们可能会提供不同的规则集

高效的CSS规则

CSS规则的优先级

很多使用SASS/LESS的开发人员,太过分的喜爱嵌套规则的特性,这可能会导致复杂的、无必要深层次的规则

使用GPU加速

很多动画都会定时执行,每次执行都可能会导致浏览器的重新布局

异步JavaScript

我们知道,JavaScript的执行会阻塞DOM的构建过程,这是因为JavaScript中可能会有DOM操作

首次渲染之后

在首次渲染之后,页面上的元素还可能被不断的重新布局,重新绘制。如果处理不当,这些动作可能会产生性能问题,产生不好的用户体验。

访问元素的某些属性

通过JavaScript修改元素的CSS属性

在onScroll中做耗时任务

图片的预处理(事先裁剪图片,而不是依赖浏览器在布局时的缩放)

在其他Event Handler中做耗时任务

过多的动画

过多的数据处理(可以考虑放入WebWorker内执行)

强制同步布局/回流

元素的一些属性和方法,当在被访问或者被调用的时候,会触发浏览器的布局动作(以及后续的Paint动作),而布局基本上都会波及页面上的所有元素。当页面元素比较多的时候,布局和绘制都会花费比较大。

关注公众号“蓝鸥西安”了解更多专业技术资讯。蓝鸥线上学习平台鸥课学院,是蓝鸥旗下的在线教育平台。鸥课学院专注整合优势教学资源、打造适合在线学习并能保证教学结果的优质教学产品,为用户提供满足自身成长和发展要求的有效服务。

联系我时请说明来自志趣网,谢谢!

免责申明:志趣网所展示的信息由用户自行提供,其真实性、合法性、准确性由信息发布人负责。使用本网站的所有用户须接受并遵守法律法规。志趣网不提供任何保证,并不承担任何法律责任。 志趣网建议您交易小心谨慎。