网站首页 > 博客文章 正文
数组要如何更新?
聊一个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点半可以到直播间里面现场点播。
猜你喜欢
- 2024-09-18 el-table 行列合并(el table 合并单元格内容)
- 2024-09-18 JS filter、map、reduce等十三种遍历数组方法详细总结??
- 2024-09-18 推荐7个你应该使用的独立Vue组件(vue独立开发)
- 2024-09-18 vue如何监听数组变化?(vue2中如何监听数组)
- 2024-09-18 vue中mixin的使用方法(vue mixins使用)
- 2024-09-18 vue3与vue2的比较(vue2和vue3的底层原理)
- 2024-09-18 vue中怎么向数组中插入,修改,删除元素
- 2024-09-18 vue常见面试题(vue常见面试题及答案2021)
- 2024-09-18 vue 如何计算数组求和?(vue computed数组)
- 2024-09-18 Typescript基础快速入门-7 数组array
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)