1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-08-13 22:12:50 +02:00

Mobile: Fixed issue that could slow down app when displaying large list of notes

This commit is contained in:
Laurent Cozic
2019-07-13 23:55:28 +01:00
parent 0255546ae1
commit bdb31f2890
2 changed files with 26 additions and 12 deletions

View File

@@ -100,15 +100,15 @@ class NotesScreenComponent extends BaseScreenComponent {
AppState.removeEventListener('change', this.onAppStateChange_); AppState.removeEventListener('change', this.onAppStateChange_);
} }
async UNSAFE_componentWillReceiveProps(newProps) { async componentDidUpdate(prevProps) {
if (newProps.notesOrder !== this.props.notesOrder || if (prevProps.notesOrder !== this.props.notesOrder ||
newProps.selectedFolderId != this.props.selectedFolderId || prevProps.selectedFolderId != this.props.selectedFolderId ||
newProps.selectedTagId != this.props.selectedTagId || prevProps.selectedTagId != this.props.selectedTagId ||
newProps.selectedSmartFilterId != this.props.selectedSmartFilterId || prevProps.selectedSmartFilterId != this.props.selectedSmartFilterId ||
newProps.notesParentType != this.props.notesParentType) { prevProps.notesParentType != this.props.notesParentType) {
await this.refreshNotes(newProps); await this.refreshNotes(this.props);
}
} }
}
async refreshNotes(props = null) { async refreshNotes(props = null) {
if (props === null) props = this.props; if (props === null) props = this.props;
@@ -144,6 +144,8 @@ class NotesScreenComponent extends BaseScreenComponent {
notes: notes, notes: notes,
notesSource: source, notesSource: source,
}); });
console.info('Done', Date.now() - startTime);
} }
deleteFolder_onPress(folderId) { deleteFolder_onPress(folderId) {

View File

@@ -53,18 +53,30 @@ const defaultState = {
const stateUtils = {}; const stateUtils = {};
const derivedStateCache_ = {};
// Allows, for a given state, to return the same derived
// objects, to prevent unecessary updates on calling components.
const cacheEnabledOutput = (key, output) => {
key = key + '_' + JSON.stringify(output);
if (derivedStateCache_[key]) return derivedStateCache_[key];
derivedStateCache_[key] = output;
return derivedStateCache_[key];
}
stateUtils.notesOrder = function(stateSettings) { stateUtils.notesOrder = function(stateSettings) {
return [{ return cacheEnabledOutput('notesOrder', [{
by: stateSettings['notes.sortOrder.field'], by: stateSettings['notes.sortOrder.field'],
dir: stateSettings['notes.sortOrder.reverse'] ? 'DESC' : 'ASC', dir: stateSettings['notes.sortOrder.reverse'] ? 'DESC' : 'ASC',
}]; }]);
} }
stateUtils.foldersOrder = function(stateSettings) { stateUtils.foldersOrder = function(stateSettings) {
return [{ return cacheEnabledOutput('foldersOrder', [{
by: stateSettings['folders.sortOrder.field'], by: stateSettings['folders.sortOrder.field'],
dir: stateSettings['folders.sortOrder.reverse'] ? 'DESC' : 'ASC', dir: stateSettings['folders.sortOrder.reverse'] ? 'DESC' : 'ASC',
}]; }]);
} }
stateUtils.parentItem = function(state) { stateUtils.parentItem = function(state) {