1. 浏览器中输入网址到显示内容经历的步骤
- URL地址解析
- DNS域名解析
- 三次握手和服务器建立tcp连接
- 把客户端信息传递给服务器,发送http/https请求
- 服务器处理请求
- 客户端渲染服务器返回的内容
- 四次挥手和服务器断开tcp连接
2. URL的组成部分
2.1 URI/URL/URN
- URL(Uniform Resource Locator):统一资源定位符,根据这个地址能找到对应的资源
- URN(Uniform Resource Name):同一资源名称,一般指国际上通用的一些名字
- URI(Uniform Resource Identifier):统一资源标识符,URL和URN是URI的子集
2.2 协议
- http:超文本传输协议,除了传递文本,还可以传递媒体资源文件或者流文件及xml格式数据
- https:更加安全的http,一般涉及支付的网站都要采用https协议(s指的是ssl加密传输)
ftp:文件传输协议(一般应用于本地文件上传服务器)
2.4 端口
端口号取值范围是0~65535,用端口号区分同一台服务器不同的项目。
- http默认端口号80
- https默认端口号443
- ftp默认端口号21
2.5 请求资源路径名称
默认的路径名称,服务器会找默认的资源,一般默认资源名称是index.html,服务器是可以配置的。
有些情况会采用url重写,为了增加SEO搜索引擎优化,动态的网站一般不能被搜索引擎收录,所以要把动态网址静态化,此时需要重写url
2.6HASH值
也可以充当信息传输的方式
锚点定位
基于HASH实现路由管控
2.7url编码解析方式
encodeURI/decodeURI:请求的地址中如果存在非有效的UNICODE编码内容,现代浏览器会默认进行编码。编码基于encodeURI,通过decodeURI解码,一般用encodeURI编码整个url,这样整个url中的特殊字符都会被自动编码
encodeURIComponent/decodeURIComponent:与encodeURI的区别:不给整个URL编码,而是给URL部分信息进行编码,一般都是问号传参的值编码
escape/unescape:对字符串进行编码解码,不能用于URI
3.DNS服务器域名解析
3.1 概念
DNS服务器:域名解析服务器,服务器上存储着域名-服务器外网IP的相关记录。DNS解析其实就是根据域名在DNS服务器上查找对应的服务器外网IP
3.2 DNS优化
- 浏览器默认机制:DNS缓存(一般浏览器会在第一次解析后,默认建立缓存,时间很短,只有一分钟左右)
- DNS预获取(dns-prefetch):在页面加载开始的时候,把当前页面中访问其他域名的信息提前解析,以后加载相关域名就不用解析了
-
4. http报文
4.1 概念
请求报文:所有经过传输协议,客户端传递给服务器的内容,都被称为请求报文
- 起始行
- 请求头
- 请求体
- 响应报文:所有经过传输协议,服务器返回给客户端的内容,都被称为响应报文
- http状态码
- 响应头
- 响应体
4.2 http状态码
状态码 | 状态 | 含义 |
---|---|---|
200 | OK | 请求成功 |
201 | Created | 服务器已经创建了文档 |
204 | No Content | 没有新文档,浏览器继续显示原来的文档,如果用户定期刷新页面,而服务器可以确定用户文档足够新,这个状态码很有用 |
301 | Moved Permanently | 永久重定向,客户请求的文档在其他地方,新的url在Location头中给出,浏览器应该自动访问新的url |
302 | Found | 类似于301,新的url应该被视为临时性替代,而不是永久性的 |
304 | Not Modified | 设置http协商缓存,客户端有缓存的文档发出了请求,服务器告诉客户端,原来缓存的文档还可以继续使用 |
400 | Bad Request | 请求出现语法错误 |
401 | Unauthorized | 无权限访问 |
404 | Not Found | 请求地址错误 |
500 | Internal Server Error | 服务器内部错误 |
503 | Service Unavailable | 服务器超负荷 |
5. 浏览器渲染页面的机制
- 解析HTML,生成DOM树,解析CSS,生成CSSOM树
- 将DOM树和CSSOM树结合生成Render Tree渲染树
- Layout回流:根据生成的渲染树,计算它们在设备视口内的确切位置和大小,这个计算的阶段就是回流
- Painting重绘:根据渲染树以及回流得到的几何信息,得到节点的绝对像素
- Display:将像素发送给GPU,展示在页面中
5.1 DOM的重绘与回流
回流:元素的大小、位置等几何信息发生变化的时候,触发了重新布局,导致渲染树重新计算布局和渲染
重绘:元素样式改变(但大小 宽高 位置等不变)触发重绘
回流一定触发重绘,但重绘不一定触发回流
5.2 避免DOM回流的几种方式
- 放弃传统操作DOM的方式,基于vue/react框架。mvvm/mvc/virtual dom/dom diff
- 分离读写操作:现代浏览器都有渲染队列机制。发现某一行要修改元素的样式,不会立即执行,而是继续往下走,如果下一行也会改变样式,则把修改样式的操作放到渲染队列中,直到不再是修改样式的操作后,整体渲染一次,引发一次回流
- 缓存布局信息:将所有需要获取dom元素的操作集中处理,变量存储后,统一进行样式的修改,本质上也是为了分离读写
- 元素批量修改:createDocumentFragment(文档碎片)或者模板字符串拼接
- 动画效果应用到position属性为absolute或fixed元素上(脱离了文档流)
- CSS3硬件加速(GPU加速),例如transform属性会触发硬件加速,不会导致回流和重绘
- 避免table布局和使用css的JavaScript表达式