1.双向绑定的理解
双向绑定的指令v-model,可以绑定一个动态值到视图上,同时可以修改视图能改变数据对应数据。
v-model 指令在表单 input等元素上创建双向数据绑定,v-model是语法糖
text 使用 value 属性和 input 事件 checkbox 使用 checked 属性和 change 事件
如下例子:
<input v-model='val'>
<input v-bind:value="val" v-on:input="val = $event.target.value">
2.nextTick
vue视图更新是异步的,使用nextTick方法可以保证用户自定义逻辑更新后执行。
数据同步,视图更新是异步。
nextTick不是异步方法,就是将处理数据放入任务数组里,依次执行,所以数据未更新,使用nextTick是获取不到更新后的数据的。
当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新。 能用微任务就是微任务,没有微任务就是宏任务,nexttick内的方法存起来,等dom更新完成之后去执行
获取更新后的DOM,多次调用nextTick会被合并。
vue3 没有梯处理逻辑,不考虑兼容性,也没有了优雅降级。
3.虚拟DOM
就是js对象来描述真实DOM,提高操作效率,通过diff算法对比差异进行更新,减少了对真实DOM的操作。
虚拟DOM不依赖真实平台,实现跨平台。
VDOM 通过模板转换成函数,挂载过程中调用render函数,返回虚拟DOM,在patch方法转为真实DOM
当数据发生变化,重新渲染,生成新的VDOM。新的和旧的的VDOMdiff算法,更改部分用到真实DOM上。
4.Gzip
Gzip 是一种压缩算法。
在Vue项目中使用Gzip压缩通常是在构建过程中通过webpack配置来实现的。
两种方式:1.服务端开启使用,服务端压力大,带宽消耗大 2.打包时使用,dist文件大。
两种方法混合用比较合适,在 webpack 打包时,配置只对超过一定体积的文件进行压缩,在配置 nginx ,当浏览器发起请求时,服务端对 .gz 文件进行直接传输给浏览器,对源文件先进行实时压缩,在返回给浏览器。
npm install --save-dev compression-webpack-plugin
会在构建生产环境时自动压缩js, css, 和html文件
5.data是个函数
避免造成数据污染。
根实例对象可以是对象也可以是函数,因为是单例的。
组件实例对象必须是函数,防止多个组件实例对象共用一个data. 如果是对象的话,创建实例,数据会被共享,设置成函数实现数据隔离。
vue3不需要考虑了,一切都是从组件开始,都是一个函数,不需要进行区分了。
6.函数组件
无状态,无生命周期,无this,性能高。
没有new的过程
使用 : template functional
7.过滤器
不改变原始数据,只是对数据进行加工处理后返回过滤后的数据在进行调用处理,是个纯函数。
常用场景:时间格式化,千分符等。
vue3不用了。直接可以写函数进行过滤
8.keep-alive
缓存组件,切换组件时进行缓存,保存当前的DOM节点,下次使用重新激活,缓存的实例拿到之前缓存的DOM进行渲染。
动态组件可以使用keep-alive
路由中使用,页面是否需要缓存
9.性能优化
1.数据层级不要过深。
2.Object.freeze()方法冻结属性,不能进行get set方法。
3.使用数据缓存,避免频繁取值。
4.合理设置key
5.v-show和v-if 选取。频繁修改使用v-show
6.页面组件化
7.函数组件提升性能
8.异步组件
9.使用keep-alive缓存组件
10.虚拟滚动,时间分片
10.跨越问题
跨域是浏览器同源策略造成的。
1、后端需要进行设置 CORS 跨域资源共享。
2.构建工具反向代理,nginx反向代理。
3.使用websocket 进行通信。
4.搭BFF解决,前端服务的服务器。
11.v-show 和 v-if
v-if条件不成立 DOM中删除
v-show 想保留,在改变成display 显示或隐藏DOM 类似display
12.权限管理
登录权限:token保存本地,发送请求时携带token,后端进行验证,页面刷新使用token获取用户权限
页面权限:配置路由一个通用的,一个需要权限的,通过权限列表对应路由信息,通过addRoutes动态添加路由
访问权限:通过路由守卫判断用户是否有权限,
按钮权限:自定义指令实现,后端返回对应权限,在按钮上使用指令判断按钮权限。