专业的编程技术博客社区

网站首页 > 博客文章 正文

vue的数组的内存结构(vue数组清理方法)

baijin 2024-09-18 12:12:32 博客文章 7 ℃ 0 评论

数组要如何更新?

聊一个8股题,数组是如何更新的?或者关于数组如何要去做优化,或者组件里面的一些封装小技巧等等。但是这个地方一定得提醒一下,VIVO2和VIVO3的优化策略肯定是不一样的,它就像HTP1.1和HTP2的优化方案一样。有时候在1.1里面好用的方案到2里面可能是互相优化或者说是完全没有用的。

不过只要聊到数组,大概率聊的就是VR里的内容。所以这几期就基于这个角度来跟大家随便聊一下。不过在那之前得先去聊一下对于数组的响应式的结构,内存中的内容究竟是什么样子的。

先看一下例子,比如这里面有一个users对象,它是一个数组,这个时候它的内存结构是什么样子的?因为都知道对于view的显示原理来讲就是deeper or circle还有watcher这三个内容的创建。所以如果能够把内存结构给它提出来,肯定是有助于去理解的,包括跟面试官去提这么个鬼东西也是没有问题的。

先去打开大demo,然后把例子刷新一下,访问内存。

·第一个,先去看一下watcher包含多少个?毫无疑问watcher只有一个,就是当前跟组件的创建的watcher,有人是产生了变化以后watcher就会进行一次调用。

·接下来offer strub,over Server应该也能看到,它应该是两个,一个是data本身,另外一个指的是users。我把users删了,over Server只有一个,就是把data删了,它也是只有这一个。所以可以通过APP去找到,APP点到了data,这不是over Server吗?写在脸上的。

·还有一个APP,点dot data里面的users,users也会产生一个upserb,这两个对象。

·接下来它包含了几个地谱?它包含了5个地谱,这5个地谱分别是属性的渲染,通过APP点刀拉属性,属性里面会有一个b包,b包里面会产生依赖性。当对上一集所返回过来的属性产生依赖的时候,这里面的属性会丢在里面。

·包括license,license也是一样的,这里面会产生两个小b包,这些小b包里面就会创建d谱。

·接下来还有这两个upserb,创建的两个upserb里面也会包含地谱,可以看一下,upserb里面包含了地谱,任何一个officer里面都包含了地谱,所以这里面又有两个officer所产生的地谱。

·还有一个是哪个?URS这个k,它所对应的k属性也包含了一个地步。注意,作为一个对象来讲,这两个是不一样的,一个是补偿操作,它所对应的是URS对象,数据的结构产生了变化,会进行一次通知。而user指的是认识点user产生了变化,会进行的一次通知。

比如this点user等于一,它的依赖指的是这里边b包里面的地铺,请进行通知。但是这边的操作类似于this点user点push,当然如果是一个对象,就应该是用Dollar site,用Dollar site也是触发的,所以这里是5个deep。

如果有人感兴趣,可以直接进去看一下。

比如通过get object owner获取它的具体的描述,在这里面打上一个断点,然后APP点获取到属性,这里可以看到它的地谱ID是0。再去看license,放心,一定是可以找到的,当然license。

这里面的地谱获取到地谱是一,把这个地方标记一下,ACENSE获取到的ID是一,通过属性,所有的属性获取到的是0。通过data,这个就简单一些,APP点data,data点observer,这里获取到的ID就是2。

再获取到data里面的user,APP点dollar data,点users,里面的值过一下代码,d谱是4,还有一个3,去哪里看?USK,把这个打开,去找一下ID3,它应该是直接点回车就可以了。

进来可以看到地图指的就是ID为3,通过users获取到的内容,直接把ID为3写进去就可以了。这里面就是这5个ID。

都知道deep是真正的依赖收集的体系,这个地方也就意味着使用APP点dollar users,让第一个属性产生了变化,这个时候就意味着这里根本不会去进行触发,因为没有依赖,没有人去依赖它,这个是通过地谱去notified,去通过地谱来去对外通知的,没有这个东西。

如果想去修改,只有一种方式,就是去修改users这个大对象,通过它来去修改,所以这个地方改成r三三,这里就会产生一个变化,它是users,让users产生变化就可以了。

接下来把这个结构进行调整,把它灭掉,把对象的结构进行展开。考虑一下当它为对象以后,现在整个页面当中内存的结构是什么样子的?刷新一下,把内存打开,不用去看watch还有OPPO sorbo了,核心还是看地图。

这个时候地图有8个,多了三个,多了是哪三个?首先前面五个还是有的,毫无疑问,不用去扯这么多,前面五个肯定是有的。接下来聊的就是后面三个,多了哪三个?实际上多的就是零一二这三个属性,每一个k都会产生d谱。

来看一下它的具体的内容,APP点users,它是oboes二波的属性,它有012,点一下以后它是房企的属性,点一下以后才会去动态的去获取它的内容。所以这里把代理这个地方打开,看一下APP点USBO内容。

在获取到里面的内容的时候,因为是千套的,所以这个三指的依然是USB里面的内容,USB里面获取到的下一个内容,通过点获取到下一个内容,这个值就是第一个0里面所对应的Y6,它的d谱指的就是ID为5的内容。

同样的快速的过一下,让我的一过一下,这里首先是Dayton数据,d谱是6,Y6是指的是2,然后是7,它的第个d谱就是7。这意味着什么?这意味着当我让我的0号元素产生了变化以后,这里是可以看到它会对整个全局产生一个依赖的,它的依赖是被收集上去的。

所以现在让我APPa的属性产生变化的时候,动态的变化的时候,它是可以立刻进行一次通知和更新的。为什么会这样?对于一个对象而言,结构可以保证它的固定性,这个是理论上,如果做元素句处理肯定不是这样的。

理论上左侧的k促实化好了以后,右侧直接去修改它的值就可以了,所以它是一个值的改变,它是一个复制的过程。但是对于一个数组而言,大概率是要去改变它整个宿主的结构。当然这个具体的例子下一期再详细聊一下。

最后打一波小广告,关于前段面试的时候会遇见哪些8股题,面试官会如何去技术深挖,以及找工作的时候要如何去复习,可以参考一下小橱窗,里面既是教材也是答案。如果真的还有什么不会,晚上10点半可以到直播间里面现场点播。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表