前言:网站打开的快慢,在一定程度上影响著用户的流失率。据不完全统计网站打开时间超过3s,就有将近40%的用户会选择关闭。
因此,加载速度也成为了,搜索引擎排序中的一项因素。让我们一起看看有哪些优化点是我们值得关注的!为了更加直观的看到效果,我们来看一个案例:
PS:这里load是指资源完全加载时间,不是指跟用户首屏交互时间
那么有什么方法可以优化呢,让网站更快打开呢?
其实想要优化网站的打开速度,就应该从网站慢的原因入手。那就基本得了解从输入url到用户看到网页这个过程都发生了什么?
大概流程如下:
1、用户输入url
2、浏览器对域名进行dns解析,获取到服务器ip地址。
3、客户端(浏览器)与服务器建立tcp连接,三次握手
4、握手成功后,发送请求,服务器处理相关逻辑,并把对应的数据返回给客户端(浏览器)
5、浏览器接受到数据,开始解析数据(HTML)
6、DOM树构建、CSS解析 Style Rules(CSS树)
在这过程中,从上往下一直解析。如果碰到css样式(link、style)和 js脚本,会解析对应的样式或者脚本。此时会阻塞DOM元素构建
7、DOM树与CSS树生成呈现树,然后绘制页面,呈现给用户。(当然这里还有许多细节,暂时省略... 有兴趣朋友可自行了解)
可能有人还是会问:就算我看懂了这个流程,可是我还是不知道怎么优化啊?到底要怎么操作呢?
别著急,在段亮认为,网站优化可以分为以下几部分:
1、打开谷歌的debug调试工具 (F12)会弹出一个类似这样的窗口:
然后找到waterfall选项,有个进度条的东西。然后鼠标放上去,你就会看到如下图,例如:
由于上图有些参数,可能大家不知道,我来给大家讲解下:
1、DNS Lookup DNS查询时间 [深绿色]
2、Initial connection TCP连接消耗时间 [橙色]
3、SSL SSL/TLS完成握手时间 [紫色]
4、TTFB 是网络请求被发起到服务器返回第一个字节所花费的时间 [绿色]
5、Content Download 文档下载时间 [蓝色]
那麽知道上述几个参数有什麽含义呢? 比如:
如果你发现网站资源加载非常多,拖慢了网站加载时间,怎麽解决呢?
1、可以合并资源,减少http请求。 比如:js、css合并,小图片合成雪碧图...
2、分域名加载资源,突破浏览器限制(因为在同源资源加载的情况下,浏览器最多允许同时6个请求加载)或者利用HTTP2.0多路复用
3、减少DNS lookup时间,提前解析DNS 比如:
html head中添加link标签: <link rel="dns-prefetch" href="http://duanliang920.com"/>
DOM构建完成加载 <script src="//cdn.duanliang920.com" async></script>
資源加載完成加載 <script src="//cdn.duanliang920.com" defer></script>
具体细节优化,有待更新
1、开启服务端缓存,减少服务器压力。
2、开启gzip压缩,减少资源大小,传输更快。
3、数据做好缓存和优化,减少服务端IO操作