(1) 用户在地址栏中打开一个URL,浏览器首先会探求该URL所在做事器,通过DNS做事器查询浏览器会获
得该URL所在网站的IP地址,然后向该地址发起要求,连接到做事器;
(2) 建立连接后,向做事器发送http要求,要求对应的HTML文档;
(3) 解析HTML文档,目的是知道该页面须要哪些资源以及天生DOM树;天生DOM树和获取到相应须要的
资源文件同时进行;解析HTML文档时,一旦创造一个标签,就会根据标签的哀求分配对指定的资源进行下载,当DOM树天生后,DOMContentLoaded事宜被触发;
理论上浏览器并行下载页面所须要的资源会带来更好的性能体验!
(4) Onload事宜,当解析完成后,天生了DOM树,所有页面须要的资源文件都已经成功下载和实行后,
浏览器会发出Onload事宜并回调HTML文档中的onload函数。
2、对付优化页面速率的必要性:
页面的打开速率对付网站的优化有极大的意义,如果打开一个页面永劫光处于白屏状态,如果超过5s,暴脾气
的我是会直接关闭这个网页;或者是页面加载出来了,但是比较慢,页面显示不完全,标签一贯在转圈,页面处于不可交互状态,这也是一种很不好的体验;
一个页面的打开速率快烦懑,可以用两个指标来描述,一个是ready韶光,一个是load韶光,chrome掌握台可以看到;
一共是加载了19.2KB,ready韶光是133ms,load韶光是147ms;
3、分点先容优化策略:
(1) 避免head标签js堵塞:
所有放在head标签里面的js和css都会堵塞渲染;如果这些css和js须要加载良久的话,那么页面就空缺了;
[html] view plain copy
<head>
<title>test</title>
<script src=\"大众https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js\公众></script>
</head>
用google的cdn加载一个jQuery文件是访问不了的,以是标签一贯在转圈,页面没有任何显示;
有两种办理办法,第一种是把script放到body后面,这也是很多网站采纳的方法。第二种是给script加defer或者async的属性,一旦script是defer或者async延迟的,那么这个script将会异步加载,但不会立时实行,会在readystatechange变为Interactive后按顺序依次实行;
两者相同点:
加载文件时不壅塞页面渲染
对付inline的script无效
利用这两个属性的脚本中不能调用document.write方法
有脚本的onload的事宜回调
两者不同点:
async下,js一旦下载好了就会实行,以是很有可能不是按照原来的顺序来实行的。如果js前后有依赖性,用async,就很有可能出错。
如果一个script加了defer属性,纵然放在head里面,它也会在html页面解析完毕之后再去实行,也便是类似于把这个script放在了页面底部。
(2) 减少head里面的css资源:
css必须放在head标签里面,如果放在body里面会造成对layout好的dom进行重排造成页面闪烁;但是一旦
放在head标签里面又会堵塞页面渲染;以是要尽可能的减小css体积;
例:不要放太多base64在css里面,webpack构建工具常常会配置图片体积小于多少的直接转换成base64加载,这
里是挺影响性能的,一个是不能用到缓存机制,另一个便是加大了css的体积;个人建议上线项目直接把图片用cdn托
管;
在这里给大家推举一个前端互换学习qun,想要学习的朋友可以加入进来,免费带你入门。前面是554,中间是224,后面是926.
(3)延迟加载图片:
对付很多网站来说,图片汪汪是占用最多流量和带宽的资源;
[html] view plain copy
<span style=\公众font-size:18px;\"大众><body>
<img id=\公众imgTest\"大众 src=\"大众about:blank\"大众 data-src=\"大众1.gif\"大众 />
</body>
<script type=\"大众text/javascript\公众>
window.onload = function(){
$(\"大众#imgTest\"大众).attr(\"大众src\"大众,$(\"大众#imgTest\"大众).data(\公众src\"大众));
}
</script></span>
这里没有直接给src路径,而是在页面加载完成后用js操作src,减少了页面加载图片的韶光,首先把全体页面构造呈现给用户;惰性加载图片也是差不多;当用户滑动页面到一定高度时(监听scroll事宜),再动态的依次对图片进行处理;
(4) 压缩和缓存:
压缩就不说了;缓存会在后续文章中详细写一个demo,持续更新;
(5) DNS解析优化:
DNS查询须要花费大量韶光来返回一个主机名的IP地址;
在我们的网站中,可能会加载到很多个域的东西,比如引入了百度舆图啊之类的sdk和一些自己的子域名做事;第一次打开网站时要做很多次DNS查找;DNS预读取能够加快网页打开韶光;
[html] view plain copy
<link rel=\"大众dns-prefection\"大众 href=\公众https://www.baidu.com\"大众>
在head中写上几个link标签,对标签中的地址提前解析DNS,这个解析是并行发生的,不会堵塞页面渲染;
还有非常多的页面优化技巧,html别嵌套太多层,加重页面layout的压力;css选择器的合理利用,减少匹配的打算量;js中别滥用闭包,会加深浸染域链,增加变量查找韶光;减少http要求之类的等等;
我是一名前端开拓程序员,自己整理了一份2019最全面前端学习资料,从最根本的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,这里是小白聚拢地,欢迎初学和进阶中的小伙伴
前端资料获取办法:
1.在你手机的右上角有【关注】选项,点击关注!
2.关注后,手机客户端点击我的主页面,右上角有私信,请私信回答:【学习】
电脑已经设置好了关键词自动回答,以是回答的时候请把稳关键词哟~