Vi 2019-06-25
通过HTML5 Performanc相关的API,我们可以对页面进行性能分析。
下面会就几个比较重要的过程进行分析,给出耗时计算方法,并针对性的给出一些优化建议。
// 下文中的timing均表示performance.timing let timing = window.performance.timing;
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
简单来说就是将一个域名映射到其对应的服务器IP地址,后续的请求均发送到该服务器。
DNS查询的基本过程如下:
举个栗子m.taobao.com:
耗时计算:
let dns = timing.domainLookupEnd - timing.domainLookupStart;
明白工作原理后我们就可以针对域名解析这块做出一些优化,下面是一些优化建议:
耗时计算:
let tcp = timing.connectEnd - timing.connectStart;
优化点如下:
从发送请求到开始响应的过程。
耗时计算:
let req = timing.responseStart - timing.requestStart;
优化点如下:
从响应开始到数据传输完成的过程。
耗时计算:
let res = timing.responseEnd - timing.responseStart;
优化点如下:
耗时计算:
let dom = timing.domInteractive - timing.domLoading;
优化点如下:
下载并执行拥有defer属性的脚本。
耗时计算:
let dom = timing.domInteractive - timing.domLoading;
这一块的优化点主要集中在js代码层次的优化。然鹅,js的优化值得写本书来好好念叨念叨,so,这里就不展开了,主要给几个点吧:
DOM和CSSOM解析完成,并组合成为渲染树之后开始加载并执行defer
的脚本。
defer
的脚本执行完成就触发了DOMContentLoad
事件,同时进行的还有图片,css等,这些资源文件加载完成后才是domComplete
。
domComplete
之后就立刻触发load事件。
耗时计算
let domComplete = timing.domComplete - timing.domContentLoadedEventEnd;
这一块的优化主要集中在资源层次的优化,这也是一个比较大的项目,一样,挑几个点说一下:
此外,DOMContentLoaded事件耗时
和DOMLoad事件耗时
,主要就是执行js代码,优化建议参考网页加载完成
。
以上~