Vue2.0源码解析 - 知其然知其所以然之keep-alive原理分析(一)
前言
【一天一个小知识,每天进步一点点】小伙伴们大家好。上一篇文章Vue2.0源码解析 - 知其然知其所以然之keep-alive给大家分享了Vue2.0中关于内置组件keep-alive的作用和用法,通过学习让我们知道原来vue中的组件也是可以缓存的,不是每个组件都必须得销毁。那么知道了keep-alive的作用和用法了,不知有没有小伙伴好奇:它是怎么实现缓存的呢,它的原理又是怎样的?接下来即将为大家揭晓。
keep-alive整体源码解读
前面我们说过,keep-alive是vue中的一个内置组件,既然是组件那么肯定就有组件的共同特点。比如props,methods,data,生命周期函数等等。下面我们就分段对源码进行解读,看看它是如何实现缓存的。
源码路径:src/core/components/keep-alive.js
源码版本:2.6.12
// src/core/components/keep-alive.js
export default {name: 'keep-alive',abstract: true, // 判断当前组件虚拟dom是否渲染成真是dom的关键props: {include: [String, RegExp, Array], // 符合条件的组件都会被缓存起来exclude: [String, RegExp, Array], // 排除符合条件的组件,不会缓存max: [String, Number] // 缓存的组件实例的最大个数},methods: {cacheVNode(){//...}},created () {this.cache = Object.create(null) // 缓存虚拟domthis.keys = [] // 用来存储所有缓存的虚拟dom的健},destroyed () {for (const key in this.cache) { // 删除所有的缓存pruneCacheEntry(this.cache, key, this.keys)}},mounted () {this.cacheVNode();// 实时监听黑白名单的变动this.$watch('include', val => {pruneCache(this, name => matches(val, name))})this.$watch('exclude', val => {pruneCache(this, name => !matches(val, name))})},updated(){this.cacheVNode();},render () {// ...}
}
以上是keep-alive部分源码,我们先从简单开始一步步分析。
- 首先我们看到了props中的include,exclude和max三个属性的定义,这就是我们之前使用keep-alive时提到的用于匹配缓存组件的属性,这就就不在赘述了
- methods中有个用来缓存虚拟dom的方法cacheVNode,这里先不展开分析,后面会详细讲解
- created:生命周期函数中创建了两个实例属性cache空对象和keys数组。分别用于保存虚拟dom的实例和虚拟dom的key
- destroyed:在组件销毁后同时清空所有的缓存组件,pruneCacheEntry是本组件中定义的一个公共方法,后续详细分析
- mounted:组件挂载后调用methods中定义的cacheVNode函数对虚拟dom进行缓存;同时对include和exclude进行监听,一旦这两个属性发生变化便立即执行pruneCache函数对缓存进行修改。pruneCache也是本组件中定义的一个公共方法,后续详细分析。
- updated:组件更新后也会调用methods中定义的cacheVNode函数对虚拟dom进行缓存
- render:在render函数中会获取将要被展示的组件对应的虚拟DOM,如果组件已被缓存则直接从缓存中读取,后续详细分析。
总结
为了循序渐进的掌握keep-alive的实现原理,本文并没有对每个函数进行详细的展开分析,对keep-alive源码的整体框架进行了一个简单的梳理,先让我们大概有个印象:keep-alive组件在每个不同阶段都做了哪些事,下一篇文章中我们将详细对每个函数进行展开分析,从而让我们彻底的掌握keep-alive的工作原理。希望小伙伴们多多支持。
喜欢的小伙伴欢迎点赞留言加关注哦!
Vue2.0源码解析 - 知其然知其所以然之keep-alive原理分析(一)相关推荐
- Vue2.0源码解析——编译原理
Vue2.0源码解析--编译原理 前言:本篇文章主要对Vue2.0源码的编译原理进行一个粗浅的分析,其中涉及到正则.高阶函数等知识点,对js的考察是非常的深的,因此我们来好好啃一下这个编译原理的部分. ...
- Vue2.0源码解析 - 知其然知其所以然之Vue.use
前言 小伙伴们大家好.用过Vue的小伙伴都知道,在我们进行Vue开发时,避免不了会使用一些第三方的库,比如说ElementUI组件库.当我们导入好这些组件库后会执行一个Vue.use函数,然后把导进来 ...
- vue2.0源码解析(一)
1.先下载vue源码(当前版本为:2.6.11) 地址: git clone https://github.com/vuejs/vue.git 2.切换到package.json dev脚本中 -c ...
- Vue2.0源码解析 - 知其然知其所以然之keep-alive
前言 [一天一个小知识,每天进步一点点]小伙伴们大家好,今天将要给大家分享是Vue中关于组件缓存的一个内置组件 - keep-alive 不知道小伙伴们有没有遇到这样一种情况,在我们的项目开发中,有时 ...
- 锚框、交并比和非极大值抑制(tf2.0源码解析)
锚框.交并比和非极大值抑制(tf2.0源码解析) 文章目录 锚框.交并比和非极大值抑制(tf2.0源码解析) 一.锚框生成 1.锚框的宽高 2.锚框的个数 3.注意点(★★★) 4.tf2.0代码 二 ...
- 前端进阶-手写Vue2.0源码(三)|技术点评
前言 今天是个特别的日子 祝各位女神女神节快乐哈 封面我就放一张杀殿的帅照表达我的祝福 哈哈 此篇主要手写 Vue2.0 源码-初始渲染原理 上一篇咱们主要介绍了 Vue 模板编译原理 它是 Vue ...
- solrlucene3.6.0源码解析(三)
solr索引操作(包括新增 更新 删除 提交 合并等)相关UML图如下 从上面的类图我们可以发现,其中体现了工厂方法模式及责任链模式的运用 UpdateRequestProcessor相当于责任链模式 ...
- Heritrix 3.1.0 源码解析(八)
本文接着分析存储CrawlURI curi的队列容器,最重要的是BdbWorkQueue类及BdbMultipleWorkQueues类 BdbWorkQueue类继承自抽象类WorkQueue,抽象 ...
- Heritrix 3.1.0 源码解析(六)
本文分析BdbFrontier对象的相关状态和方法 BdbFrontier类继承自WorkQueueFrontier类 WorkQueueFrontier类继承自AbstractFrontier类 ...
- Heritrix 3.1.0 源码解析(十一)
上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的,那么在系统初始化的时候,是怎么载入CrawlURI curi种子的呢? 我们回顾前面的文章,在我们执行采集任务的la ...
最新文章
- redis c客户端 hiredis
- 家用轿车轮胎多久更换一次?
- 浅谈怎么玩好微博如何做微博营销
- 明天面腾讯,我刷了这71道面试题...
- git常用命令及冲突解决
- from __future__ import absolute_import的作用
- 关闭加速渲染_“瀑布屏”旗舰 摩托罗拉Edge+渲染图曝光,Moto G8正式发布
- css-3秒(大概吧...)快速撸出YY游戏页面(三)
- Python学习笔记——条件分支和while循环
- set类型 php,常用php操作redis命令整理(四)SET类型详解
- 大学c语言基本程序,一个大学C语言试题的简单实现--员工信息管理程序
- python植树问题代码_BERT可以上几年级了?Seq2Seq“硬刚”小学数学应用题
- Free MyBatis plugin下载安装及作用
- python文字转语音的五种方式win32com,pyttsx3,百度api,可使用自己的声音
- ajax 上传图片进度条,ajax实现图片上传与进度条
- Golang 相关 mindoc开发
- 柳传志的回复:联想集团大裁员:公司不是家
- 【无中生有】---14---用户行为监控系统嵌入
- Origin怎么画圆形而非椭圆形?
- 如何预防钓鱼邮件?S/MIME邮件证书来支招
热门文章
- 201671010426 孙锦喆 实验二词频统计软件项目报告
- 201671010406 词频统计软件项目报告
- 2021-2027全球与中国自动识别和数据采集设备市场现状及未来发展趋势
- 1688API接口:item_search_img - 按图搜索1688商品(拍立淘)
- HWIDGen 激活出错 解决:输入错误: 没有文件扩展“.vbs”的脚本引擎
- 麻辣探:大学生就业翻译竞争激烈 IT制造需求大
- 微信小程序优惠券制作方法
- 网站图片优化方法有哪些
- cad转excel插件c2e_CAD表格互转EXCEL插件
- 评价法(一):层次分析法的步骤和方法