一 HTML
1.html语义化即html具有可读性,更容易读懂,一些特殊的标签例如radio,button,h2,input之类的,即使没有样式,也可以让人一眼看出是做什么的。这也让搜索引擎更容易读懂,有利于爬虫抓取更多信息。
2.script标签的defer和async属性
<script></script> html按顺序解析,遇到此标签时,会先请求标签涉及的脚本资源,并且立即执行,执行完成之后再继续解析接下来的html标签
<script async></script> html按顺序解析,遇到此标签时,会先异步请求标签涉及的脚本资源,因为是异步的,所以html解析过程是继续进行的,等到异步请求回来之后,会暂停html解析,先立即执行此脚本,执行完成之后再继续解析html。多个script async脚本执行顺序以异步请求先结束的为优先
<script defer></script> html按顺序解析,遇到此标签时,会先异步请求标签涉及的脚本资源,同时继续解析html,知道html解析完成,才会在最后执行异步请求完成之后的脚本。多个script defer脚本执行顺序以出现的顺序为准
3.从url输入到页面展示发生了什么
3.1 url分析
以此连接为例 https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD
http https是 因特网协议服务类型,常见的有http,https http与https的区别,https是进行加密的网络传输类型,常用于正式环境,http常用于本地开发环境
www 主机 http的·默认主机是www
baidu.com 域名
此链接无端口号
baidu 服务器上的文档路径
tn=monline_3_dg&ie=utf-8&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD 查询参数
3.2访问步骤
DNS域名解析,此链接中,DNS协议通过域名baidu.com找到对应的ip地址,一般是迭代查询
CDN content delivery network利用了DNS的负载均衡(重定向)实现原理,这个原理是DNS服务器为同一个主机配置多个IP地址,这样客户端访问时,DNS解析过程就将不同的客户引导导不同ip地址去,这样可以让不同的客户端访问不同的服务器,从而达到负载均衡的目的。
DNS-prefetch 就是当客户浏览一个网页时,浏览器会在加载网页时对这个网页中的域名进行解析,这样在点击这个网页中的连接时就无需再进行DNS解析,减少用户等待时间。
3.3 OSI参考模型
1.物理层--2.数据链路层--3.网络层--4.传输层--5.会话层--6.表示层--7.应用层
3.4 TCP/IP四层模型
物理层和数据链路层组成了TCP/IP低层一层,有以太网 无线lan
网络层组成了TCP/IP的第二层,有ipv4 ipv6
传输层组成了TCP/IP的第三层,层有TCP UDP协议
会话层,表示层,应用层组成了TCP/IP的第四层,这部分有HTTP,HTML,SSL TLS FTP MIME HTML
3.5 TCP的三次握手过程
第一次握手,客户端---发送SYN=1 Seq=X 到服务端,告知服务器浏览器要发请求了
第二次握手,服务端返回一个SYN=1 Seq=X ACK=X=1 告诉客户端,服务端准备好接受请求了,并且确认数据包是不是第一次发送的那样
第三次握手,客户端回传一个ACK=Y+1 Seq=Z到服务端表示握手结束
3.6 TCP三次握手结束之后,开始发送HTTP请求报文
3.7 服务器处理请求并返回http报文
MVC
view层发生变化触发controler,并且将变化的数据传给controler
controler拿到数据变化触发model,并且将变化的数据传给model,
model将数据存取更新并且触发view视图层更新
MVVM
model层数据发生变化自动同步到view层
view层发生变化自动同步到model层
Mvc模式和MVVM模式的区别
1.MVC是单向数据绑定,MVVM是双向数据绑定,且是自动的,减少了dom操作,提升了渲染速度,有更好的用户体验
2.MVVM view和model完全分离,耦合性低
3.8浏览器解析渲染页面
浏览器是多进程的,每一个tab页面都是一个新的进程,浏览器也是多线程内核,每一个tab页面进程中都是多线程的,线程包括以下几个分类
GUI线程
JS引擎线程
事件触发线程
定时器线程
网络请求线程
html解析构成dom树--------]
两个合并变成render tree---layout对render tree进行布局,计算尺寸,位置,像素---绘制render tree
css解析构成style rules tree---]
浏览器将html字节类型的内容转化为字符,这些字符会按照html的规范转化为不同的token,每个token都有自己的规则,然后再把这些token转化为node对象。最终由node对象构建成dom
3.9 TCP四次挥手
浏览器发送fin seq=x+2 ack 告知服务器请求发送完了,没有数据发送了,准备关闭,浏览器进入FIN_WAIT_1状态
服务器收到后发送ack seq到浏览器,告知同意关闭,浏览器收到后进入FIN_WAIT_2状态
服务器再次发送报文端fin seq ack 请求关闭连接,服务器进入last-ack状态
浏览器收到后,向服务器发送seq ack,浏览器进入time_wait状态,服务器收到后关闭连接,浏览器等一段时间未收到回复,正常关闭