- N +

页面渲染优化,页面渲染优化怎么设置

页面渲染优化,页面渲染优化怎么设置原标题:页面渲染优化,页面渲染优化怎么设置

导读:

Intro...

HTML页面渲染及优化详解

页面渲染主要经过过程,具体介绍如下:

字节→字符→令牌→节点→对象模型

CSS树的生成和DOM树的生成基本是相同,如下

为什么会有CSS树

因为CSS关系也会有父子关系,就是css中常说的继承,一些样式如font-size等子元素会继承父级,所以会生成一套对应的CSS树和DOM树相对应。

通过上面的页面渲染介绍,很容易理解,重排就是重新布局页面结构,计算节点位置,而重绘就是绘制页面,只是一些样式如背景,颜色的变化等,不需要重新计算位置布局,所以重排一定会导致重绘,但是重绘不一定导致重排。

导致页面重排主要有以下几点

上文中触发了四次重排,通过上文介绍,offsetTop,scrollTop,clientTop等属性的修改会触发重排,当浏览器获取DOM样式的时候立刻会执行一次重排,因为需要计算浏览器位置坐标,不会再继续观察下文是否还有DOM的操作,下文介绍浏览器渲染机制。

这种情况看似会触发四次重排,实际只会触发一次重排,现代浏览器基本都有渲染机制,浏览器会批量将样式修改一次性执行,批量修改完后再批量获取DOM位置,实际只触发一次。

等价于

通过上文,容易理解这种情况会触发两次重排,可以使用缓存(实际是分离读写)来优化。

这种情况会触发五次重排

避免设置大量的style属性,因为通过设置style属性改变结点样式的话,每一次设置都会触发一次reflow,所以最好是使用class属性实现元素的动画,设置position属性,最好是设为absoulte或fixed,脱离文档流,这样不会影响其他元素的布局。

事件委托原理:利用事件冒泡的特性,子元素都会冒泡到父元素上,当子元素如(li)元素都绑定事件时,可以只需绑定父元素(ul)来达到相同的效果,这样不仅减少了对dom的操作,减少重排或重绘,而且不用分配大量变量来保存dom,减少了内存。

委托

不要使用table布局,因为table中某个元素一旦触发了reflow,那么整个table的元素都会触发reflow。那么在不得已使用table的场合,可以设置table-layout:auto;或者是table-layout:fixed这样可以让table一行一行的渲染,这种做法也是为了限制reflow的影响范围。

不要一个个修改属性,应通过一个class来修改

改为

参考文献

网页浏览器字体渲染优化

优化网页浏览器的字体渲染,不仅涉及浏览器设置,还包括将Mac平台的字体移植到Windows平台的解决方案。本教程以系统自带的Edge浏览器为例进行说明,虽然其他浏览器可能在内置字体渲染方式上有所不同,但本文提供的方法并未经过全面测试,因此在实施时请根据实际情况斟酌选用。

首先,打开Edge浏览器,输入“edge://flags/”进入浏览器的“实验项目”。在此找到“Enhance text contrast”项目,选择“Enabled”以开启“ClearType”功能(若系统全局采用灰度渲染,可忽略此步骤)。

接下来,转至浏览器的外观设置,自定义字体设置可以通过参考以下图示来进行。在非强制使用自定义字体的情况下,浏览器会按照网页前端代码的字体优先级调用字体,这就是浏览器自定义字体失效的原因。

例如,假设网页前端代码中PingFang SC字体的优先顺序在Microsoft YaHei之前,即使在系统中安装了苹方字体,但若浏览器中自定义的字体是Microsoft YaHei,浏览器也会优先调用PingFang SC。因此,简体中文网络中常用的字体,如Helvetica Neue、苹方、微软雅黑、冬青黑体、思源黑体等,除了思源黑体外,其余字体商用需谨慎。

Helvetica Neue、苹方、冬青黑体等都是Apple产品自带的字体,若要在Windows平台上使用,需要从最新版的macOS或iOS系统中提取。提取的字体不能直接在Windows平台上使用,主要原因在于cmap表中缺少适用于Windows平台的子表。为使Windows平台能正确识别字体,需要修改cmap、name、head、OS/2等字表,以实现完美适配。

具体而言,对于cmap表的修改,可以参考《Windows系统字体渲染优化-知乎(zhihu.com)》中的方法,输入特定命令提取字体的cmap和name表。在示例代码中,解释了Mac平台提取出来的字体代码不能被Windows平台识别的原因。要使字体在Windows平台正确显示,需要增加适用于Windows平台的两个子表,并修正Unicode平台的编码ID。解释了为什么需要增加两个Windows平台的子表而非一个,以及如何区分和提取format_4和format_12子表中的字符码。

对于name表的修改,注意nameID1、nameID2、nameID4、nameID16、nameID17等参数的重要性,以及不同平台下name表的差异。例如,Mac平台的name表通常包含整个家族字体,而Windows平台的nameID1只包含常规、粗体、斜体、粗斜体这四个子系列,其余需要扩展到nameID16与nameID17以确保Office等应用程序正确显示家族字体。

关于head和OS/2表的修改,提供了具体的命令和详细参数描述,指导如何按照从右到左的顺序调整数值,以适应不同的需求和情况。文末附上了已修改好的字体链接,供需要的用户下载使用。

返回列表
上一篇:
下一篇: