我们来看一下这个场景,这里准备了两个 tab, tab a 和 tab b, 它们之间切换的时候呢,下面表达的内容也会跟着变化。但这里存在一个问题,比如说当前是 tab a, 我 在它的主页里面输入了一些内容和 a a a a, 计数器里面也点了字帧,这个时候我切换到 tab b, 这是正常的,对吧?但是我再切回 tab a 的 时候呢,我之前的输入不见了。大家可以想一下,假设是在一个综合台管理系统,特别是有那种长表达的场景下,你 填了一堆的表达内容,但是中途你想切换到 type b, 去查下别的资料,然后再切回去的时候,所有内容都不见的时候,那种状态那肯定是很崩溃,对吧?而且这种场景非常的常见,那这是为什么呢?因为会有默认的逐渐切换,就比如说路由跳转啊, 或者 vif 切换等等,它是会销毁旧组建的,在切回来的时候呢,会重新创建,所以状态当然会归零了。那怎么解决呢?这就不得不说,并提供了 keepalive 组建了。比如说我们刚刚的大码对应的就是这个 typeform, 它是有两个 tab 去切换的,里面都已经封装好了。与此同时呢,我们也准备了另一个 typeform, 但是它的外层 是使用 keepalive 包裹的,然后通过一个开关进行切换,它们之间是一个 if, 然后再试一下 a a a, 然后计数器自增 切到 type b, 再切回 type a, 可以 看到我们之前填的内容还在,这个就是 keep live 的 作用,只要用它把主键包裹起来,切走的时候没有就不会去销毁它,而是会把它返存在内存里,当再次切回来的时候呢,会直接从内存中拿出来用。但有时候呢,你可能也不想缓存所有的页面,因为有的页面呢, 就是实时性要求比较高的,它必须要实时刷新,这时候怎么办呢? keepalive 提供了这种 include 的 属性,可以让你进行精准的控制。这个的意思是说,只会缓存这里面包含的主键,但前提是这里的 name 必须和主键内部定义的 name 保持一致。不过在实际的项目中呢,我们通常会用另一种更灵活的方式,也就是配合路由的 mate 所幸进行处理, 比如说这是我们的 router, 然后我们在 mate 里面去配置 keepalive 是 true 还是 false。 紧接着,在我们的 mate 中的 keepalive 来决定是否使用 keepellab 进行包裹,这样就能从路由层面来配置是否需要缓存,非常的灵活。那既然缓存这么好,我是不是可以把所有的主键都缓存起来呢?答案也是否定的,因为浏览器的内存是有限的,当你缓存太多主键的时候呢,就会导致内存占用过高,页面变卡。 所以 vivo 提供了一个 max 属性,用来限制最大缓存的数量。并且它里面的淘汰策略呢,是使用了 l r u 算法,比如说我们这里设置成最大就是两个嘛。那当我们打开页面 a 的 时候呢,会缓存 a, 打开页面 b 的 时候呢,会缓存 a 和 b, 但当我们继续打开页面 c 的 时候呢,缓存中只有 b 和 c 了, a 就 会被销毁掉。 嗯,大概是这么一个逻辑。更多关于 keepalive 的 原理进阶实战小技巧中,感兴趣的欢迎免费领取!
粉丝7775获赞5.6万

好了,这节课呢,我们来看一下 view 的第二道面试题,他问的是谈谈你对于 keep love 的一个了解, 那么既然他问到这么大一个话题呢,我们就要跟他细聊,对吧?首先我们要聊的是他是啥,对吧?他是干嘛的?哎,通过这么两点去聊。然后其次呢,就是他的一个使用场景啊,分为这么三个点, 那第三个点是最主要的啊,就是他在什么叫去用啊?那用他呢,能解决什么问题,是吧?这是最主要一个场景化东西。好了,那到这呢,我们就一项去谈,第一,他是什么? 首先呢,这 keep up 呢,是我们的 view 系统自带的一个组件,那么这个组件它最主要功能是什么呢?是来缓存 缓存组件,那么缓存组件那另外一方面也是说它可以干嘛呢?提升性, 对吧?我把一个东西呢缓存上了,那么你第二次,第三次,第四次,第五次再进去,是不是都不需要重新再打开一个东西了?是,走我之前那缓存内容就可以了,那这样话不就提升性能了吗?对吧?哎,他就这样一些功能。好,那么下面呢,就是他的一个使用,他到底该怎么用,或者说他的一个使用的场景。 好,下面看着啊,那,呃,我在这呢去搭了一个 view 项目,我把它跑起来,左边是我们的前台,右边是后台一接口,我把它打开,那现在这样啊,那我给所有的这个组件都给他加入一个 keep flat。 啊,这样呢,咱们加一下, 把它都放到这个里边啊,那也就意思说我访问哪个组件他都会备有缓存了,对吧?有这么东西啊,好,然后呢,现在呢,我们会进入到一个手 首页,那当我在这输入 local hose, 八零八零走你,那他就会打开这个首页。好,然后呢这首页这块内容呢,我稍微改一下啊,我把 home 这块拿过来,这里边东西我就不要了啊,在这呢,我做一个事情啊,就是来请求一下接口,那我在这呢提前写好了一个接口,大家看一下,就在这个地方, 我们启用这个接口,然后把这个数据呢旋到页面上,那在这呢我们需要引入那个 excels 啊,提前封装了一下子,我找一下是在,嗯,点点刚出去吧。 啊,这个地方是 prom, 这有一个名称,我先看下路径啊。第二,刚出去找到 a p i 下的 a, 不是 a p i。 哦,我这个文件没有放进去,我把这个文件放进去啊,放到我这 a p m 下。 好,到这呢咱们引入一下, ok, 然后这个文件里边呢有一个 door for excels 啊,这是我们请求接口用来用的一个东西。 好,然后呢在这呢,我们就在 ct 中呢发送一个请求啊,把这个拿过来啊,然后呢这个地方的一个 u r l, 呃,就是我们的接口,那个地址看一下啊,就这个。好,我们请求一下。 好,这有个脚蹬 i s console log, 咱们看一下这个接口,它能拿到哈,来到这刷新一下, 嗯,这报了一个错, o b g is nota 方审,嗯?什么意思?类型错误。嗯,我看一下 啊,是不是这个 dollar for excels 有问题,哦,不对,这个地方呢是有问题的啊,是因为我这儿呢首先要写一个,呃,比如说写 api 这个变量啊,这个地方你它是抛出来一个对象,所以说我们这一地方得 request 点儿 好,这样的话呢,我们就拿到数据了,然后呢,呃, i e s 点 date 啊,这儿有个 list, 我们把这个数组给它变取出来。好,先看一下这个数组哈, ok, 数组里边呢,有些内容我们把它渲染页面上啊,具体我们要做什么事呢?大家看到哈,我这给大家画一个图,现在呢,我不是拿到一组数据吗?对吧?这是首页拿到一组数据,然后分别把他们渲染到这个页面上,然后点击某一个,比如点击第一个,第二个,第三个,第四个。也罢啊,反正呢都会进入到一个详 情义,哎,比如说我点击的是 g s 课程,那么这儿呢就展示 g s 课程的内容啊,如果说点的是这个 t s, 那展示出 t s 的内容,哎,就这个意思啊,咱们先把这个事呢先做了啊,那到这个地方呢,我们就需要把这个数据整体给它渲染一下。 好,它是一个竖图,那到这呢,我们就写一个 d 对象。好,上面呢,我们走一个 u l u l, 然后再往下走一个 l i。 好,微钢号。 嗯,那这就是 item, 进好 k 呢,就是 item 的 id 啊,到这呢我们就 item 的内容应该是啊,看 n a k 对不对啊?啊,对啊,好,那现在呢,就在我页面中呢,把这个 g s 课程呀, t s 课程呀, view 课程呀全部选到页面上, 然后同时我点击每一个,他可以跳转到他的详情页。那我在这地方呢,去创建一个详情页啊,创建一个这样的 vivo 文件,比如说我教他 detail 吧, 啊,然后这呢写一下,这是详情页, 哎,详情页。嗨,那就这样吧,详情就详情吧,管他呢,反正人家想请是吧?好,然后呢,这呢,咱配一下他的一个路由哈,那当然,我这呢采用懒不懒加载,这都无所谓了。那这我就叫 d t l, 哎,怎么抵放呢? d t l 啊? d t r。 ok, 那就叫几七二点六了。行,那这我们详情页,然后呢,我点击它以后呢,就会跳转到 in 的这个详情页,对吧?那这样呢,我们加一个试卷吧, 加一个 click top 技巧,或者咱们叫 go 技巧,是吧?进入到详情页。 好,那我们点击它以后就需要 this 点入着点故事啊,进入到杠 d q 好了,我们来试一下啊,那现在呢?我点击走,哎,进到详情页,对吧?返,返回过去点一下,走啊,反正呢每个都可以进去, ok, 行,那现在呢,就有个问题啊,比如说我点击了 ts 也好,点击了 gs 也好,还是点 vivo 课程也好,那我进入到了详情页, 那么这个详情页是不是要请求数据啊?因为我点击了 g s 课,那么你这这个详情展示 g s 课程对应的,比如说封面图,大家可以想象成就。是啊,我们购物网站,比如京东,淘宝这样一些购物平台,我点击一双鞋进去就是鞋的详情,对吧?我点裤子进去就裤子详情, 我点个什么电脑乱七八糟东西进去以后呢,就是对应的详情吗?那所以说呢,现在做事情是点一下,点一下,那我不仅要跳转,我还要做一个事情就是,呃,可能会把这个东西的 id 给传过去,那这是有一个 id 号,大家可以看一下啊, 对吧?我要把 id 号呢给他传过去啊,所以说呢,我们在这儿可能要传一个 item 的 id 啊,然后呢,再这样接收到这个 id, 然后这儿呢给他传过去, 通过我们的 url 给它传吧 query, 然后这儿 id, ok, 那现在大家再来看,你看,我点一下上面有 id 三,然后点一下上面有 id 四,那进入到了这个页面就详情页,我需要把那 id 呢给他拿到啊,那到这我们就可以通过任意东西吧,比如说我们就通过 pretty 的拿法啊,拿到这个类似点 root, 点 carry, 点 id 啊,咱们看一下能不能拿到啊,点一下,你看二,对吧?好,点一下大家会发现什么问题? 这个地方的五这段还是二,为啥呀?因为缓存了呀,这个缓存的好处是什么呢?大家可以试想一个问题啊,就比如说我这个用户啊,这个用户 在首页点击 g s 课,那进入到了这个页面,是 g s 课程的详情,对不对?好,那我如果剪 t s, 那么进去是不是 t s 详情啊? 但是呢,用户有一个这样的问题啊,就是我点 g s 进去以后,你请求,对吧?因为你看啊,你首页请求一次,你点击首页的 g s 进入到详情页,这,这也要请求一次这两次了吧,那用户如果点错了或者干嘛返回到商业了, 返回商业以后呢?他又点,接着进去了,你又请求一次,他每次进去,返回,进去,返回,注意点都是同一个,你每次要请求, 那么如果说同一个就没必要请求了,咱们缓存下来不就可以了吗?对吧?你因为请求次数越多,是不是你这个浪费的速度会跟后端那边你不断请求他,那这样的话呢,你俩通信这个时间就会加长吧, 所以说呢,我为了解决这个性能问题,我们只需要把对的页面,他可能不断去进入到这详情页,我把它缓存下来就可以了,对吧?那么现在他已经缓存了,大家可以看 我点击这二,你看我点击这地方五,他永远是二,为啥呀?可不嘛,这个烟也被缓存了,这个生命周期他不会执行啊。那昨天我们说过了,第二次或第 n 次进入,他只会执行这个生命周期啊,并不会执行那个, 呃,比如说 crazy 了啊,所以说呢,我们就需要把这家伙呢给他加上啊,他会直接这里边东西。好,我们可以再让他每次 ctrl 一下,比如 ctrl 一个一吧,然后每次 ctrl 一下,小心 好看啊,进去一侧执行一个二,一回去啊,再来你看又执行一个一,对吧,但是这个二这个地方就不执行了,是不是?也就说每次你只要把这个放到这, 好,你再看回去,大家看到啊,点一下执行个三,点一下执行个五,再点,你看对吧?他是这个什么六七,他是执行的,但这些就 不执行了,那么我就好办了,只要判断你这个 id 值,不想懂怎么怎么样,对不对?那这样我们做的这个步骤呢,肯定是这么来做的,大家看着啊,我们上来呢,是取到这个 id 了,对吧?那我们可能会发送一次请求,那我这呢先写一个请求啊,也是要把对应的这个内容拿过来,我们在这个详情页也要请求一下。 这是,呃 ur, 那就是 id 啊,然后需要给后端呢?呃,传据,传递这个一定的数据,我看一下传什么啊?呃,传的是 id 啊,传的是 id。 好,那我们就把 id 给它传过去。 ok, 到这 id 冒号 把这个给他传过去。 this 啊,这个没有写方法。 get 这个 好,把这个 id 给它传过去。然后呢,我进入到这页面,我上来就调用你一次啊,上来我就调用你一次,或者说呢,直接在它里边去调用都可以。那上来我在 protet 中调用一次,那调用完以后呢?它会返回一个数据,我们这有个 r a s, 我把 r a s 数据打印一下, 比如说我现在点击的是,呃,这个 view 课程吧。走,那这儿拿到数据呢?肯定是 view 课程,我把这个文字呢放到这个页面上,好吧,那就是它的 data 的 list 点儿等于 啊,我把这个数据呢放到页面上, 这是详情页,然后后面拼接一个它。好,那么现在呢?有意思说,刷新一下啊,大家看着我点一下项目课程,哎,这是项目课程,对吧?但是你注意,你返回,你再进入 react 课程,它变吗?它不变。为什么呢?是因为你这个请求它根本没有执行, 是吧?但是你不能说每次都执行吧?那什么样时候执行,什么是不执行的啊?就是如果说我第一次点击 g s 进去, 是 gs, 对吧?我再点一下 gs 进去还是 gs, 如果说我反复不断点击的,也说我上一次点击的和你本次点击的是同一个,都是 gs 课程,那这个页面就不需要再次发送请求了。 那如果点击不是同一个,我们再发送气球,对吧?就这么一个意思,那这样话呢,从而我们就提升我的性能了,对吧?不该加载的不加载,该加载的 加载呗。哎,就这意思。那怎么样判断呢?那怎么样判断我这个地方呃是不是同一个呢啊?有很多的方式,比如判断他路由啊,对吧?路由你修改了或者判断我的数据啊都是可以。这个呢就由大家来啊,比如说 我们现在呢,呃从这个地方点过去,我们知道有 id 吗?对不对?那我可以把你 id 呢给你记录一下啊,就是我这呢可能有一个 id 值,比如它为零啊,默认为零我们可以记录一下。 那到这个地方我们记不下 id, 那就是直接复制也可以,那么你 console a log 弹一下就把这 id 值给它复上去。就是 list 点 id 等于它 好,然后这儿呢放这些 id 就好了。然后呢这些 id 呢我们就记录上了。然后呢你在这里 地方啊我们在这地方可以打印两个东西,一个是 this 点 id, 一个是当前的 id。 this 点 id 呢是我之前记录好的。这个呢是实时的 id 啊,我们可以看一下啊。 返回,哎,我们重新进 logo hose 八零八零,大家看着我点下项目课程,哎这两个都是四对吧?好,我返回过去然后点下 rex, 你看之前是四,现在是五,他俩不相等我们就再次发起求啊,如果相等就不用发送了,所以说我们只需要判断,如果说这俩怎么样 不等了,对吧?那我们再次发送这个请求就对了。那我们可以看一下这儿的一个 network。 好,大家看着啊。 哎我把这稍微清一下啊,大家看这个地方。我现在呢返回到我的这个首页。好, 翻到我的首页以后呢?呃他已经请求了一次,我给大家看一下啊,要不然咱们这样切换到这边 啊。刷新一下,大家看,他已经请求了一次啊,就在这地方已经请求了一次,我把它清空,好,注意看,我现在呢,从首页点击到 g s 课程, ok, 请求了一次,反应过去,好,我再点一下 g s 课程,大家注意看,是不是没有请求啊, 因为它 id 相同嘛。但是我再点一下 t s 课呢,哎,这地方还是 g s 课的吗?我看一下啊, t s 课哦,并没有去更改那个数据哈 嗯,并没有更改数据,咱们看这个地方他有没有执行,如果他俩不相等,咱们打印一串一。 呃,回去点点 点 a c 等我们看这两个值,这两个值还是不对的,就是要判断他俩的怎么回事呢? 嗯,这是一和一,没错,这是一和三,那一和三是不相等的呀,他俩非等我们再次发送请求哦,这个地方啊,这个地方,这个 id 应该放的是这个 id 啊,实是这个 id。 好,我们再来,小心来看网络哈。那现在呢?我点击 g s, ok, 返回过去再点,你看不会再次发送新的请求,对吧?然后呢,我点击一下 t s 走,你看 是不是又发送请求啊?哎,让反过去再点 ts, 他是,哎,这个 ts 再点,再点啊,那这这个还是有问题 这个 id 值是有问题的啊,那我们这儿再把 id 值重新给它复一下就好了 啊。重新给它复一下,然后走这个 id 就行。重新给它复下值啊,重新给它复下值,那这样就 ok 了,我们再来刷新。 好,点击 g s 课,走,只有一个请求,走,哎,不会发送新的请求,当我们点击了 t s 走,发送一次新的请求,反应过去再点,你看就不会再走新的了,对吧?好,点击不同的它就会发送一次,不同的就会发送一次同的,哎,同样的就不会再次发送了,这就是它的使用场景 哎,所以说它使用场景呢,就是来缓存组建的,缓存组建提升项目的性能 啊,具体诶,性能哈。啊,具体的一个实现呢啊,比如首页数据啊,首页进入到详情页, 进了详情页啊,如果在首页啊,如果用户啊在首页点,每次点击 都是相同的, 都是相同的,那么详情页就没必要请求 n 次了啊,直接缓存缓存起来就可以了啊。当然啊,如果 点击的不是同一个,那么就这个请求直接请求是吧,这就是他的一个使用场景啊,不管怎么样他是提升我们的性能的,减少发送请求的数量,那就是提升性能。 哎,这就是 keeper life 的它一个使用的场景啊。那么我们在面试的时候呢,不仅要给面试官介绍清楚他是什么,还要告诉他他能干嘛,他的功能是什么,他在什么地方用啊?一定要说场景, 你场景说的越多,就会让你的面试几率呢成功率越高。还有比如上节课我们说到生命周期,那么大家可以说一下 crazy 的它的使用场景 来,某些你没有用过你就可以不说,因为不见得所有东西我们都用过,对吧?比如说 crit 的它的场景它在什么上用吗?啊?别人面试官问你在哪个,什么时候用过这个生命周期啊?啊,我在发送请求是用 crit 的对吧? 忘记的用插件说,是吧?你就可以完全这么去说了啊。那有关于这一课内容,咱们先说到这,然后我给大家多一个提醒,就是大家一定要说场景,场景啊。行,那本节课呢?咱们就先说这么多。

面跳转,这样页,页面在跳转的时候跳转,是不是首页是不是不见了?你说首页是会被销毁还是被缓存起来啊?这个时候缓存起来是吧?来我们来看一下,我们来看一下 这里面首页,首页的话是我们的一个 home, 是不是 home 的一个结构?是这里是吧?然后我们写一下它的那一些生命周期,来看一下 grati。 grati 是什么? 这个时候可以,可以做什么东西?可以访问我们的一个 data 定义的属性和我们的 mvt, h, o, d, s 这一些属性是吧?可是模,呃,那一个是模板还没有变异,是不是这个时候还没有变异? creative, 然后还有一个,我写一个 d, e, d, s, t, r, o, y 一一一串,这一个是什么? 销毁了,这个时候已经销毁了。我,我写那个 b forty 出来吧,比比 forty, 出来这一个吧,我在这里输出一下,让大家看一下。 比 body 穿,然后上面这一个 creat 的生命周期函数里面是不是应该我们一开始打开的时候,他就会调用这一个?来 首页完,回到首页,回到首页,然后在这里按回声,是不是就调用我们的 q a 啊?当我点击粉底液,点击 他调用了什么东西啊?对,你看一下是在哪里输出的?是在我们的首页那里输出, 也就是说我们首页是被什么销毁掉了?销毁掉了,他并没有缓存起来啊,他并没有缓存起来,也就是说这个组件并没有缓存起来的,且且也也有一个方法,怎么看他有没有缓存起来?你这里简单的写一下那个圈 chat box 在这里 ch, e, c, k, 呃, chat box 这个是什么? 是不是这一个框?这个小框是吧?我这样勾选的话,如果他真的缓存起来,是不是现在会保保持我那一个状态啊?我点分类页,然后再点回来,有没有啊?没有,并且你看一下他的一个生命周期的函数里面执行了什么东西啊? detry, 然后我再点回去的时候是不是重新捆一下?就是说你这个页面的数据是重新渲染出来的,而不是保持之前的,如果要保持原来的,那要那怎么怎么样? 就用用我们刚刚说的这个 keep a lie。 keep a lie, 你说加在哪个位置? keep a lie, 首先要明确了我们这个界面这个位置是用什么加载出来的? 还记得我们陆游上面的那个组件叫什么名字吗? what will? 是不是?所以你的这一个是不是应该包住他? q, 那应该是要包住这一个组件,是不是相当于把这个组件给缓存起来是吧?也就是说 我们去找找他的那一个号挂载的那个无头有,是不是应该怎么看?在路由配置里面你可以先看路由配置,路由配置是不是先找号码找号, 上一集是不是找到 index 啊? index 里面肯定有一个 gotbud, 是吧?然后就去找 index, index 在哪里啊?在这个位置,他在这个上面是不是有一个 gtrl 啊?就在这个位置。 say you keep a lie? say, 包住他,包住他,不要说话, 现在是不是无头 vivo 被 keeperline 这个标签给包住了,到时候他是不是缓存无头 vivo 里面的东西啊?应该是这样子啊,然后我们重新来刷新,这是直行推啊,没变是不是?然后当我点,当我勾选一下这一个, 然后点分类页有没有执行那个 detry 那个方法,比如说 detry 的方法是没有的,现在我们再点回去,点回去, 你看这一个他是一直在勾选状态啊,其实他并没有被销毁,而是缓存起来啊, 只是把整个页面的一个状态给缓存起来。到时候你那个 uil 要加载对应的那一个页面的时候,他直接在内存里面给你加进来,就是把那个原来的状态给加回来,也就是他他可以缓存我们的一个页面的一个数据, 然后他这个好像我有一些页面是不需要的吗?好像什么分类页啊,购物车这一些是不是不需要的?是不需要返程的是不是?但是你现在这样子写,是不是把所有页面都返 起来啊?只要通过这个不特别有加载的,是不是都会缓存起来啊?那这里有什么方法呢?它上面有两个属性,一个是 ink, 它字不串或者是正则表达式,只要匹配到组件都会被缓存起来。 然后还有一另外一个叫做 it's cool, 应该这一个不不陌生吧?就上面那一个是包含的意思啊,然后下面这一个就是不包含,就说只要你这一个匹配上的那一些组件都不会被缓存, 不会被缓存。好像我们现在只要缓存一个组件叫做 in 库, i n c, l, u d e, 是吧? in include, 这里的话,它上面是可以传入一个数组,传入一个数组,然后数组里面的话我先写啊,好像我现在要存储的就是这个 home 吧? home, 然后我写什么?写一个 home, 这也不是乱写啊,我等一下告诉你为什么写一个 home? 是不是前面要加一个冒号,后面才是一个真正的数字啊?不然的话他就是一个珠串,是吧? 然后怎么验证其他呢?其他我们是不是可以在后面这个位置复制那一些生命周期函数过去啊?好像我的那一页面,这个我的页面复制过来,我的那个页面是不是有啊?然后我重新刷新一下,然后点击我的界面,是不是会创 创建啊?然后再点击首页,他这里是不是缓存啊?他默认默认是会缓存啊,如果我们 这里面再加另外一个东西,另外一个东西叫做什么? e e s c l u d e is cool, 然后我们这里写一个 me, 看一下是不是 me 啊?这一个,哦,这里没有, 正常来说,这里应该是有。我这样子写, 我重新刷新,然后这里面我点这一个,呃,我的界面啊,我的界面是不是有 creat 啊?然后再点那个首页,它是不是缓 存呢?哎?怎么缓存呢?不对呀,这一个,看一下这个这样子吧,我先传这一个 input, 我先传一个名字吧,只缓存这一个 home 的, 把这一个 me 给传进去。 it's cool, 我发现了我写在哪里了?有没有同学看到我怎么写?在我的 view 上面,说应该是写在 kill light 上面,说怎么一直写在这个位置, 这里传进去是一个数组,然后这里面我们把刚刚的那部分改一下,改成是这样子的,然后现在先刷新一下,然后点过去我的界面,是不是 点过去的时候,那一个首页是不是没有触发那个 before detry 那个方法就被销毁的?那个方法是不是没有啊?是完整起来,然后点击现在是不是到我的我的那里,是不是创建出来,然后再点回首页, 他其实是会触发我的那一个销毁,是不是因为我这一边呃,加了一个这样子的一个属性在 keeperline 上面啊?刚刚刚刚加错位置了,在加在那个屋头 q 上面。这个不对的,应该是加在我们的一个 keeperline 上面的一个属性,叫做 is cool, 就说不包含我的这个界面。这个名字怎么来的呢?其实是我们组件上面的这个内属性,用来标记这个组件叫什么名, 当前你这个组件究竟叫什么名字,且看这一个内,他到时候缓存就会根据你上面的几个。呃,属性,好像我们现在这一个 index 上面,他会看这两个属性,好像说你这个名库是不是现在缓存的是后面的那个页面啊? 然后不缓存什么页面啊? me 的那个页面是不是 me 的那个页面?所以现在 me 的那个是不是一一跳过去别的页面是未消费啊?正常情况是会这样子啊,如果我们不写呢?如果不写只有一个,他这里只有一个 include home, 然后我们重新来刷新,然后点击我的,是不是很正常这一个,然后再点击首页,你看这里面他依然是 是没有被缓存的,是不是因为我们加了这个?加了这个 input? input 意思是什么? in cool 的话, i s l u d e in cool 的意思就是说哪些?呃,组件需要缓存, 也就是说其他没有写在这一个 income 属性里面的是不是不会被缓存啊?其他 不在这个属性上面的界面的主界网不会被缓存,其实它有这一个功能,就是说你写在这个上面是不是被缓存?但是如果你 啥都不写的话,他是把所有都缓存,是不是默认是不是把所有都缓存啊?默认是把所有都缓存,好像我现在点我的,然后再点回首页,是不是没有触发那个 distrac 的方法? 但是如果你专门加了一个,专门加了这样子一个属性,就是说表明这个不特别,里面如果是家长二横组件的会不会缓存?其他组件会不会不会缓存? 那如果我这里换成是那一个 is cool e s c l u b 如果换成是这样子的, 我来看一下。首先刷新一下,然后点我的是不是触发了它里面的那一个 beautiful 比赛方法?因为我们的这一个 home 是不是 不会被缓存啊?不会被缓存。然后我们再点点黑 i 首页,你看这个我的页面有没有触发那个 b forty 出来的东西啊? 没有的,也就是说你只写一个属性,只写了这个属性的话,你这里只是说排除了这个页面而已,其他页面他默认是被缓存的,这也要注意,这也要有一个注意的点。然后我们。

