异步资源控制方法、系统、设备及存储介质与流程

摘要: 本技术涉及计算机软件工程与分布式系统资源管理,尤其涉及一种异步资源控制方法、系统、设备及存储介质。背景技术:1、现代前端框架(例如,react18、vue3)引...
异步资源控制方法、系统、设备及存储介质与流程

本技术涉及计算机软件工程与分布式系统资源管理,尤其涉及一种异步资源控制方法、系统、设备及存储介质。

背景技术:

1、现代前端框架(例如,react 18、vue 3)引入并发渲染(concurrent rendering)与可中断更新机制的先进调度模型,使得前端应用的交互响应性得到显著提升。

2、然而,这种先进调度模型在架构层面使得在前端框架的跨层交互场景中,出现‌跨层生命周期信息断层的技术缺陷,即在前端框架的跨层交互场景中,组件生命周期、渲染调度、跨层协议交互等不同层级的状态信息无法被完整、连续地串联追溯,导致全链路的生命周期事件出现信息断点,无法还原完整的执行流。具体的,引入并发渲染(concurrentrendering)与可中断更新机制的现代前端框架,在并发模型下,当一个低优先级渲染任务task_a(例如,后台预加载复杂图表)被高优先级任务task_b(例如,用户点击输入)中断时,在前端框架的框架层,调度器立即停止task_a的dom(document object model,文档对象模型)‌计算与更新,释放相关内存;在应用层,由task_a触发的异步副作用(例如,fetch请求、settimeout、web worker通信)并不会自动停止,这些异步副作用的请求继续占用网络带宽、客户端内存和cpu计算资源;在数据层:当延迟的异步副作用的请求最终返回数据时,由于缺乏有效的上下文关联,返回数据被错误地写入全局状态管理库(例如redux、zustand),导致状态污染(state pollution)和ui不一致(ui inconsistency)(例如,旧图表的数据覆盖了新图表的数据)。

3、在相关技术中,基于组件生命周期,依赖于组件的unmount(卸载)事件手动清理异步副作用的请求,但在并发渲染中,渲染任务被中断不等于组件被卸载(组件可能仍挂载在dom上,只是这次更新被抛弃了),无法在unmount之外的时机感知中断,导致清理失效;或者,采用启发式缓存策略(例如,react query、swr)。基于“组件卸载”或“缓存时效(stale-while-revalidate)”进行清理异步副作用的请求,但启发式缓存策略属于概率性、滞后性策略,无法做到与渲染调度同步的确定性(deterministic)回收,且无法处理“渲染意图失效但组件未卸载”的边缘场景。

4、因此,引入并发渲染(concurrent rendering)与可中断更新机制的可中断渲染架构,在渲染任务被中断后,无法取消已发出的异步请求,无法实现资源的确定性控制,导致资源泄露与状态污染。

技术实现思路

1、为解决或部分解决相关技术中存在的问题,本技术提供一种异步资源控制方法、系统、设备及存储介质,能够实现异步资源的确定性控制,显著降低异步资源的泄露风险。

2、本技术第一方面提供一种异步资源控制方法,所述方法包括:

3、获取渲染任务的资源控制上下文,所述资源控制上下文包括所述渲染任务的标识符、渲染任务状态、控制器集合、数据存储区;

4、如果根据所述渲染任务的调度通知、所述控制器集合,确定所述渲染任务被中断,则生成包括所述标识符的中断指令;

5、响应于所述中断指令,删除与所述资源控制上下文对应的资源控制上下文对象,释放内存。

6、在一种实施方式中,所述如果根据所述渲染任务的调度通知、所述控制器集合,确定所述渲染任务被中断,则生成包括所述标识符的中断指令,包括:

7、如果根据所述渲染任务的调度通知确定所述渲染任务已结束调度,则获取所述控制器集合中控制器的信号;

8、如果根据所述信号,确定与所述控制器关联的异步操作未完成,则确定所述渲染任务被中断;

9、如果确定所述渲染任务被中断,则生成包括所述标识符的中断指令。

10、在一种实施方式中,所述响应于所述中断指令,删除与所述资源控制上下文对应的资源控制上下文对象,释放内存之前,包括:

11、响应于所述中断指令,根据所述中断指令包括的所述标识符,获取包括所述标识符的所述资源控制上下文;

