Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Redux Saga는 Redux Thunk보다 여러 동시 작업을 더 효율적으로 처리합니까?


Redux Saga는 Redux Thunk보다 여러 동시 작업을 더 효율적으로 처리합니까?


Redux Saga는 ES6 발전기 기능의 사용과 복잡한 비동기 흐름을 선언적으로 처리하기위한 설계로 인해 주로 Redux Thunk보다 여러 동시 작업을보다 효율적으로 처리합니다. Redux Saga에서 발전기 기능은 "사가", 일시 정지 및 재개 할 수있는 오래 지속 된 배경 프로세스를 생성하여 동시성, 취소, 디옥 스, 스로틀 및 레이스 조건을 포함한 비동기 작업에 대한 정교한 제어를 가능하게합니다. 이 기능은 특히 많은 동시 비동기 작업이있는 복잡한 응용 프로그램에서 부작용을 관리하는 체계적이고 확장 가능한 방법을 제공합니다.

반대로 Redux Thunk는 평범한 액션 객체 대신 기능을 반환하는 액션 제작자를 포함하는 더 간단한 개념을 기반으로합니다. 이러한 기능은 작업이 완료되기 전후에 다른 작업을 발송하여 API 호출과 같은 비동기 작업을 처리 할 수 ​​있습니다. 간단하거나 적당히 복잡한 비동기 요구에 효과적이지만 Redux Thunk는 동시성 제어 및 부작용 오케스트레이션을 처리하기위한 내장 구성이 부족하여 많은 겹치는 비동기 작업을 처리 할 때 더 많은 보일러 플레이트, 유지하기 어려운 코드로 이어질 수 있습니다.

비동기 제어를위한

생성기 기능

Redux Saga는 ES6 생성기 기능을 활용하여 미들웨어로 다시 제어 할 수 있으며 재개하기 전에 비동기 작업이 완료되기를 기다릴 수 있습니다. 이 일시 정지 및 수용 모델을 통해 Sagas는 여러 작업을 동시에 그리고 큰 제어와 동시에 조정할 수 있습니다. 예를 들어, Sagas는 독립적으로 실행되는 여러 작업을 포크 할 수 있으며 메인 Saga는 계속 실행됩니다. 또한 작업을 경쟁 할 수 있습니다. 즉, 하나의 작업이 먼저 완료되는 작업에 따라 다른 작업을 취소 할 수 있습니다.

이 기능은 비동기 기능이 실행될 수 있지만 자연스럽게 그런 세밀한 작업 조정에 적합하지 않은 Redux Thunk의 접근 방식과 대조됩니다. Thunks는 일반적으로 중첩 또는 체인 약속 및 콜백을 포함하며, 이는 여러 동시 상호 작용으로 복잡하고 다루기 어려워 질 수 있습니다.

선언 부작용 관리

Redux Saga는`theverevery`,`takelatest`,`fork`,`콜 및`put '과 같은 내장 효과 제작자 세트를 통해 선언 효과를 사용합니다. 이러한 효과는 부작용을 설명하는 일반 객체를 생성하며, 미들웨어는 실제 작업을 수행하기 위해 해석합니다. Sagas는 "어떻게 해야하는지"보다는 "무엇을 해야하는지"를 설명하기 때문에 코드는 더 읽기 쉽고 테스트 가능합니다.

동시성의 경우`Fork`는 Sagas가 여러 비 블로킹 작업을 병렬로 시작할 수 있도록합니다. 예를 들어, 사가는 여러 시청자가 다른 행동을 동시에 듣거나 한 번에 여러 API 통화를 수행하도록 포크 할 수 있습니다. 'TakeEvery'는 모든 파견 된 동작에 대해 사가를 실행하여 주요 사가를 차단하지 않고 동시에 여러 개의 행동을 처리합니다.

대조적으로, Redux Thunk는 선언이 아니라 필수적입니다. 액션 제작자는 조건 및 여러 발송 통화로 비동기 논리를 명시 적으로 처리합니다. 동시성 관리는 수동으로, 종종 복잡한 중첩 된 콜백 또는 약속이 발생하여 유지 관리 및 선명도에 영향을 미칩니다.

