码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vue内置组件之KeepAlive原理


    前言

    最近看 Vue 相关的知识点,看到 KeepAlive 组件时比较好奇它是怎么做到组件间切换时不重新渲染的,于是便稍微深入的了解了一下

    如果你也有兴趣想要了解一下具体内部怎么实现的或者说有一定的了解但是不够熟悉,那么正好你也可以一起巩固下

    Tips: 这样面试的时候你就可以大声的问别人这个知识点了🤔。

    KeepAlive 是什么

    是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例。

    KeepAlive 功能

    KeepAlive 一词借鉴于 HTTP 协议,在 HTTP 协议里面 KeepAlive 又称持久连接,作用是允许多个请求/响应共用同一个 HTTP 连接,解决了频繁的销毁和创建 HTTP 连接带来的额外性能开销。而同理 Vue 里的 KeepAlive 组件也是为了避免一个组件被频繁的销毁/重建,避免了性能上的开销。

    // App.vue
    
    
    
    toggle
    • 1
    • 2
    • 3
    • 4

    上述代码可以看到,如果我们频繁点击 toggle 时会频繁的渲染 Test/HelloWorld 组件,当用户频繁的点击时 Test 组件需要频繁的销毁/渲染,这就造成很大的渲染性能损失。

    所以为了解决这种性能开销,你需要知道是时候使用 KeepAlive 组件。

    
      
    
    
    toggle
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    可以看这个录屏,在首次加载后再次频繁的切换并没有重新销毁与挂载,而仅仅是将组件进行了失活(而不是销毁),渲染时只需要重新激活就可以,而不需重新挂载,如果要渲染的组件很大,那就能有不错的性能优化。

    想要体验的话可以去看看这个例子🌰官方demo,其中数据会被缓存这个也需要在开发使用中去注意到的

    如何实现

    实现原理其实很简单,其实就是缓存管理和特定的销毁和渲染逻辑,使得它不同于其他组件。

    KeepAlive 组件在卸载组件时并不能真的将其卸载,而是将其放到一个隐藏的容器里面,当被激活时再从隐藏的容器中拿出来挂载到真正的 dom 上就行,这也就对应了 KeepAlive 的两个独特的生命周期activated和deactivated。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngeUGtXD-1668172656293)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/74acec749d6b45fc9d1e3d37dd895e28~tplv-k3u1fbpfcp-watermark.image?)]

    先来简单了解下组件的挂载过程

  • 相关阅读:
    03_Ribbon
    CSS学习|css三种导入方式、基本选择器、层次选择器、结构伪类选择器、属性选择器、字体样式、文本样式
    通过shell编写内存监视的脚本来介绍一些基本shell脚本操作
    鸿蒙 Stage模型-应用组件-配置、UIAbility
    element-ui的form校验失败
    设置django orm 模型中的字段限制数值的大小
    3D WEB轻量化引擎HOOPS Commuicator技术概览(一):数据导入与加载
    “2024杭州国际物联网展览会”定于4月份在杭州国际博览中心召开
    求二叉树的最大密度(可运行)
    区块链实验室(26) - 区块链期刊Blockchain: Research and Applications
  • 原文地址:https://blog.csdn.net/cyg_l02/article/details/127813373
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号