备战校招第十天
- 面向对象实现继承
- HTTP 协议类
- 通信类
- 安全类
- 渲染机制类
- 提升页面性能
- 错误监控
面向对象实现继承
第一种:借助构造函数实现
可以调用父类构造函数,但获取不到父类原型对象上的方法和属性
1 | function P1() { |
第二种:利用原型链实现
缺点:原型链中的原型对象是共用的。
1 | function P2() { |
第三种:组合继承
将前两种方法组合,解决了之前的缺点,但父类被调用了两次
1 | function P3() { |
第四种:组合继承优化1
无法判断是子类创建的对象还是父类创建的对象
1 | function P4() { |
第五种:组合继承优化2
1 | function P5() { |
第六种:ES6 class 定义
1 | class P6 { |
HTTP协议类
http主要特点
- 简单
- 快速
- 无连接
- 无状态
http报文组成部分
请求报文
- 请求行:http方法、 页面地址、 http协议以及版本
- 请求头:key-value值
- 空行:分割请求头和请求体
- 请求体
响应报文
- 状态行: http协议版本、状态码
- 响应头:和请求头类似
- 空行
- 响应体
http 方法
- GET
- POST
- PUT
- DELETE
- HEAD
get和post区别
- 在浏览器回退时,get无害,post则会再次提交请求
- url地址,get可以被收藏,post不行
- 缓存,get会主动缓存,post不回,需手动设置
- get请求只能进习惯url编码,post支持多种编码
- get请求会在历史记录中,post不会
- get请求在URL中传递参数有长度限制,post没有限制
- 参数的数据类型,get只接受ASCII自负,post没有限制
- get比post更不安全,因为参数直接暴露在url中,所以不能传递敏感信息
- get参数通过url传递,post放在请求体中
http 状态码
1xx:指示信息,表示请求已接受,继续处理
2xx:成功,表示请求已成功被接收
3xx:重定向
4xx:客户端错误
5xx:服务器错误
通信类
跨域通信
- JSONP
- Hash
- PostMessage
- Websocket
- CORS
安全类
XSS
跨站脚本攻击
- 存储型XSS:跨站代码存储在数据库
- 反射型XSS:恶意代码在url中
- DOM型XSS:DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
原理
页面注入脚本,执行恶意 js 代码
防御措施
- 输入内容过滤
- 转译html
- cookie设置http-only,防止恶意获取cookie
- 少用直接渲染或者执行html的js代码,比如:
document.write()
、innerHTML
、vue中的v-html
等
CSRF
跨站请求伪造
原理
用户登陆A网站,A网站下发cookie。用户登陆B网站,B网站诱导用户点击链接,用户点击链接,访问A网站并携带cookie。
防御措施
- token 验证
- referer 验证
渲染机制类
DOCTYPE
DTD是 XML文件的文档类型定义(Document Type Definition)可以看成一个或者多个XML文件的模板,在这里可以定义XML文件中的元素、元素的属性、元素的排列方式、元素包含的内容等等。
<!DOCTYPE>
声明必须是 HTML 文档的第一行,位于 标签之前。
<!DOCTYPE>
声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。
html5
1 |
html4.01 strict
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。1
HTML 4.01 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。允许框架集(Framesets)。1
浏览器渲染过程
Reflow 重排
定义
当Render Tree
中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为重排(又称为回流)。
触发reflow
- 增加、删除、修改DOM节点是,会导致reflow或repaint
- 移动DOM位置或者动画执行时
- 修改CSS样式时
- Resize 窗口时,或者滚动的时候
- 修改网页的默认字体时
Repaint 重绘
定义
当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color
、background-color
、visibility
等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。
触发repaint
DOM改动
CSS改动
减少repaint频率
- 使用 DocumentFragment
- virtual dom
提升页面性能
资源压缩合并,减少http请求
非核心代码异步加载
- 动态脚本加载
- defer:html解析完之后执行,如果是多个则按照顺序执行
- async:加载完之后立即执行,如果是多个,执行顺序与加载顺序无关
浏览器缓存
请查看备战校招第三天
CDN加速
预解析DNS
浏览器默认会进行a标签
dns解析,但https协议的可能会默认不解析,下面这行代码强制开启a标签
dns解析1
<meta http-equiv="x-dns-prefetch-control" content="on" />
预解析1
<link rel="dns-prefetch" href="//host_name_to_prefetch.com" />
错误监控
前端错误的分类
- 即时运行错误
- 资源加载错误
错误的捕获方式
运行时错误捕获方式
- try..catch
- window.onerror
资源加载错误
- object.onerror
- performance.getEntries()
- window.Error 事件捕获(冒泡获取不到)
上报错误的基本原理
Ajax
通信方式上报利用
Image
对象上报1
(new Image()).src="https://baidu.com/uploadError?type=1"