输入url到页面加载经历了什么
1.在浏览器地址中输入url;
2.浏览器在查看是否有浏览器缓存-系统缓存-路由缓存,如果缓存中有,直接显示在页面中;如果没有,则进入下一步;
3.进行DNS(域名)解析,获取相应的IP地址;
4.浏览器向服务器发起tcp连接请求,进行tcp三次握手;
5.浏览器像服务器发送http请求,请求数据包;
6.服务器处理请求,将数据返回至浏览器;
7.浏览器接收到http响应;
8.读取页面内容、浏览器渲染、解析html源码;
9.生成Dom树,解析样式并交互(css+js);
10.ajax;
重绘和重排
- 概念
重绘(repaint):一个元素外观的改变出发的浏览器行为。
重排(reflow):渲染树进行重新计算。 - 原因
repaint:改变visibility、outline、背景色、文字颜色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
reflow:
①页面初始化的时候;
②操作Dom元素时(节点的增减和移动);
③某些元素尺寸的改变;
④获取某些属性~-~当获取一些属性时,浏览器为取得正确的值也会触发重排(offsetTop、offsetLeft、 offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidth、clientHeight)。 - 减少repaint和reflow
1.将多次改变样式属性的操作合并成一次操作;
2.将需要多次重排的元素,position属性设置为absolute或fixed,元素脱离文档流,它的变化不会影响到其他元素;
3.在内存中多次操作节点,完成后再添加到文档中去。例如要异步获取表格数据,渲染到页面。可以先取得数据后在内存中构建整个表格的html片段,再一次性添加到文档中去,而不是循环添加每一行;
4.由于display属性为none的元素不在渲染树中,对隐藏的元素操作不会引发其他元素的重排。如果要对一个元素进行复杂的操作时,可以先隐藏它,操作完成后再显示。这样只在隐藏和显示时触发2次重排;
5.在需要经常获取引起浏览器重排的属性值时,要缓存到变量。