0
点赞
收藏
分享

微信扫一扫

Javascript常见问题(四)

一. DOM加载过程

在浏览器地址栏输入url,DNS域名解析,找到IP,向服务器发起请求,服务器返回数据,浏览器接收二进制文件。浏览器将二进制文件转换为html,构建DOM树。

  1. HTML解析器
    解析过程:
  • 遇到link的外部css,遇到css的代码会进行css的加载;
  • 遇到script标签会先去执行js的内容,直至脚本完成执行,然后继续构建DOM;
  • 解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档,脚本会在下载完成后尽快执行,但是解析起不会停下来等它下载,不会影响到后续DOM的渲染;
  • 如果有设置了defer的script标签存在,则会按照顺序执行所有的script,defer脚本会在文档渲染完毕后,DOMContentLoaded事件调用前执行,脚本会被延迟到整个页面都解析完毕后再运行。
  1. CSS解析器:
    每个css文件解析为样式表对象CSSStyleSheet,每个对象都包含CSSRule,CSSRule包含选择器和声明对象,以及其他与CSS语法对应的对象
  2. 构建render树:DOM树 + CSS树
  3. 布局layout与绘制paint:
    计算对象之间的大小,距离确定每个节点在屏幕上的确切坐标,映射浏览器屏幕绘制,使用UI后端层绘制每个节点;
  • reflow(回流):当元素属性发生改变并影响布局时(宽度,高度,内外边距等),产生回流,相当于刷新页面
  • repaint(重绘):当元素属性发生改变且不影响布局(背景色,字体样式等),产生重绘不一样引起回流,回流一定引起重绘。
了解DOM加载过程可以更好地知道如何web性能优化,比如如何有效地避免reflow回流

二. history和location注意事项

1. window.history属性指向History对象,它表示当前窗口的浏览历史
  • History.back() 浏览器回退
  • History.forward() 浏览器前进
  • History.go(val) // 可加载历史列表中的某个具体的页面(val: -1上一个页面,1前进一个页面)
  • History.pushState() // 向当前浏览器会话的历史堆栈中添加一个状态
  • History.replaceState() //修改当前历史记录实体
2. Location 对象window.location和document.location属性,可以拿到这个对象
  • Location.href 整个URL
  • Location.protocal 当前URL的协议
  • Location.host 主机
  • Location.hostname 主机名
  • Location.port 端口号
  • Location.pathname URL的路径部分,从根路径开始
  • Location.search 查询字符串部分
  • Location.hash 片段字符串部分,从#开始
  • Location.username 域名前面的用户名
  • Location.password 域名前面的密码
举报

相关推荐

0 条评论