mirror of
https://github.com/reduxjs/redux-devtools.git
synced 2024-11-22 09:36:43 +03:00
Do not recompute states unless necessary
This commit is contained in:
parent
a5dd802547
commit
b5292609da
|
@ -95,6 +95,7 @@ function liftReducer(reducer, initialState) {
|
|||
* Manages how the DevTools actions modify the DevTools state.
|
||||
*/
|
||||
return function liftedReducer(liftedState = initialLiftedState, liftedAction) {
|
||||
let shouldRecomputeStates = true;
|
||||
let {
|
||||
committedState,
|
||||
stagedActions,
|
||||
|
@ -131,6 +132,8 @@ function liftReducer(reducer, initialState) {
|
|||
break;
|
||||
case ActionTypes.JUMP_TO_STATE:
|
||||
currentStateIndex = liftedAction.index;
|
||||
// Optimization: we know the history has not changed.
|
||||
shouldRecomputeStates = false;
|
||||
break;
|
||||
case ActionTypes.SWEEP:
|
||||
stagedActions = stagedActions.filter((_, i) => !skippedActions[i]);
|
||||
|
@ -142,8 +145,21 @@ function liftReducer(reducer, initialState) {
|
|||
if (currentStateIndex === stagedActions.length - 1) {
|
||||
currentStateIndex++;
|
||||
}
|
||||
|
||||
stagedActions = [...stagedActions, liftedAction.action];
|
||||
timestamps = [...timestamps, liftedAction.timestamp];
|
||||
|
||||
// Optimization: we know that the past has not changed.
|
||||
shouldRecomputeStates = false;
|
||||
// Instead of recomputing the states, append the next one.
|
||||
const previousEntry = computedStates[computedStates.length - 1];
|
||||
const nextEntry = computeNextEntry(
|
||||
reducer,
|
||||
liftedAction.action,
|
||||
previousEntry.state,
|
||||
previousEntry.error
|
||||
);
|
||||
computedStates = [...computedStates, nextEntry];
|
||||
break;
|
||||
case ActionTypes.SET_MONITOR_STATE:
|
||||
monitorState = liftedAction.monitorState;
|
||||
|
@ -159,12 +175,14 @@ function liftReducer(reducer, initialState) {
|
|||
break;
|
||||
}
|
||||
|
||||
computedStates = recomputeStates(
|
||||
reducer,
|
||||
committedState,
|
||||
stagedActions,
|
||||
skippedActions
|
||||
);
|
||||
if (shouldRecomputeStates) {
|
||||
computedStates = recomputeStates(
|
||||
reducer,
|
||||
committedState,
|
||||
stagedActions,
|
||||
skippedActions
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
committedState,
|
||||
|
|
Loading…
Reference in New Issue
Block a user