时间:2021-07-01 10:21:17 帮助过:9人阅读
它并不是一门新技术,有人认为只有 Chrome 才具备这个功能。也有人认为它是有史以来提升浏览器性能最有效的方法。如果你第一次接触预加载器,也许心中已经有了无数个问号。什么是预加载器?它是如何提升浏览器性能的?
一个网页的加载依赖于脚本文件、CSS样式文件。让我们看看浏览器加载网页的过程。
即使浏览器可以并行执行多个请求,但是无法与针对脚本文件的操作并行执行。
可以通过IE7打开链接中的网页进行测试。我们可以看到,网页head标签内包含2个样式文件和2个脚本文件。在body中,包含3个图片、1个脚本文件。
通过瀑布流我们可以查看资源加载的过程:
脚本文件的下载和执行,会阻断其他资源文件的下载,无疑将大大降低浏览器性能。
2008 年,IE、WebKit和Mozilla都实现了预加载器功能,来提升网络的利用率,改善脚本文件对其他资源文件的阻塞现状。
当浏览器被脚本文件阻塞时,另一个轻量级的解析器会继续浏览剩余的标记,寻找需要下载的资源i.e. 样式文件, 脚本文件,图片 等。
一旦发现,预加载器既可以在后台开始接收这些资源,等待主解析器完成当前的脚本操作,其他资源已经完成下载,这样就减轻了脚本阻塞带来的性能损耗。
下面这个瀑布流是使用IE8打开链接中网页的结果,性能有显著的提升:IE8=7S > IE7=14S。
预加载功能仍然是各大浏览器厂商乐此不疲的实验领域。很多浏览器尝试设置资源下载的优先级。例如,Safari降低了不作用于当前视图区域样式文件的优先级。Chrome 则设置脚本文件的优先级高于图片,即使脚本文件位于HTML底部。
预加载器只能检索 HTML 标签中的URL,无法检测到使用脚本代码添加的URL,直至脚本代码执行时才可以获取这类资源。
我曾经遇到过一个通过 JavaScript 判断当前Window宽度,进而决策加载CSS样式文件的例子。预加载器无法识别此类资源。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16