1. 会话跟踪
客户向服务器发送第一个请求的时候,会话就开始了,在关闭浏览器之前,会话的各页面之间是数据共享的,直到关闭浏览器,这就是会话跟踪。
会话跟踪常用的方法:
(1)session:当客户第一次访问服务器到的时候,服务器会为该客户创建一个session对象,并为其设置一个唯一的sessionID,然后将这个ID放入cookie发送到客户端,下一次访问的时候,sessionID会发送到服务器,根据这个ID在服务器识别不同的用户。要注意,session是依赖cookie的,如果cookie被禁用,那么session也将失效。
(2)URL重写:就是在URL地址后面添加一个唯一id来标识该会话,把会话ID通过url地址传递出去,以便在服务端识别不同的用户。
2. 节流 和 防抖
节流和防抖是针对响应跟不上触发而提出的两种解决方案。例如当页面滚动,屏幕窗口改变等频繁操作。
节流:固定周期内,只执行一次动作,若有新事件触发,不执行,周期结束后,又有新事件触发,开始新周期。不重置周期,周期开始时执行动作
防抖:就是当事件被触发的时候,就设定一个周期来延迟执行该事件,若周期内,事件又被触发,则重新设定周期,直到周期结束,执行动作。会重置周期,周期结束时执行动作
3. HTTP请求头,请求响应
HTTP请求头:用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力,包括请求头,请求方式,请求地址等。
HTTP响应 :由三个部分组成,分别是:状态行、响应头、空行、响应正文。向客户端提供一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。
4. 回流 和 重绘
回流:页面因为元素的尺寸,显示和隐藏,布局等改变需要重新构建页面的时候,就称为回流,当页面第一次被加载的时候就会发生异常很大的回流。
重绘:页面中一些元素需要更新属性,而这些属性只影响外观,风格,不影响布局,就叫做重绘。
回流必将引起重绘,重绘不一定引起回流。
5. vue路由的钩子函数
(1)全局钩子
beforeEach和afterEach,有三个参数from,to,next
(2)单个路由里的钩子
beforeEnter和beforeLeave
(3)组件路由
beforeRouterEnter、beforeRouterUpdate和beforeRouterLeave
6. 服务端跨域
原因:限制不同源的请求(安全)
这里还是用最常用的方式来讲解,例如用户登录 a 网站,同时新开 tab 打开了 b 网站,如果不限制同源, b 可以像 a 网站发起任何请求,会让不法分子有机可趁。
解决方案:
1.CORS
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的 Web 应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器「不同的域、协议或端口」请求一个资源时,资源会发起一个「跨域 HTTP 请求」
2.jsonP
本质是利用了src跨域的特点。src不受同源策略的限制。通过动态创建script标签,设置src属性为对方的接口地址,以get方式传递请求,并将相应的结果通过回调函返回。
6. 性能优化
- 减少HTTP请求:
解决办法:合并图片(精灵图),合并CSS和JS文件;图片较多的页面也可以使用 lazyLoad(懒加载) 等技术进行优化。 - 减少对DOM的操作:
解决办法:修改和访问DOM元素会造成页面的Repaint和Reflow, 合理的使用JavaScript变量储存内容,考虑大量DOM元素中循环的性能开销,在循环结束时一次性写入。减少对DOM元素的查询和修改,查询时可将其赋值给局部变量。 - 压缩CSS和JS文件:
基本原理: CSS和JavaScript的压缩,直接减少下载的文件体积。 - 压缩图片和使用图片Sprite技术(精灵图):
图片压缩的方式:
4.1、缩小图片分辨率;
4.2、改变图片格式;
4.3、降低图片保存质量;
7 async/await与promise的区别
- 函数前使用关键字async,await只能用在async标记的函数内。
- 比promise更简洁
- 处理结果上:promise需要使用.then()来处理promise返回的结果,而async/await则直接在代码上顺序处理结果。
- 错误处理:promise如果在then里出现异常,只能用promise的catch函数来捕获,外面的try/catch捕获不到。async/await可以同时捕获异步和同步代码抛出的异常。