全局API与全局组件

全局API

mixin

主要调用mergeOptions方法合并options配置

extend

基于原型式继承也就是Object.create继承Vue构造函数,并且调用mergeOptions合并配置,返回一个新的Vue子类

use

用途

  1. 安装Vue,js插件。如果插件是一个对象,必须提供install方法。如果插件是一个函数,它会被作为install方法install方法调用时,会将Vue作为参数传入.
  2. 当install方法被同一个插件多次调用,插件将只会被安装一次

原理

实例有个插件数组变量installedplugins专门存放插件,执行插件提供的install方法,如果插件是一个函数,它会被作为install方法,执行完后该插件未被标记为installed为true ,主要避免多次调用安装插件


全局组件

keep-alive

keep-alive分为两个类型:1.动态组件 2 .路由组件
用途:主要用于保留组件状态(比如离开一个页面再回来,组件会被重新创建)或避免重新渲染

原理

  1. keep-alive是Vue.js的一个内置组件(实际所有组件都是options配置对象)。它能够不活动的组件实例保存在内存中,而不是直接将其销毁,它是一个抽象组件,不会被渲染到真实DOM中,也不会出现在父组件链中。
  2. 它提供了include与exclude两个属性,允许组件有条件地进行缓存include表示白名单exclude表示黑名单
  3. 保存组件缓存实际就是保存其对应的虚拟dom节点就行
  4. 其实就是在created时将需要缓存的VNode节点保存在this.cache中key值保存在this.keys,在render时,如果VNode的name符合在缓存条件(可以用inclde以及exclude控制),则会从this.cache中取出之前缓存的VNode实例进行渲染,判断缓存中是否已缓存了该实例,缓存了则直接获取,并调整key在keys中的位置(移除keys中key,并放入keys数组中的最后一位)
存在max原因,所以该组件内部采用LRU淘汰缓存算法来控制最大缓存数量
  1. LUR(Least Recently Used : 最近最少使用)
    缓存淘汰策略,顾名思义,就是根据数据的历史访问记录来进行淘汰数据,其核心思想是,如果数据最近被访问过,那么将来被访问的几率也更高,优先淘汰最近没有被访问到的数据.ULR
  2. 在keep-alive缓存超过max时,使用的缓存淘汰算法就是LRU算法,它在实现的过程中用到了cache对象用于保存缓存的组件实例及key值,
    keys数组用于保存环村组件的key,当keep-alive中渲染一个需要缓存的实例时;
    2.1 判断缓存中是否已缓存了该实例,缓存了则直接获取,并调整key在keys中的位置(移除keys中的key,并放入keys数组的最后一位)
    2.2 如果没有缓存,则缓存该实例,若keys的长度大于max(缓存长度超过上限),则移除keys[0]缓存
    2.3 如果配置了max并且缓存的长度超过了this.max,还要从缓存中删除第一个
  3. vue中通过数组实现的LRU本质上是通过散列表和双向链表实现效率比较高. 在js中通过array实现,v8会优化增删元素的效率
    3.1 我明白了 因为这里vue是用了数组所以如果直接index===>0 表示头 那么每次都unshift头部会牵一发而动全身
    所以这里是这样理解的 数组尾部表示优先级最高的 头部是优先级最低的 溢出就会被淘汰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值