Add a _updateAllPages helper method to PDFFindController in order to reduce the amount of event dispatching

Given that dispatching the 'updatetextlayermatches' event with `pageIndex = -1` set is now used to target the textLayers of *all* pages, there's no need to send individual events to every single page during `_nextMatch`. Since there can be an arbitrary number of pages in a document, this small/simple optimization seems too easy to ignore.
This commit is contained in:
Jonas Jenwald 2018-10-23 15:57:10 +02:00
parent dc98bf76eb
commit 27b21f2558

View File

@ -389,6 +389,13 @@ class PDFFindController {
});
}
_updateAllPages() {
this._eventBus.dispatch('updatetextlayermatches', {
source: this,
pageIndex: -1,
});
}
_nextMatch() {
const previous = this._state.findPrevious;
const currentPageIndex = this._linkService.page - 1;
@ -407,12 +414,13 @@ class PDFFindController {
this._pageMatchesLength = null;
this._matchesCountTotal = 0;
for (let i = 0; i < numPages; i++) {
// Wipe out any previously highlighted matches.
this._updatePage(i);
this._updateAllPages(); // Wipe out any previously highlighted matches.
for (let i = 0; i < numPages; i++) {
// Start finding the matches as soon as the text is extracted.
if (!(i in this._pendingFindMatches)) {
if (this._pendingFindMatches[i] === true) {
continue;
}
this._pendingFindMatches[i] = true;
this._extractTextPromises[i].then((pageIdx) => {
delete this._pendingFindMatches[pageIdx];
@ -420,7 +428,6 @@ class PDFFindController {
});
}
}
}
// If there's no query there's no point in searching.
if (this._state.query === '') {
@ -557,11 +564,7 @@ class PDFFindController {
this._updateUIState(FindState.FOUND);
}
this._highlightMatches = false;
this._eventBus.dispatch('updatetextlayermatches', {
source: this,
pageIndex: -1,
});
this._updateAllPages(); // Wipe out any previously highlighted matches.
});
}