1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +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_);
}
async UNSAFE_componentWillReceiveProps(newProps) {
if (newProps.notesOrder !== this.props.notesOrder ||
newProps.selectedFolderId != this.props.selectedFolderId ||
newProps.selectedTagId != this.props.selectedTagId ||
newProps.selectedSmartFilterId != this.props.selectedSmartFilterId ||
newProps.notesParentType != this.props.notesParentType) {
await this.refreshNotes(newProps);
async componentDidUpdate(prevProps) {
if (prevProps.notesOrder !== this.props.notesOrder ||
prevProps.selectedFolderId != this.props.selectedFolderId ||
prevProps.selectedTagId != this.props.selectedTagId ||
prevProps.selectedSmartFilterId != this.props.selectedSmartFilterId ||
prevProps.notesParentType != this.props.notesParentType) {
await this.refreshNotes(this.props);
}
}
}
async refreshNotes(props = null) {
if (props === null) props = this.props;
@ -144,6 +144,8 @@ class NotesScreenComponent extends BaseScreenComponent {
notes: notes,
notesSource: source,
});
console.info('Done', Date.now() - startTime);
}
deleteFolder_onPress(folderId) {

View File

@ -53,18 +53,30 @@ const defaultState = {
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) {
return [{
return cacheEnabledOutput('notesOrder', [{
by: stateSettings['notes.sortOrder.field'],
dir: stateSettings['notes.sortOrder.reverse'] ? 'DESC' : 'ASC',
}];
}]);
}
stateUtils.foldersOrder = function(stateSettings) {
return [{
return cacheEnabledOutput('foldersOrder', [{
by: stateSettings['folders.sortOrder.field'],
dir: stateSettings['folders.sortOrder.reverse'] ? 'DESC' : 'ASC',
}];
}]);
}
stateUtils.parentItem = function(state) {