轻量级高可用解决方案 keep live 入门介绍 hello, 大家好,我是架构师奶爸。 keep live 是 linux 下一个轻量级高可用解决方案。高可用 high availability, 简称 h a, 就是主机的溶于和接管 基本功能,心跳检测资源接管检测集群中的服务在集群节点转移共享 ip 地址的所有者。 keeplif 主要是通过路由勇于来实现高可用功能。 配置简单,只需要一个配置文件即可完成。 keep live 起初视为 lvs linux virtual server 虚拟的服务器集群,附在均衡系统设计的,专门用来监控集群系统中各个服务节点的状态。它根据 t c p i p 参考模型的第三、第四层、第五层交换机制 检测每个服务节点的状态。如果某个服务器节点出现异常或者工作出现故障, keep a life 将检测到并将出现的故障的服务器节点从集群系统中剔除。这些工作全部是自动完成的, 不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。后来 keep alive 又加入了 vrrp 的功能, vrrp retro router redundancy protocol。 虚拟路由勇于协议 出现的目的是解决静态路由出现的单点故障问题,通过 v r r p 可以实现网络不间断稳定运行。因此 keepover v 的一方面具有服务器状态检测和故障隔离功能,另外一方面也有 h a cluster 功能。 想了解更多 java 架构师岗位知识,请关注我,架构师奶爸共同筑基 java 架构师。

