基于TOP-K的面试题解总结(8)

36.简述 Javascript 事件冒泡和事件捕获原理
  • 描述事件触发时序问题
  • 事件捕获:
    • 由外到内:从document根节点到触发事件的那个节点
    • 先触发当前节点的根元素然后再触发下一级事件,直到事件源
  • 事件冒泡:
    • 由内到外:自下而上的去触发事件
  • 事件流:
    • 事件捕获-->事件源-->事件冒泡
 
37.优化首屏渲染的方式有哪几种?
  • Nginx的gzip压缩:
    • 配置gzip on;开启gzip压缩
    • gzip_types 表示需要压缩的常见静态资源
    • gzip_min_length 1k;表示大于1k就压缩
    • gzip_comp_level 2;表示压缩等级1-9,数字越小压缩速度越快但cpu消耗大
  • Vue-Router路由懒加载
    • 将不同路由对应的不同组件分割成不同的js代码块,然后当路由被访问的时候才加载对应的组件,更高效
  • UI库可以按需加载:
    • 对于UI库可按照页面所需的UI进行按需加载
  • 通过设置link标签的ref属性
    • prefetch降低权重,不用立马加载
    • preload提高下载顺序权重,使得关键数据提前下载好,优化页面加载速)
 
38.sessionStorage 和 localStorage 有什么区别?
  • sessionStorage:cookie的扩大版,面向会话的存储。会话结束会被清除。大小和localStorage相近5MB左右
  • localStorage:生命周期是永久,储存的信息永远不会消失,除非用户主动清除
 
39.简述 BFC 的原理及其使用场景
  • BFC:块级格式化上下文,盒子内部有一套自己的渲染规则,形成独立的容器。不影响其他环境中的布局
  • 形成BFC条件:
    • float不为none
    • position为absolute(绝对定位)或fixed
    • display属性值为inline-block/felx/table-cell等
    • overflow不为visible
  • 使用场景:
    • 解决高度塌陷:由于子元素设置浮动,父元素高度塌陷,只要设置父元素overflow为hidden即可解决容器塌陷
    • 阻止外边距margin叠加
    • 防止浮动元素遮住文档流中元素(因为设置盒子后,盒子不会影响其他环境中的布局)
 
40.简述 Dom 节点的不同操作方式
  • 创建DOM节点
    • 创建元素节点:document.createElement("div")
    • 创建文本节点:document.createNode("hello world")
  • 插入DOM节点
    • 在父元素节点中末尾插入子节点:fatherNode.appendChild(sonNode)
    • 在父元素节点中某个子元素之前插入节点:fatherNode.insertBefore(sonNewNode,sonOldNode)
  • 删除DOM节点
    • 在父元素节点中删除某个子元素:fatherNode.removeChile(sonNode)
  • 修改DOM节点属性
    • Node.setAttribute(name,value);给Node设置{name : value}的属性
    • Node.getAttribute(name);获取Node{name}的属性值
    • Node.removeAttribute(name);移除Node{name}的属性值
  • 获取节点
    • 通过ID获取对应元素:getElementById()
    • 通标签名获取对应元素:getElementsByTagName()
    • 通过类名获取对应元素:getElementsByClassName()
    • 通过CSS选择器获取对应元素:querySelector()和querySelectorAll()
    • 通过name属性获取对应元素:getElementsByName()
  • 复制节点
    • Anode.cloneNode(boolean); Anode是被复制的元素,返回的是新元素,boolean表示是否复制
  • 替换节点
    • 在父元素节点中用新的子元素替换老的: fatherNode.replaceChild(newSonNode,oldSonNode)
posted @ 2022-04-11 17:59  Vegatable_Bird  阅读(35)  评论(0)    收藏  举报