12、将包括所述标识符的所述资源控制上下文的渲染任务状态更新为被中断;

13、根据所述资源控制上下文的控制器集合,获取所述控制器集合中控制器的信号;

14、根据所述控制器集合中控制器的信号,获取包括所述信号的异步应用程序编程接口的调用函数;

15、根据包括所述信号的异步应用程序编程接口的调用函数,中止与所述调用函数对应的所述异步副作用。

16、在一种实施方式中,所述方法还包括:

17、获取返回数据中包括的所述标识符;

18、根据所述标识符,获取包括所述标识符的资源控制上下文;

19、如果包括所述标识符的资源控制上下文的渲染任务状态为所述被中断,则将所述返回数据、所述返回数据的元信息标记为无效数据,并存入所述数据存储区。

20、在一种实施方式中,所述响应于所述中断指令,删除与所述资源控制上下文对应的资源控制上下文对象,释放内存,包括:

21、响应于所述中断指令,在主线程空闲时,获取资源控制上下文栈中包括所述标识符的所述资源控制上下文;

22、删除与所述资源控制上下文对应的资源控制上下文对象、所述资源控制上下文对象引用、和/或所述标识符与所述资源控制上下文的映射条目,释放内存;和/或,删除所述数据存储区的所述无效数据、以及存储所述无效数据的存储引用,释放内存。

23、在一种实施方式中,所述获取渲染任务的资源控制上下文,包括:

24、在接收到所述渲染任务的任务启动通知时,生成所述渲染任务的标识符,并创建所述渲染任务的资源控制上下文对象;

25、获取渲染所述渲染任务的异步操作,为所述异步操作创建控制器,并将所述控制器的信号写入所述异步应用程序编程接口的调用函数,其中,所述异步操作为所述异步应用程序编程接口被调用后形成的具体执行实例;

26、将所述控制器写入所述控制器集合,将所述标识符、所述渲染任务状态写入所述资源控制上下文对象,并在所述数据存储区建立所述标识符与所述异步操作的隐式关联,获取所述渲染任务的资源控制上下文。

27、本技术第二方面提供一种异步资源控制系统,所述系统包括:

28、上下文获取单元,用于获取渲染任务的资源控制上下文,所述资源控制上下文包括所述渲染任务的标识符、渲染任务状态、控制器集合、数据存储区;

29、指令生成单元,用于如果根据所述渲染任务的调度通知、所述上下文获取单元获取的所述资源控制上下文中的所述控制器集合,确定所述渲染任务被中断,则生成包括所述标识符的中断指令;

30、资源回收单元,用于响应于所述指令生成单元生成的所述中断指令,删除与所述资源控制上下文对应的资源控制上下文对象,释放内存。

31、在一种实施方式中,所述系统还包括:

32、中止单元,用于响应于所述中断指令,根据所述中断指令包括的所述标识符,获取包括所述标识符的所述资源控制上下文;将包括所述标识符的所述资源控制上下文的渲染任务状态更新为被中断;根据所述资源控制上下文的控制器集合,获取所述控制器集合中控制器的信号;根据所述控制器集合中控制器的信号,获取包括所述信号的异步应用程序编程接口的调用函数;根据包括所述信号的异步应用程序编程接口的调用函数,中止与所述调用函数对应的所述异步副作用

33、本技术第三方面提供一种电子设备,包括:

34、处理器;以及

35、存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如上所述的方法。

36、本技术第四方面提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如上所述的方法。

37、本技术第五方面提供一种计算机程序产品,所述计算机程序产品包括计算机指令,所述计算机指令被处理器执行时实现如上所述的方法。

38、本技术提供的技术方案可以包括以下有益成果:

39、本技术的技术方案,根据可中断渲染引擎的渲染任务的资源控制上下文,监听或推断可中断渲染引擎的渲染任务被中断的渲染任务中断事件(区别于组件卸载事件),并根据渲染任务中断事件驱动应用层资源回收,实现“可中断渲染引擎调度层”与“应用业务逻辑层”之间的跨层事件驱动的异步资源控制,实现一种与可中断渲染引擎无关、非绑定于可中断渲染引擎实现细节的异步资源控制,能够实现异步资源的确定性控制,显著降低异步资源的泄露风险。

40、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。