好的APP开发公司详解如何解决加载时CSS优化?深圳APP开发公司提醒我们CSS代码优化的目的并不仅仅是减少CSS文件的大小,还能让CSS代码更有条理、更高效。编写好的CSS代码,有助于提升页面的渲染速度。实际上,浏览器渲染引擎需要解析的CSS规则越少,性能越好。APP开发公司本文主要从以下几方面介绍CSS优化:
了解页面的渲染过程。
避免在HTML标签中写Style属性。
正确使用display的属性。
避免使用CSS表达式。
请勿滥用float属性。
不滥用Web字体。
不声明过多的Font-size。
优化选择器的使用。
开发APP前了解页面的渲染过程
渲染也就是将页面内容显示到浏览器屏幕上。浏览器的渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具。目前,Chrome、Safari、Opera浏览器中使用WebKit引擎,而Firefox浏览器中使用Gecko引擎,IE浏览器中使用Trident引擎。2013年4月3日,Google宣布在Chrome浏览器中使用新型开源渲染引擎Blink。Opera的BruceLawson也在官方博客中表示计划改用Blink引擎。Mozilla也在Github中公布与韩国三星共同开发的Android系统与ARM系统用渲染引擎Servo。虽然各渲染引擎之间肯定存在着区别,但是当用户在地址栏中输入URL地址、开始加载页面时,各渲染引擎都开始实现如图9.25所示的渲染处理。
首先,渲染引擎会解析HTML文档,并将标签转换成内容树中的DOM节点,构建DOM树。同时,它会解析页面中的style元素和外部CSS文件中的样式数据,根据所构建的DOM树和解析的样式数据共同创建渲染树。当渲染树被构建完成后,开始布局处理过程。
布局的过程就是根据渲染树种的位置信息确定每个节点在屏幕中的显示位置。当窗口尺寸被修改(resize)、发生滚动操作,或position、display、width、height等与元素位置相关的样式属性值被更新时触发布局过程。在布局过程中由于要计算所有元素的位置信息,更加会降低页面加载性能。在WebKit引擎中把布局过程称为Layout过程,在Gecko引擎中把绘制过程称为Reflow过程。浏览器将在页面信息发生改变时把对页面性能的影响度降为最低。
布局这一过程是一个逐步完成的过程,为了获得更好的用户体验,渲染引擎会尝试尽快把内容显示出来,而不会等到所有HTML文档都被解析完成后才创建并布局渲染树。最后开始绘制的过程,即将渲染树中的可视化信息在屏幕中绘制显示出来。当color、background-color、visibility、outline等与视觉相关的样式属性值被更新时触发绘制过程。在绘制过程中由于要重计算元素的视觉信息,因此会降低页面加载性能。
在WebKit引擎中把绘制过程称为Painting过程,在Gecko引擎中把绘制过程称为Repaint过程。HTML元素是首先被解析到DOM树和渲染树中的,通过减少HTML元素的数量,可以让浏览器更快地显示完节点。因此,尽可能低地减少HTML中元素的数量,使用最少量必需的HTML对布局进行语义化。浏览器会在所有HTML文档被解析完毕之前先开始执行布局处理与绘制处理,在读入新的页面信息时,再次构建渲染树并开始渲染处理与绘制处理。
因此,在加载过程中,在页面还未加载完毕就已经开始实现布局处理、渲染处理,即一系列样式信息的更新,由JavaScript脚本代码所触发的动态处理以及由用户操作所触发的处理等。这些处理都对页面加载速度产生较大影响。
例如,通过设置元素的visibility样式属性值为hidden来隐藏元素时将触发绘制过程,但是通过把元素的display样式属性值设置为none来隐藏元素时,将同时触发布局过程与绘制过程。也就是说由于display样式属性值与元素位置信息相关,所以对页面性能产生较大影响。使得布局过程或绘制过程消耗较多资源成本的样式属性有:
@font-f
aceanimation
transition
box-shadow
border-radius
gradient
opacity
background-size
text-align
引起布局过程与绘制过程的原因有:
元素的追加、修改与删除。
使用动画。
修改样式。
修改元素的class属性值。
hover伪类选择器所触发的元素状态改变。
由用户在input元素中的输入而引起的文字节点改变。
使用offsetWidth、offsetHeight或getComputedStyle取得样式属性值。
文字字体的改变。
窗口尺寸的改变(resize)。
元素透明度的改变。
页面或元素内的滚动。
根据渲染引擎的不同,页面信息发生改变时所触发的过程也会有所区别。在部分WebKit引擎中不触发布局过程,只触发绘制过程。在部分渲染引擎中更容易触发布局过程,页面上发生任何信息改变都会对页面性能产生较大影响。页面加载时需要耗费一些时间,在这个过程中所触发的动画操作或页面缩放操作都会引起布局过程或绘制过程,从而影响页面加载性能。在移动端中,用户对页面上的操作更加频繁,所以减少布局过程或绘制过程的触发次数尤为重要。由于窗口尺寸的改变,页面滚动或缩放都会引起布局过程或绘制过程,因此虽然不可能完全避免这些操作,但是可以通过减少布局过程或绘制过程的触发次数来降低其对页面性能产生的影响,从而提高页面性能。好了,APP开发公司本文关于“好的APP开发公司详解如何解决加载时CSS优化?”的相关知识我们就分享到这里,谢谢关注。博纳网络编辑整理。