Redux Saga比Redux Thunk更有效地处理了多个并发任务,这主要是因为它使用ES6 Generator功能及其设计来处理复杂的异步流。在Redux Saga中,生成器函数创建了“ Sagas”,这是可以暂停和恢复的长期背景过程,从而可以对异步操作进行复杂的控制,包括并发,取消,调试,油门和种族条件。该功能提供了一种结构化且可扩展的方式来管理副作用,尤其是在具有许多同时执行任务的复杂应用程序中。
相比之下,Redux Thunk基于一个更简单的概念,该概念涉及动作创建者返回功能而不是普通动作对象。这些功能可以通过在任务完成之前和之后派遣不同的操作来处理异步操作,例如API调用。虽然对直接或中等复杂的异步需求有效,但Redux Thunk缺少内置的内置结构来处理并发控制和副作用编排,这可能会导致更多的样板,在处理许多重叠的异步任务时,更难以维护的代码。
###发电机功能用于异步控制
Redux Saga利用ES6 Generator功能,可以将控件送回中间件并等待异步操作在恢复之前完成。这种暂停和简短的模型使Sagas同时且同时协调多个任务,并同时控制着很好的控制。例如,萨加斯(Sagas)可以分叉多个任务,这些任务是独立运行的,而主要的传说继续执行。他们还可以竞争任务,这意味着一个任务可以取消其他任务,具体取决于首先完成的任务。
此功能与Redux Thunk的方法形成鲜明对比,在该方法中,异步功能可能会执行,但自然而然地适合这种精细的任务协调。 thunks通常涉及嵌套或链接的承诺和回调,并且通过多种并发相互作用会变得复杂而笨拙。
###声明副作用管理
Redux Saga通过一组内置效果创建者(例如takeevery”,“ Takelatest”,“ fork”,“ call”和“ put”来使用声明效应。这些效果生成了描述副作用的普通对象,中间件将其解释以执行实际操作。因为Sagas描述了“做什么”而不是“如何做”,因此代码更可读性和可测试。
对于并发,`fork'允许萨加斯并行启动多个非阻滞任务。例如,一个传奇可以分叉几个观察者同时收听不同的动作或立即执行多个API调用。 “ abee every”为每个派遣动作都有一个传奇,同时处理多个动作而不会阻止主要的传奇。
相比之下,Redux Thunk是必须的,而不是声明性的。动作创建者明确处理条件和多个调度调用的异步逻辑。并发管理是手动的,通常会导致复杂的嵌套回调或承诺,从而影响可维护性和清晰度。
###处理复杂的流和取消任务
Redux Saga支持更复杂的异步工作流,超出了简单的API调用,例如背景轮询,辩论,检索,取消和测序操作。例如,萨加斯可以在某些操作发生时取消正在进行的任务,以防止过时或不必要的操作完成。在同时情况下,这种取消是至关重要的,例如新用户输入中止以前的API调用的autoCoctlete搜索。
Redux Thunk缺乏内置的取消功能,并且依赖于外部库或自定义逻辑来实现类似的效果。这种限制可以导致种族条件,并且随着应用程序复杂性的增加而难以管理的异步逻辑。
###可检验性和关注点分离
由于Redux Saga的发电机功能会产生描述性效果,因此在不运行实际异步操作的情况下它们更容易单位测试。开发人员可以通过断言效果的顺序和内容来测试传奇逻辑,而无需模拟整个异步环境。
Redux Thunk测试通常涉及嘲笑Redux商店并断言Promise解决后的派遣动作,该动作可以测试异步结果,而不是Thunk本身内的流量控制。
此外,Redux Saga将副作用逻辑从组成部分和动作创建者中移出到Sagas中,从而促进了更好的关注点。这种模块化方法简化了在较大应用程序中的缩放多任务异步操作。
###性能注意事项
尽管Redux Thunk由于其轻巧的性质而可能引入较少的开销,以使其用于简单的异步流,但Redux Saga在处理多个并发任务方面的效率会降低更大,苛刻的应用程序中的复杂性和潜在的错误。通过声明并通过集中的传奇中间件来组织同时的任务,Redux Saga优化了并行操作和副作用管理的处理。
### 概括
- Redux Saga使用Generator函数暂停并恢复任务执行,从而可以精确控制并行和并行任务。
- Redux Saga效果的声明性质(fork',``呼叫',``takevery''等)使其能够更自然地处理复杂的异步工作流,例如重试,取消和并行性。
- 它为并行任务和取消功能提供了内置的并发管理工具,默认情况下,Redux Thunk缺乏这些工具。
- Redux Saga的Pure Generator功能通过使其轻松断言产生的效果来提高可测试性,而Redux Thunk测试需要嘲笑调度。
- Redux Saga通过隔离Sagas中的副作用,而不是将它们与动作创建者或组件混合在一起,从而促进了更好的代码组织和关注点的分离。
- Redux Thunk更适合于更简单,顺序的异步操作,而Redux Saga在可扩展应用中管理多个,并发和复杂的副作用方面表现出色。