복잡한 흐름 및 작업 취소 처리

Redux Saga는 백그라운드 폴링, 디 폴링, 회수, 취소 및 시퀀싱 동작과 같은 간단한 API 호출 외에도 더 복잡한 비동기 워크 플로우를 지원합니다. 예를 들어, Sagas는 특정 조치가 발생하면 진행중인 작업을 취소하여 구식 또는 불필요한 작업이 완료되는 것을 방지 할 수 있습니다. 이 취소는 새로운 사용자가 이전 API 호출을 중단하는 자동 완성 검색과 같은 동시 시나리오에서 중요합니다.

Redux Thunk에는 내장 취소 기능이 부족하며 유사한 효과를 달성하기 위해 외부 라이브러리 또는 사용자 정의 논리에 의존합니다. 이러한 제한은 응용 프로그램 복잡성이 증가함에 따라 인종 조건과 관리하기 어려운 비동기 논리로 이어질 수 있습니다.

문제의 테스트 가능성 및 분리

Redux Saga의 발전기 기능은 설명 효과를 산출하기 때문에 실제 비동기 작업을 실행하지 않고도 장치 테스트가 더 쉽습니다. 개발자는 전체 비동기 환경을 조롱 할 필요없이 생성 된 효과의 순서와 내용을 주장하여 SAGA 논리를 테스트 할 수 있습니다.

Redux Thunk Test는 일반적으로 Redux 상점을 조롱하고 약속이 해결 된 후 발송 된 조치를 주장하는 것이 포함되며, 이는 비동기 결과를 테스트하지만 Thunk 자체 내의 흐름 제어는 아닙니다.

또한 Redux Saga는 부작용 논리를 구성 요소 및 액션 제작자에서 사가로 이동시켜 우려의 분리를 더 잘 촉진합니다. 이 모듈 식 접근법은 더 큰 애플리케이션에서 스케일링 멀티 태스크 비동기 작업을 단순화합니다.

성능 고려 사항

Redux Thunk는 가벼운 특성으로 인해 간단한 비동기 흐름에 대한 오버 헤드를 덜 소개 할 수 있지만 Redux Saga의 여러 동시 작업을 처리하는 데있어 효율성은 더 크고 더 까다로운 응용 프로그램에서 복잡성과 잠재적 버그를 줄입니다. Redux Saga는 동시 작업을 선언적으로 정리하고 중앙 집중식 SAGA 미들웨어를 통해 관리함으로써 병렬 작업 및 부작용 관리의 처리를 최적화합니다.

요약

-Redux Saga는 발전기 기능을 사용하여 작업 실행을 일시 중지하고 재개하여 동시 및 병렬 작업을 정확하게 제어 할 수 있습니다.
- Redux Saga의 효과 (`Fork`,`Call`,`TakeEvery` 등)의 선언적 특성을 통해 검색, 취소 및 병렬 처리와 같은 복잡한 비동기 워크 플로우를보다 자연스럽게 처리 할 수 ​​있습니다.
- 병렬 작업 및 병렬 작업 및 취소 기능과 같은 내장 된 동시성 관리 도구를 제공합니다.
-Redux Saga의 Pure Generator 기능은 산출 된 효과를 쉽게 주장 할 수 있도록하여 테스트 성을 향상시키는 반면 Redux Thunk 테스트에는 조롱 파견이 필요합니다.
-Redux Saga는 액션 제작자 또는 구성 요소와 혼합하는 대신 사가의 부작용을 분리하여 더 나은 코드 구성과 우려 사항을 홍보합니다.
-Redux Thunk는 단순하고 순차적 인 비동기 작업에 더 적합한 반면 Redux Saga는 확장 가능한 응용 프로그램에서 다중, 동시 및 복잡한 부작용을 관리하는 데 탁월합니다.

따라서, Redux 응용 프로그램에서 복잡한 비동기 흐름을 다룰 때 Redux Saga의 동시 작업 처리에 대한 Redux Saga의 접근 방식은 Redux Thunk에 비해 더 효율적이고 강력합니다.