教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

天富娱乐登录老虎机 英亚app下载官网网址性能优化的技巧(一)

更新时间:2018年09月13日16时19分 来源:英亚app下载官网网址 浏览次数:

下面我们开始介绍实践型的4个优化技巧,先从首屏关键英亚app下载官网网址开始。

1. 内联首屏关键英亚app下载官网网址(Critical 英亚app下载官网网址)

性能优化中有一个重要的指标——首次有效绘制(First Meaningful Paint,简称FMP)即指页面的首要内容(primary content)出现在屏幕上的时间。这一指标影响用户看到页面前所需等待的时间,而**内联首屏关键英亚app下载官网网址(即Critical 英亚app下载官网网址,可以称之为首屏关键英亚app下载官网网址)**能减少这一时间。

大家应该都习惯于通过link标签引用外部英亚app下载官网网址文件。但需要知道的是,将英亚app下载官网网址直接内联到HTML文档中能使英亚app下载官网网址更快速地下载。而使用外部英亚app下载官网网址文件时,需要在HTML文档下载完成后才知道所要引用的英亚app下载官网网址文件,然后才下载它们。所以说,内联英亚app下载官网网址能够使浏览器开始页面渲染的时间提前,因为在HTML下载完成之后就能渲染了。

既然内联英亚app下载官网网址能够使页面渲染的开始时间提前,那么是否可以内联所有的英亚app下载官网网址呢?答案显然是否定的,这种方式并不适用于内联较大的英亚app下载官网网址文件。因为初始拥塞窗口3存在限制(TCP相关概念,通常是 14.6kB,压缩后大小),如果内联英亚app下载官网网址后的文件超出了这一限制,系统就需要在服务器和浏览器之间进行更多次的往返,这样并不能提前页面渲染时间。因此,我们应当只将渲染首屏内容所需的关键英亚app下载官网网址内联到HTML中。

既然已经知道内联首屏关键英亚app下载官网网址能够优化性能了,那下一步就是如何确定首屏关键英亚app下载官网网址了。显然,我们不需要手动确定哪些内容是首屏关键英亚app下载官网网址。Github上有一个项目Critical 英亚app下载官网网址4,可以将属于首屏的关键样式提取出来,大家可以看一下该项目,结合自己的构建工具进行使用。当然为了保证正确,大家最好再亲自确认下提取出的内容是否有缺失。

不过内联英亚app下载官网网址有一个缺点,内联之后的英亚app下载官网网址不会进行缓存,每次都会重新下载。不过如上所说,如果我们将内联后的文件大小控制在了14.6kb以内,这似乎并不是什么大问题。

如上,我们已经介绍了为什么要内联关键英亚app下载官网网址以及如何内联,那么剩下的英亚app下载官网网址我们怎么处理好呢?建议使用外部英亚app下载官网网址引入剩余英亚app下载官网网址,这样能够启用缓存,除此之外还可以异步加载它们。

2. 异步加载英亚app下载官网网址英亚app下载官网网址会阻塞渲染,在英亚app下载官网网址文件请求、下载、解析完成之前,浏览器将不会渲染任何已处理的内容。有时,这种阻塞是必须的,因为我们并不希望在所需的英亚app下载官网网址加载之前,浏览器就开始渲染页面。那么将首屏关键英亚app下载官网网址内联后,剩余的英亚app下载官网网址内容的阻塞渲染就不是必需的了,可以使用外部英亚app下载官网网址,并且异步加载。

那么如何实现英亚app下载官网网址的异步加载呢?有以下四种方式可以实现浏览器异步加载英亚app下载官网网址。

第一种方式是使用JavaScript动态创建样式表link元素,并插入到DOM中。

第二种方式是将link元素的media属性设置为用户浏览器不匹配的媒体类型(或媒体查询),如media="print",甚至可以是完全不存在的类型media="noexist"。对浏览器来说,如果样式表不适用于当前媒体类型,其优先级会被放低,会在不阻塞页面渲染的情况下再进行下载。

当然,这么做只是为了实现英亚app下载官网网址的异步加载,别忘了在文件加载完成之后,将media的值设为screen或all,从而让浏览器开始解析英亚app下载官网网址。

复制代码与第二种方式相似,我们还可以通过rel属性将link元素标记为alternate可选样式表,也能实现浏览器异步加载。同样别忘了加载完成之后,将rel改回去。

复制代码上述的三种方法都较为古老。现在,rel="preload"5这一Web标准指出了如何异步加载资源,包括英亚app下载官网网址类资源。

复制代码注意,as是必须的。忽略as属性,或者错误的as属性会使preload等同于XHR请求,浏览器不知道加载的是什么内容,因此此类资源加载优先级会非常低。as的可选值可以参考上述标准文档。

看起来,rel="preload"的用法和上面两种没什么区别,都是通过更改某些属性,使得浏览器异步加载英亚app下载官网网址文件但不解析,直到加载完成并将修改还原,然后开始解析。

但是它们之间其实有一个很重要的不同点,那就是使用preload,比使用不匹配的media方法能够更早地开始加载英亚app下载官网网址。所以尽管这一标准的支持度还不完善,仍建议优先使用该方法。

该标准现在已经是候选标准,相信浏览器会逐渐支持该标准。在各浏览器的支持度如下图所示。


从上图可以看出这一方法在现在的浏览器中支持度不算乐观,不过我们可以通过load英亚app下载官网网址进行polyfill,所以支持不支持,这都不是事儿。

3. 文件压缩性能优化时有一个最容易想到,也最常使用的方法,那就是文件压缩,这一方案往往效果显著。

文件的大小会直接影响浏览器的加载速度,这一点在网络较差时表现地尤为明显。相信大家都早已习惯对英亚app下载官网网址进行压缩,现在的构建工具,如webpack、gulp/grunt、rollup等也都支持英亚app下载官网网址压缩功能。压缩后的文件能够明显减小,可以大大降低了浏览器的加载时间。

4. 去除无用英亚app下载官网网址虽然文件压缩能够降低文件大小。但英亚app下载官网网址文件压缩通常只会去除无用的空格,这样就限制了英亚app下载官网网址文件的压缩比例。那是否还有其他手段来精简英亚app下载官网网址呢?答案显然是肯定的,如果压缩后的文件仍然超出了预期的大小,我们可以试着找到并删除代码中无用的英亚app下载官网网址。

一般情况下,会存在这两种无用的英亚app下载官网网址代码:一种是不同元素或者其他情况下的重复代码,一种是整个页面内没有生效的英亚app下载官网网址代码。对于前者,在编写的代码时候,我们应该尽可能地提取公共类,减少重复。对于后者,在不同开发者进行代码维护的过程中,总会产生不再使用的英亚app下载官网网址的代码,当然一个人编写时也有可能出现这一问题。而这些无用的英亚app下载官网网址代码不仅会增加浏览器的下载量,还会增加浏览器的解析时间,这对性能来说是很大的消耗。所以我们需要找到并去除这些无用代码。

当然,如果手动删除这些无用英亚app下载官网网址是很低效的。我们可以借助Uncss库来进行。Uncss可以用来移除样式表中的无用英亚app下载官网网址,并且支持多文件和JavaScript注入的英亚app下载官网网址。



作者:英亚app下载官网网址前端与移动开发培训学院

首发:http://web.tianfu2024.sbs

0 分享到:
和我们在线交谈!