微信号:weixin888
阅读理由:经验之谈,从理论到实践。
网站优化是前端开发的重中之重,但是优化细节却十分繁杂,没有好的思路,优化很难高效的开展。
本文将以实际网站来做参考,手把手教你如何一步步做好网站优化。
这不是一篇 基础网站优化 文章,继续下文前,请确定已经做了如下基本优化:
我们可以从两个角度来看这个问题:
网站优化能够让页面加载得更快,响应更加及时,极大提升用户体验。
优化会减少页面资源请求数,减小请求资源所占带宽大小,从而节省可观的带宽资源。
网站优化的目标是:减少网站加载时间,提高响应速度。
那么网站加载速度和用户体验又有着怎样的关系呢?我们来看下面这张图:
Google 和亚马逊的研究表明,Google 页面加载的时间从 秒提升到 秒导致丢失了 流量和广告收入,对于亚马逊,页面加载时间每增加 就意味着 的销售额损失。
可见,页面的加载速度对于用户有着至关重要的影响。
一个好的交互效果可能是这样的:
需要注意:生产环境不要开启 SOURCEMAP
全称 :是指网络请求被发起到从服务器接收到第一个字节的这段时间,它包含了 连接时间、发送 请求时间和获得响应消息第一个字节的时间。
Content Download:即下载内容所需要的时间。
页面一接口情况:
页面二接口情况:
用户下载内容所需要的时间,受限于服务器的资源、资源的大小以及用户的网络速度。因此,我们暂时不讨论这方面的内容。
通过 打包,分析一下大文件构成。
我们可以通过 来对网站整体性能 做一下评估,按照建议去做一些高效优化。
加载时间概况:
影响网站加载因素:
缓存策略问题:
DOM 节点:
关键路径:
主线程情况:
建议使用 ,简单使用如下:
从上图分析得出,大文件主要包含:、、、 等文件。所以我们从这几个文件入手,逐个优化:
- 在给单页应用做按需加载优化时,一般采用以下原则:
- 分离减少
动态导入以及文件拆分
按照上面我们一步步处理后,重新打包分析一下文件构成:
这里为什么没有继续拆分 ,是因为目前阶段没有好的方案,需要对代码做很多调整,所以暂且保留。相关信息可以在 Svg icons make bunlde size too large 中查看解决方案。
预加载
异步加载第三方资源
没有 属性, 将立即获取(下载)并执行,期间阻塞了浏览器的后续处理。
如果有 属性,那么 将被异步下载并执行,同时浏览器继续后续的处理。
利用 这项 功能,确保文本在网页字体加载期间始终对用户可见。
延长缓存期限可加快重访网页的速度。
简单的说:它表示一条域名解析记录在 服务器上的缓存时间。
这个记录在 服务器上保留的时间,就是 值。
所以一般更新域名解析的步骤如下:
如下图, 值设置的最佳实践,可供参考:
后文我们会详细介绍 相关内容,欢迎各位童鞋关注。
显示了以高优先级加载的资源。
我们可以通过:缩短链长、缩减资源的下载文件大小,或者推迟下载不必要的资源,从而提高网页加载速度。
当 解析过程中遇到一个 标记时,它会暂停 构建,将控制权移交给 引擎,等 引擎运行完毕,浏览器再从中断的地方恢复 构建。
也就是说,执行内联的 JavaScript 会阻塞页面的首次渲染。
在关键渲染路径中,我们通常要关注三个点:
我们的策略也非常简单,就是减少关键资源数量,降低资源大小,减少关键路径的往返次数。
优化关键渲染路径的常规步骤如下:
更多详情,请参考前端性能优化—关键渲染路径。
考虑减少为解析、编译和执行 而花费的时间。我们可以提供较小的 负载来实现此目标。
如果你对浏览器缓存还不太清楚,欢迎移步聊一聊浏览器缓存机制。
能非常有效地直接处理静态内容。在静态文件和 在同一主机的情况下,这种特性尤为有用。
优化前:网站评分 27 ,首次内容绘制 6.9 秒
网站评分:
加载概况:
优化后:网站评分 70 ,首次内容绘制 1.6 秒
网站评分:
加载概况:
当然,优化还可以做更多,我们尽量让网站的评分接近 100 分,譬如:
网站评分:
加载概况:
我们从头优化下来,做了不少代码改动,也达到了不错的效果。但是有几点还是需要注意:
骨架图解决 加载页面过长的白屏过程。
服务端接口也需要同步优化,而不要仅仅依赖前端单方面优化。
网站优化从来不是一蹴而就,需要不断的去优化细节,不断的摸索尝试。从我的角度来看,其实优化更像是在网站性能和加载速度之间找到一个平衡点。譬如,文中我们为了优化文件打包大小,进行了大文件拆分。随之而来的问题就是拆分后的文件可能还会对某些文件有依赖,那么就影响到了关键渲染路径。
所以,优化不存在什么奇技淫巧,不断的去尝试,找到这个最佳优化点,这才是根本。
转载自: Jartto's blog
作者:jartto