降低网页加载时间的方案太多了,在网上一查多的看不过来,所以我结合自身用到的以及网上的方案,来归纳一下吧,主要是一些前端能做的事情,以后get到新的方案,再不断添加吧。(╯▽╰)
其实网页加载就是请求HTML,再顺带将它依赖的资源文件(比如:JS/CSS/iconfont)一并请求过来。从概念出发,我们就可以得出降低网页加载时间,最本质的方式就是:减少请求数量 与 减小请求大小。
一、减少请求数量
- 优化图像
1、将小图标合并成sprite图
我们可以把多张背景图片和小图标合并雪碧图,方便在任何位置使用,这样不同位置的请求只需要调用一个图片,从而减少对服务器的请求次数。
2、使用iconfont字体图标
sprite图不适合无线端的响应式场景,所以越来越作为一个备用方案,而很多时候可以用iconfont字体来代替一些小图标。它就是用字体编码的形式来实现图标效果,既然是文字,那就可以随意设置颜色设置大小,相对来说比sprite方案更好,但是它只适用于纯色图标。
3、base64:URL背景图片
使用base64图可以减少HTTP请求,还可以避免跨域的问题。不了解的可以直接点击:详情传送门
4、图片延迟加载
图片延迟加载也称懒加载,常用于页面很长,图片很多的页面,整个页面少说几百K,多则上兆,如果想一次性加载完成,不仅用户要哭了,服务器也得哭了。为了避免这种请况发生,目前主流的做法是页面初次加载时,只显示当前可视区域的图片,当用户滚动页面的时候,当图片进入可视区域时再加载,这样可以明显的提高页面加载速度,而更少的图片并发请求数,也可以大大的减轻服务器的压力。
5、标明图片高度和宽度
如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。 - Ajax调用尽量采用GET方法
实际使用XMLHttpRequest时,如果使用POST方法实现,会发生2次HTTP请求,而使用GET方法只会发生1次HTTP请求。如果改用GET方法,HTTP请求减少50%。 - 避免使用@import
css @import语法允许你加载其它的CSS文件。有时非常有帮助,但是它并不是和主文件一起下载的,只有在引用它的那个css文件被下载、解析之后,浏览器才会知道还有另外一个css需要下载,这时才去下载,然后下载后开始解析、构建render tree等一系列操作,因此css @import引起的css解析延迟会加长页面留白期。 所以,要尽量避免使用css @import而采用link标签的方式引入。
二、减小请求大小
- JS/CSS/HTML压缩
很多公司都采用了这个手段,就不介绍太多,主要的方式有:
1、通过构建工具实现,比如webpack/gulp/fis/grunt等。
2、后台预编译。
3、利用第三方online平台,手动上传压缩。 - 图片压缩
同上可以手动处理图片或者借助第三方平台,手动处理的话推荐一个网站 tinypng,或者用第三方平台,比如七牛云平台。
三、其他方案
- 利用浏览器缓存
浏览器缓存是允许访客的浏览器缓存你网站页面副本的一个功能。这有助于访客再次访问时,直接从缓存中读取内容而不必重新加载。这节省了向服务器发送HTTP请求的时间。 - 网址后加斜杠
当用户打开一个链接时,服务器会推测链接这个地址包含哪种文件或页面。如果在连接后加上斜线( / ),服务器就知道这是一个目录页,这样做可以减少页面的加载时间。如www.baidu.com/目录,会判断这个“目录是什么文件类型,或者是目录。 - 添加文件过期或缓存头
同一用户频繁访问的图片、Js脚本文件等可以在Apache或Nginx设置其缓冲 时间,例如设置24小时过期时间,这样用户在访问过该页面之后再次访问时,同一组图片或JS不会再重复下载,从而减少了HTTP请求,用户访问速度明显有 所提升,同时服务器负载也会下降。 - 减少DNS查询
减少DNS查询是一个WEB开发人员可以用了页面加载时间快速有效的方法。DNS查询需要话费很长的时间来返回一个主机名的IP地址。而浏览器在查询结束前不会进行任何操作。对于不同的元素可以使用不同的主机名,如URL、图像、脚本文件、样式文件、FLASH元素等。具有多种网络元素的页面经常需要进行多个DNS查询,因而花费的时间更长。减少不同域名的数量将减少并行下载的数量,加速你的网站。 - 最小化重定向
重定向增加了额外的HTTP请求,因此也增加了页面加载时间。然而有时重定向却是不可避免的,如链接网站的不同部分、保存多个域名、或者从不存在的页面跳转到新页面。重定向增加了延迟时间,因此要尽量避免使用它。检查是否有损坏的链接,并立即修复。 - CSS和JS的文件位置
把CSS文件在页面底部引入可以禁止逐步渲染,节省浏览器加载和重绘页面元素的资源。把JS文件放在页面底部可以避免代码执行前的等待时间,从而提升页面加载速度。但是在某些情况下,需要JS在页面的顶部加载(如某些第三方跟踪脚本)。 - 延迟加载ga统计
ga统计代码不阻塞页面渲染,不阻塞后续请求,但会阻塞window.onload事件,页面的表现方式是进度条一直加载。所以我们延迟执行ga初始化代码,将其放到window.onload函数中去执行,可以防止ga脚本阻塞window.onload事件。