范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

关于vue源码flushSchedulerQueue函数queue。sort使用疑惑

  先看源码:function flushSchedulerQueue () {   currentFlushTimestamp = getNow()   flushing = true   let watcher, id    // Sort queue before flush.   // This ensures that:   // 1. Components are updated from parent to child. (because parent is always   //    created before the child)   // 2. A component"s user watchers are run before its render watcher (because   //    user watchers are created before the render watcher)   // 3. If a component is destroyed during a parent component"s watcher run,   //    its watchers can be skipped.   queue.sort((a, b) => a.id - b.id)    // do not cache length because more watchers might be pushed   // as we run existing watchers   for (index = 0; index < queue.length; index++) {     watcher = queue[index]     if (watcher.before) {       watcher.before()     }     id = watcher.id     has[id] = null     watcher.run()     // in dev build, check and stop circular updates.     if (process.env.NODE_ENV !== "production" && has[id] != null) {       circular[id] = (circular[id] || 0) + 1       if (circular[id] > MAX_UPDATE_COUNT) {         warn(           "You may have an infinite update loop " + (             watcher.user               ? `in watcher with expression "${watcher.expression}"`               : `in a component render function.`           ),           watcher.vm         )         break       }     }   }
  这个方法主要是用来执行微任务后回调相关逻辑,queue里缓存了要等待更新的watcher列表,并且将queue按照从小到大进行排序。 queue.sort((a, b) => a.id - b.id)
  问题来了,为什么要对queue进行排序?
  搜索出来的结果基本上是从英文里翻译过来:组件的更新由父到子;因为父组件的创建过程是先于子的,所以 watcher 的创建也是先父后子,执行顺序也应该保持先父后子。 用户的自定义 watcher 要优先于渲染 watcher 执行;因为用户自定义 watcher 是在渲染 watcher 之前创建的。 如果一个组件在父组件的 watcher 执行期间被销毁,那么它对应的 watcher 执行都可以被跳过,所以父组件的 watcher 应该先执行。
  看到这样的回答,有点似懂非懂的感觉,果断用实例来验证下:                       
  断点queue.sort
  此时,queue里保存着子组件渲染watcher(称 s)和主渲染watcher(称 p),排序之后的顺序为:[p, s]
  其中s这个watcher运行之后,在run函数里边就断掉了!
  watcher源文件摘取代码:run () {   // 此时的active已经为false     if (this.active) {       const value = this.get()       if (         value !== this.value ||         // Deep watchers and watchers on Object/Arrays should fire even         // when the value is the same, because the value may         // have mutated.         isObject(value) ||         this.deep       ) {         // set new value         const oldValue = this.value         this.value = value         if (this.user) {           const info = `callback for watcher "${this.expression}"`           invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info)         } else {           this.cb.call(this.vm, value, oldValue)         }       }     }   }
  这个active其实是在主渲染watcher执行中被change掉 了,这样可以避免子组件的渲染watcher少执行很多代码啊,节省了很多的性能开销!
  以上是个人的一点见解,欢迎留言讨论,喜欢请记得关注哦!

手机拍照修图软件哪个好?在手机拍照修图软件要好用的,有很多软件,比如微商水印相机非常的高清,功能也特别多,它可以拒图,换背景等,效果很好。手机拍照修图我最常用的就是snapseed,操作简单,后期效果好!华为手机免费联网是真的吗?感谢您的阅读!我已经被我的父母,问过很多次。他们在一些短视频上看到所谓的华为手机免费连网,到底是不是真的?我必须要告诉大家,这些东西都是假的。天下没有免费的午餐,即使所谓的免费联网孕妇在孕期什么时候睡觉最好?孕妇在孕期什么时候睡觉最好?怀孕是一件非常辛苦的事情,对于孕妇来说,保持充足的睡眠,是至关重要的。一般来说,孕妇晚上89点上床是最理想的,然后早上78点起床,这时候空气清新,非常适如何在两三个月内从150斤减到135斤?谢邀,体重从150降到135,也就相当于降低体重的10,相对来说还是比较容易的。关键是提问者能不能坚持调节饮食和运动。首先计算一下自己身体每天最低基础代谢量,简单计算就行,每天摄入现在经常会有孩子自杀,为什么?现在孩子的自杀情况越来越多,我认为有三个原因1,小孩早熟,信息接受过度,容易受部分不好的信息所侵蚀。当今时代,接受信息太多容易,小孩早早地就能接触到手机,并通过手机获取各种不同的信职场上你做过哪些作死的事,但没有被开除?我是工人。某一天,有位师傅找我说厂里给某某,带坏分子冒。你给他凑点材料。我看着他心想,你们闹矛盾几十年了,没有材料凑,现在拿我当枪使,纯粹胡闹。没有想到几天过后,厂大书记到车间找我90版一百元值多少钱?1990年100元价格关于1990年100元值多少钱,我们可以从品相,号码和冠号上去判断。一。从品相上判断1990年100元值多少钱。全品相1980年100元市场价格大的在1500什么牌子的手机处理器比较好?骁龙麒麟联发科还是其他的?自第一款智能手机初代iPhone问世,手机处理器已经走过了10个年头的风风雨雨,主频也从最开始的的16MHz提升到如今的3GHz,目前市面上手机芯片除了几大巨头海思麒麟,高通骁龙,45岁的男士,适合戴什么样的手表?资深腕表爱好者,玩表自媒体人,我就是邹三山,致力于为你提供有态度,有深度,有温度的腕表服务帮助。更多手表知识请搜索邹三山的玩表秘术这本电子书。首选就是劳力士潜航者系列黑水鬼,不仅有割双眼皮需要住院吗?该注意什么?你好,双眼皮手术是不需要住院的,术后的双眼皮处会感到麻木没有知觉,还会感觉有点像肉条的形状。这种属于正常现象,不用过于担心。双眼皮手术尤其是全切双眼皮手术,术后有极少数的求美者可能事业单位可以异地调动吗?条件是什么?可以的,条件是你有才或有财。是金子在哪里都能被看到,因为你有刺眼的光芒,成事在天,谋事在人。路在人走,事在人为,业在人创。条件是有足够大的领导帮你运作可以,调入地单位主管部门和人社
狂飙大结局,几个警察角色的回顾追了大半个月的狂飙,今晚迎来大结局,追剧的兴致也渐渐冷却,回顾剧情,再到结局,不出意外的话,该抓抓该判判该下马的下马该回家的回家。该剧陪伴了我们大半个月,看着剧中人物的历程,人性的官方尤文中场麦肯尼租借加盟利兹联,含3450万欧买断条款直播吧1月31日讯官方消息,尤文中场麦肯尼租借加盟利兹联,租期至本赛季末,球员将身穿利兹联28号。尤文官方文件透露,球员租借费125万欧25万浮动,含选择性买断条款,买断费3450完美世界女战神是什么境界,最后结局又如何?老死下界完美世界动漫出到现在,有着很高人气的女战神再度登场了,一登场就帮助石昊重建补天阁,还帮石昊为补天阁报仇。也是这个时候石昊才知道,原来当初补天阁被灭,自己的师姐夏幽雨生死不明,原来是天外有天!众人们崇拜的球星,崇拜的却是罗纳尔多!头条创作挑战赛对7080年代出生的球迷来说,无疑是幸福的,90年代的世界足坛球星云集,每个俱乐部都有自己的当家球员,国家与国家之间也是风格迥异,但又绚烂多彩,可谓是百家争鸣,百花齐春节你出游了吗?文旅数据发布,消费复苏强劲!根据国家文旅部发布数据显示,今年春节七天假期,全国国内旅游出游达到3。08亿人次,同比增长23。1,恢复到2019年同期的88。6实现国内旅游收入3758。43亿元,同比增长30,76人隐患大爆发!领先21分被魔术翻盘,要夺冠他们还有三大命门今日NBA常规赛,最离奇的比赛当属费城76人主场迎战奥兰多魔术。东部第三主场迎战倒数第三,怎么看都是一场已经七连胜的76人唾手可得的胜利。然而等来的却是76人最吊诡也最丢人的失利,俄白俄罗斯运动员参加杭州亚运会为荣誉而战,值得点赞一国际奥委会表达善意允许俄罗斯白俄罗斯运动员有条件参加全球范围各项赛事。国际奥委会于瑞士当地时间25日召开执委会并发布的声明将在严格的限定条件下,寻求允许俄罗斯白俄罗斯运动员以中立美观察家布林肯对俄开出无法拒绝的好条件,结束乌克兰战争1月31日,俄罗斯瓦格纳战士在他们Tg频道上发布的视频显示,他们已经完全控制住了关键性的康斯坦丁诺夫卡巴赫姆特公路和巴赫穆特北部布拉格达特涅要塞以南的T1302阿特木斯克塞弗尔斯克NBA常规赛勇士胜猛龙1月27日,勇士队球员格林(下)在比赛中上篮。新华社发(董旭东摄)当日,在20222023赛季NBA常规赛中,金州勇士队主场以129比117战胜多伦多猛龙队。1月27日,勇士队球员养老不能靠国家,高层释放明确信号延迟退休提高社保缴费年限2023年春节刚过,有些专家就提出建议,为了缓解目前养老基金出现的危局,应该把社保最低缴费年限,从15年提升至25年,最后过渡到缴费30年此前,一些省份已经出台提高社保缴费年限的政你是孟钰,2023年还要安欣吗?最近电视剧狂飙正在热播中,作为主演的安欣和孟玉的感情戏,也是大家非常关注的一个话题。你们看好安欣和孟玉这一对吗?大结局到时会怎样?俩人会不会在一起?编剧会让他们在一起,迎接一个完美