Blog>
Snippets

Optimizing Saga Performance with Throttling

Provides an example of how to use Redux-Saga's throttle effect to control the rate at which sagas process incoming actions from an event channel, improving application performance and user experience by preventing saga overload.
import { throttle } from 'redux-saga/effects';
Import the throttle effect from redux-saga/effects, which is used to control how often a saga takes an action.
function* handleSearch(action) {
  // Perform the search operation
  // This could involve calling an API and dispatching a success/failure action
  console.log('Searching for', action.payload);
}
Define a generator function that represents the saga for handling search operations. This function will be called by the saga middleware when the specified action is dispatched, but throttled as per the configuration.
function* watchSearch() {
  // Watch for SEARCH_REQUEST actions and throttle them
  // Parameters: 500ms as the time window, 'SEARCH_REQUEST' as the action type, handleSearch as the saga to be executed
  yield throttle(500, 'SEARCH_REQUEST', handleSearch);
}
Define a watcher saga that utilizes the throttle effect to listen for SEARCH_REQUEST actions. This setup throttles the execution of the handleSearch saga to once every 500 milliseconds.
export default watchSearch;
Export the watchSearch saga so it can be integrated into the application's root saga. This facilitates the throttling of search operations to improve performance and prevent API overload.