好的,我们继续来看生命周期的面试题,然后这节课呢,我要讲的题号呢是一点五和一点七,那这两个题呢是有关联性的,所以说我就把它一起去讲了哈, 那首先呢,我们先来看一下这个地方的一个一点七吧,他说如果你加入了我们 view 中,它系统自带这个 keep 这个组件会执行哪些什么周期? 那么其实呢,上一课呢,我们讲过了,这个 vivo 二呀,它系统自带的是有八个什么周期的,那么如果说一旦 我们使用了 keep 这个组件,它就会额外的新增两个生命周期。好,我把这两个生命周期呢给大家先放到这哈,这是第一个就是加入它会新增的,这是第二个加入它会新增的, 那这个生命周期呢,其实呢就是进入到这个组件的,他叫被激活时吗?然后第二个呢,其实就是销毁的,就是离开这个组件会额外的新增两个生命周期。 好,那么正好呢,在关于组建这块啊,有他的一个相关内容,那我们这节课呢,需要说的就是,首先这个内置组建他是干嘛的,然后其次呢,我们再来看加入他会执行哪些等等一些这样一些内容啊。好的,那么首先呢,我们就回到我们代码里边, 那首先呢,先来介绍一下这个 keep 这个组件是干嘛的,它其实呢是用来缓存组件的啊, 我们这呢给他标记一下啊,是用来是什么啊?缓存当前 组间的啊,用来缓存的。好的,下面呢,我给大家举一个场景啊 啊,就可以看一下子我们这个项目吧,拿项目来说吧,就懒得画图了,咱们就拿一个项目来说就可以了。好,那我们还是切换到这个移动端吧。哈, 大家看啊,当我点击某一门课程的时候,会进入到一个页面,而这个页面呢,大家会发现他们的布局呢是相同的啊,比如说这有一个图片,然后这呢是有一大堆的文字,对吧? 那然后呢我们再来看这门课程呢,他也是一样啊,有这个图片加文字,只不过呢这个图片和文字内容呢,他可能不相同啊,不管了,他是进入到同一个组件,这块是我们要 知道的。 ok, 那么数据呢,是来自于接口的,只要我进入到这个组件或者进入到页面,对吧?把数据呢啊,根据你的 id 不同渲染不同的数据就可以了。不管怎么样,他进入的这个页面是一个, 那么就会出现这么一种情况,我进入到页面请求进入到页面请求进入到页面请求。没错,那各位如果说我 当前点击的这课程呢,是叫面试题啊,或者说是叫算法吧。哈,那我再点击还叫算法啊,再点击还叫算法?那请问我点击的是同一门课程,他每次进入到这个详情页都要请求吗? 啊,原本你可以这么去做,没有问题,但是呢我还可以采用另外一种做法啊,就是说如果我当前点击的是这个 算法,然后我返回,我再点击算法,那进入到是相同的一个,那这个时候呢?啊,我们判断他的 id 值相同的,那这个时候呢,我就不用去请求了,用之前的缓存的组件就可以了啊,这就是 keep 它的一个使用场景, 所以说呢,它是用来缓存这个组件的。好的,那我们知道这个情况呢,我们下面呢去试验一下啊,给这个 rooter view 加一个 keeper 啊,让我们的项目中的所有组件啊都缓存下来哈。 好,我们加一下啊。嗯,来进入到我们的项目里边啊,现在呢,我们这个组件呢就都被缓存了。那回到我们这个面试题里边,他说加入 keep 会执行哪些审美周期?那我们就先来说一下这么 一个情况啊,就是如果啊,如果使用了 keep 这个组件 啊,当前的组件会额外啊增加两个生命周期, 也就说系统八再加一个二啊,一共十个了啊,会额外新的这两个。好,然后呢,现在我把这些生命周期啊都给他放到我们这个关于我们的这个页面中吧。 好,上节课呢,我们也讲过了,说一旦进入到这个页面或者进入到这个组件会执行 哪些生命周期啊?前面的四个对不对?好,一二三四啊,那我们这样呢,知道前四个,我把每一个呢先给他都 com 搜出来吧。虽然说我们知道一旦进入到这个页面呢会执行前四个 啊,那我们这呢也是要把所有的都给它打印出来,方便大家呢去观看啊。 好,我把这些呢都放过来。 ok 啦,行,然后呢,我把这两个呢加入 keep 的啊,再给它也加过来。 好的,我把这两个给他打印一下。那如果加入 keep, 当我第一次进入到这个组件的时候,它会执行几个呢?一二,哎,这怎么有 console log 呢 啊,我第一次进入的时候啊,一二三四五,好,执行五个。好,我们这呢写一下,如果啊,当前组建啊,加入了 keep 啊,第一次进入这个组件会执行五个生命周期, 分别就是前四个系统自带的啊,然后呢再加上 keep 这一个好,然后其四 呢?你还要关注的是第二次和第 n 次进入到这个页面好,或者这个组件会执行哪个生命六七啊,来我们看一下啊, 我第一次进入,到时候呢会执行这五个,我切回来啊,然后呢我再进去,大家会发现他只执行一个了。好吧,那我们这个题呢要这么回答,如果 当前这个组件啊,加入了 tip 啊,第二次和第 n 次只会执行一个啊, 只会执行一个生命周期,好吧,那当然,如果没有加入呢?如果没有加入 tiff, 第二次和第三次会执行哪些呢啊,会执行的是永远的前四个。这块呢,我就不给大家演示了啊,放心,已经这样了,大家可以试一试啊,如果没有加入哈, 好,所以说呢,这个时候呢,我们这面试题该怎么样去回答呢?那他如果问到 keep 有没有用过啊,用过就是缓成组件的啊,他问你,哎,如果他要呃用的话,这个生命周期这会会发生什么样变化呢?比如他会问你啊,第一次啊,这个进入组件 会执行哪些审美周期?你可以可以给大家这么说,会执行的审美周期呢啊,分别呢?有这么四个啊,如果,当然你这个组件加入 keep 会只有五个,那么第二次或第 n 次如果加入了 keep, 会执行 keep 那一个,如果没有 加入呢,会执行四个,那我们的 view 的生命周期呢,有十个,分别为系统自带的八个和 keep 这个组件一旦用到啊,额外再增加两个,这就是我们的生命周期,等等一个完整的回答哈。 好,这就是关于生命周期的这些内容啊,加入 keep 和不加入 keep 的情况。 ok, 好,行,那么下节课呢,我们会讲到了 啊,你在什么情况下,用过哪些什么周期,说一说使用场景哈。行,那么这节课呢,有关于我们讲到 keep 这块的各种各样情况就给大家呢,先说到这里。

ok love you k k pass love 其实更多是一个谐音吧,因为我的这场音乐会的英文叫 kippar 李健哈,中文叫不只是李健。所以我共享的是让我们永远 kippy, 永远关注现场, 关注演唱会。因为一个歌手最有魅力水平还在于现场那个魅力角,这都是最本真,甚至说最奢侈,完全不同于死地,更不同于我 真正的音乐是活灵活现的 nice 可以用这样一首歌曲 music plus i love 关注现场关注演唱会 啊啊 啊啊。

if lusca kill the nabi tank i'll be fine。