From 3f73c6df7b20b306fc9f1a6ca2d60005735be0a7 Mon Sep 17 00:00:00 2001 From: "Michael \"Z\" Goddard" <mzgoddard@gmail.com> Date: Wed, 20 Mar 2019 14:11:50 -0400 Subject: [PATCH] dispatch projectChange redux action when project has not changed Dispatching a message through redux makes it reconsider all currently listening components. Dispatching for each block, while loading, can mean dispatching and reconsidering thousands of times if not more. While dispatching is pretty quick doing this for every block ends up taking a lot of time. --- src/lib/vm-listener-hoc.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/vm-listener-hoc.jsx b/src/lib/vm-listener-hoc.jsx index efeaa3500..bac53a514 100644 --- a/src/lib/vm-listener-hoc.jsx +++ b/src/lib/vm-listener-hoc.jsx @@ -74,7 +74,7 @@ const vmListenerHOC = function (WrappedComponent) { } } handleProjectChanged () { - if (this.props.shouldEmitUpdates) { + if (this.props.shouldEmitUpdates && !this.props.projectChanged) { this.props.onProjectChanged(); } } @@ -117,6 +117,7 @@ const vmListenerHOC = function (WrappedComponent) { const { /* eslint-disable no-unused-vars */ attachKeyboardEvents, + projectChanged, shouldEmitUpdates, onBlockDragUpdate, onGreenFlag, @@ -154,6 +155,7 @@ const vmListenerHOC = function (WrappedComponent) { onTargetsUpdate: PropTypes.func.isRequired, onTurboModeOff: PropTypes.func.isRequired, onTurboModeOn: PropTypes.func.isRequired, + projectChanged: PropTypes.bool, shouldEmitUpdates: PropTypes.bool, username: PropTypes.string, vm: PropTypes.instanceOf(VM).isRequired @@ -163,6 +165,7 @@ const vmListenerHOC = function (WrappedComponent) { onGreenFlag: () => ({}) }; const mapStateToProps = state => ({ + projectChanged: state.scratchGui.projectChanged, // Do not emit target or project updates in fullscreen or player only mode // or when recording sounds (it leads to garbled recordings on low-power machines) shouldEmitUpdates: !state.scratchGui.mode.isFullScreen && !state.scratchGui.mode.isPlayerOnly && -- GitLab