双向绑定原理:
vue2.x 通过Object.defineProperty的set,get方法实现数据的双向绑定,但只能检测到对象现有的属性。
而vue3.x是通过proxy实现,好处是监听的整个对象,无论是否是新增的属性,都可以检测到,也因此vue的性能又得到了大力提升
vue3的v-model
废除了 vue2的sync方法 改为了modelValue的形式,子组件props通过modelValue接收参数,子组件通过update:modelValue更新父组件数据,并且支持多个v-model的绑定
watch 与watchEffect的区别
- 执行时机:watchEffect是
立即执行
的,在页面加载时会主动执行一次,来收集依赖;而watch是惰性地执行副作用,它不会立即执行,但可以配置 immediate,使其主动触发。- 参数不同:watchEffect只需要传递一个回调函数,不需要传递侦听的数据,它会在页面加载时主动执行一次,来收集依赖;而watch至少要有两个参数(第三个参数是配置项),第一个参数是侦听的数据,第二个参数是回调函数
- 结果不同:watchEffect获取不到更改前的值;而watch可以同时获取更改前和更改后的值
按钮权限
- UI 层
- 网页登录成功之后将后端返回的权限数组保存到vuex中;
- 向按钮所在路由表中meta对象中添加自定义属性,如add,delete,属性的值是后台给的权限表中的值;
- 全局挂载一个自定义指令btn,在指令mounted生命周期函数中接收两个参数el和binding,通过>binding.instance.$route和binding.value可以拿到当前路由信息对象中的权限值
- 调用一个公共的方法,通过传入的权限值判断当前用户是否具有权限(通过登录后存在vuex中的所有权限>索引)
- 有权限返回true ,没有权限通过el设置当前的按钮节点的style.opacity设置成半透明
- 逻辑层
- 点击按钮的时候调用公共方法传入属性名,通过当前的路由信息对象和属性名拿到属性的值,在进行在所有的权限中进行索引
垃圾回收机制
概念:Javascript代码运行时,需要分配内存空间来存储变量和值。当变量不在参与运行时,就需要系统收回被占用的内存空间,这就是垃圾回收
机制:1. javascript具有自动垃圾回收机制
,会定期对哪些不在使用的变量
,对象所占用的内存进行释放。
2. javascript中存在两个变量:全局变量和局部变量
。全局变量的生命周期会持续到页面卸载
;而在局部变量声明在函数中,它的生命周期从函数执行开始
,直到函数执行结束
,在这个过程中
局部变量会在堆或栈中存储它们的值,当函数执行结束后,这些局部变量不在被使用,它们所占用的空间就会被释放。
http与https的区别
HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好
使用 HTTPS 协议需要到 CA(数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:GlobalSign 等。
HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源
内存泄漏
- 程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
1.不合理的使用闭包,从而导致某些变量一直被留在内存当中
2.设置了setInterval定时器,而忘记取消它,如果循环函数有对外部变量的引用的话,那么这个变量会被一直留在内存中,而无法回收
3.获取一个DOM元素的引用,而后面这个元素被删除,由于我们一直保留了对这个元素的引用,所以它无法被回收。
4.由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收
浏览器缓存
概念:当我们第一次打开某一个网页时,浏览器向服务器发起请求,请求所需要的资源。如果我们使用了web缓存,当我们下一次再次访问该网站页面的时候,我们可以根据一些缓存策略,来决定是否直接使用缓存中的一些资源,还是再次向服务端发起请求,从而避免再次向服务器发起请求,减少客户端和服务器之间通信的时延。
作用:1、减少网络带宽的消耗
2、降低服务器压力
3、减少网络延时,加快页面打开速度。