Vue 源码思想在工作中的应用
一、背景
由于电脑 CPU、内存等的限制,能够同时启动的任务数有一定限制,例如一台电脑能够执行 5 个异步任务,但是目前有 100 个异步任务要执行,那么如何让这 100 个任务无间隔的快速执行完毕呢?
二、问题解答
刚遇到这个问题的时候,也是出于懵逼状态,怎么处理呢???碰巧的是近期学习了一些 Vue 的源码知识,那么是不是可以借鉴其思想来解决遇到的这个难题呢?经过一步步分析,确定答案是肯定的。下面从解题思路、知识点及代码实现来聊一聊实现过程。
2.1 解题思路
上述是整个流程图,其流程可简化为以下几个步骤:
将所有任务分为两组,任务组 1 指的是电脑可以并行执行的异步任务,任务组 2 指的是其余的异步任务;
将任务组 1 变为可帧听状态,即其发生变化时我们能够知道;
将任务组 1 中的任务触发(不触发任务不会执行);
某一任务执行完毕后,将任务组 2 中的一个任务填充到可帧听状态的任务组 1 中;
任务按照固定数量不断执行,直到所有任务执行完毕。
2.2 知识点
在 Vue 源码中,Vue2.x 使用 Object.defineProperty()实现对数据的帧听;Vue3.0 使用 Proxy 实现对数据的帧听。本着赶时髦和 Proxy 确实优秀的态度,在实现过程中也应用了 Proxy。Proxy 作为一个新的知识点,先了解一下其定义及使用方法。
2.2.1 定义
Proxy 中文意思是“代理”,是在目标对象之间架设一层“拦截”,从而可以修改某些操作的默认行为。Proxy 共支持十三种拦截操作:get、set、has、deleteProperty、ownKeys、getOwnPropertyDescriptor、defineProperty、preventExtensions、getPrototypeOf、isExtensible、setPrototypeOf、apply、construct。
2.2.2 简单使用
2.2.3 详细使用
详细用法可以参考阮一峰大佬的“ECMAScript 6 入门”。
2.3 代码实现
2.3.1 定义两个任务队列
首先定义两个任务队列,task1 为开始执行的一批任务,task2 中为后续添加进去的任务。
2.3.2 数据变为可帧听的函数
利用 Proxy 将数据变为可帧听状态
2.3.3 异步任务逻辑
2.3.4 主函数
2.3.5 执行结果
通过结果可以看到,当一个任务完成时立刻将有一个新的任务进入。
三、讨论
针对此类问题的处理方式,各位大佬有新的思路与方法欢迎留言,我们一起讨论,共同进步。
1.如果觉得这篇文章还不错,来个分享、点赞吧,让更多的人也看到
2.关注公众号执鸢者,领取学习资料(前端“多兵种”资料),定期为你推送原创深度好文
版权声明: 本文为 InfoQ 作者【执鸢者】的原创文章。
原文链接:【http://xie.infoq.cn/article/2668a4d0cc970f89abc36fa17】。文章转载请联系作者。
评论