当前位置: 首页 > 网络应用技术

Keep-Alive的VUE2和VUE3的源代码和LRU算法3

时间:2023-03-06 23:46:46 网络应用技术

  LRU(最近使用最少)根据数据的历史记录消除了数据。重点是保护最近访问/使用的数据,并消除最长时间在此阶段尚未访问的数据。

  LRU的主要思想是,如果最近采访了数据,将来访问的机会更高

  经典的LRU实现通常使用两条链接列表 +哈希表。使用哈希表快速映射到通过密钥的相应链接列表节点,然后插入和删除操作。这不仅解决了哈希表的缺点没有固定的订单,也没有链接列表的缺点以找到慢速。

  但是实际上,您无需在JS中实施此功能,您可以参考文章的第三部分。首先查看Vue的Keep-Alive实现。

  Keep-Alive是VUE中的内置组件。使用KeepAlive之后,将在第一个渲染的Vnode之后缓存包裹组件,然后再次渲染组件时,直接从缓存到相应的相应的VNODE将相应的vNode接收到相应的过程,不需要采用一系列的过程,例如组件的初始化,渲染和补丁,这减少了脚本的执行时间,并且具有更好的性能。

  使用原理:当我们不需要在某些情况下让页面重新加载时,我们可以使用keepalive

  当我们来自 - > - > - >,此时应需要列表页面

  从 - > - > - > - > - > - > - > - > - > - > - 您可以按需控制页面

  设置keepalive属性以确定路由中是否需要缓存。

  实施原理:通过Keep-Alive组件插槽获取第一个子节点。确定是否需要基于Include和排除的缓存是否需要缓存,并确定是否通过组件的键击中缓存。使用LRU算法,更新,更新缓存和相应的键阵列。基于最大组件的最大数量。

  首先查看VUE2的实现:

  可以看出,组件的实现也是对象。请注意,它具有true的属性,并且是一个抽象组件。当组件实例中建立父子关系时,它将被忽略。在发生的过程中:

  然后定义钩子中的和谐,该钩子是为缓存而创建的。

  该功能是直接实现的。渲染组件时,将执行此功能。接下来,让我们分析其实施。

  首先通过插槽获得第一个子元素:

  仅处理第一个子元素,因此通常与动态组件或。

  然后判断当前组件的名称与(白名单,黑名单)之间的关系:

  如果组件名称不符合条件,则直接返回此组件,否则下一步是采取下一步:

  如果击中缓存,则直接从缓存中获取并重新调整了最后一个键的顺序;否则,设置将设置为缓存。一个。

  这里有一个问题:确定是否应在PUT操作之前放置最大容量。为什么?我们设置了一个缓存队列,您是否已经充满了?最好删除一个插入插件。

  继续看到缓存的实现:

  除了从高速缓存中删除外,还必须确定要删除的缓存的组件不是当前的渲染组件,而是删除缓存组件实例的方法。

  ——————————————————————

  可以发现,VUE实现LRU算法是通过数组 +对象,并且数组用于记录缓存序列。对象用于模仿地图的功能以执行VNODE的缓存(在钩子中定义)

  VUE3的想法实现基本上与VUE2相似,我不会在此处详细介绍。这主要取决于LRU算法的实现。

  VUE3通过SET + MAP实现LRU算法:

  并确定缓存能力的实施是否相对聪明:

  在这里,集合的巧妙使用是迭代对象的特征。通过keys.value(),获取包含键中键的所有迭代对象,并通过下一个()获得第一个元素。值,然后删除它。

  leetcode标题-lru缓存

  在这里,我们可以直接通过地图实现它。

  Keep-Alive实现的实现是VNODE,因为缓存内容是VNode,它直接操作地图中的高速缓存位置,并且使用SET / ARNAY记录缓存的密钥将模拟缓存顺序。

  参考:

  LRU缓存保存实施原则

  牵着您的手去LRU算法

  Vue.js技术揭示了

  原来的;https://juejin.cn/post/7098299715846373389