1,cookie,localStorage,sessionStorage它们的区别
答:其中的一个相同点,就是它们保存在浏览器端,且同源的。
2,什么是xss? 如何防御
答: xss就是攻击者想尽一切办法将可以执行的代码注入到网页之中
Xss可以分为多种类型,但是总体上分为两类:持久型和非持久型
持久型就是攻击的代码被服务器写入进数据库中,这种危害非常大,如果用户量访问大,就会导致大量正常用户受到攻击
非持久型相比于前者危害小的多,一般通过修改url参数的方式加入攻击代码,诱导用户访问连接从而进行攻击
防止xss攻击有两种方式
1,转义字符 2,csp 本质上是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行,我们只需要配置规则,如何拦截是由浏览器自己实现的
3,什么是csrf?如何防御
答:csrf中文名是跨站请求伪造,原理就是攻击者构造出一个后端地址请求,诱导用户点击或者通过某些途径自动发起请求
如何防御:
1,get请求不对数据进行修改
2,不让第三方网站访问到用户cookie
3,阻止第三方网站请求接
4,请求时附带验证信息,比如验证token
4,说说浏览器渲染原理
答:主要有四个主要步骤:
1,解析HTML生成dom树- 渲染引擎首先解析HTML文档,生成dom树
2,构建Render树- 接下来不管是内联式,外联式还是嵌入式引入的css样式会被解析生成cssdom树,根据dom树与css树生成一颗用于渲染的Render tree
3,布局Render树 - 然后对渲染树的每个节点进行布局处理,确定屏幕上的显示位置
4,绘制Render树 - 最后遍历渲染树并用ui后端将每一个节点绘制出来
5,性能优化有哪些手段
答: Vue-Router路由懒加载(利用Webpack的代码切割)
使用CDN加速,将通用的库从vendor进行抽离
Nginx的gzip压缩
Vue异步组件
服务端渲染SSR
如果使用了一些UI库,采用按需加载
Webpack开启gzip压缩
Service Worker缓存文件处理
6,Css加载会造成阻塞吗
答: css并不会阻塞DOM树的解析。css加载会阻塞DOM树渲染。css加载会阻塞后面js语句的执行、
7,为什么js会阻塞加载页面
答: 由于 JavaScript 是可操纵 DOM 的,如果在修改这些元素属性同时渲染界面(即 JavaScript 线程和 UI 线程同时运行),那么渲染线程前后获得的元素数据就可能不一致了。
因此为了防止渲染出现不可预期的结果,浏览器设置 **「GUI 渲染线程与 JavaScript 引擎为互斥」**的关系。
当 JavaScript 引擎执行时 GUI 线程会被挂起,GUI 更新会被保存在一个队列中等到引擎线程空闲时立即被执行。
当浏览器在执行 JavaScript 程序的时候,GUI 渲染线程会被保存在一个队列中,直到 JS 程序执行完成,才会接着执行。
因此如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。****
8,Defer和async的区别
答: 两者都是异步去加载外部JS文件,不会阻塞DOM解析
Async是在外部JS加载完成后,浏览器空闲时,Load事件触发前执行,标记为async的脚本并不保证按照指定他们的先后顺序执行,该属性对于内联脚本无作用 (即没有**「src」**属性的脚本)。
defer是在JS加载完成后,整个文档解析完成后,触发 DOMContentLoaded 事件前执行,如果缺少 src 属性(即内嵌脚本),该属性不应被使用,因为这种情况下它不起作用
9,Dom tree是如何构建的
答:转码: 浏览器将接收到的二进制数据按照指定编码格式转化为HTML字符串
生成Tokens: 之后开始parser,浏览器会将HTML字符串解析成Tokens
构建Nodes: 对Node添加特定的属性,通过指针确定 Node 的父、子、兄 弟关系和所属 treeScope
生成DOM Tree: 通过node包含的指针确定的关系构建出DOM Tree
10,常见的浏览器内核有哪些
答: chrome: webkit fireFox: gecko ie: Trident safari: webkit