From 27b21f2558a73125b73cd49fc3b85e705c78f6cd Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 23 Oct 2018 15:57:10 +0200 Subject: [PATCH] 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. --- web/pdf_find_controller.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index 5c19b4435..d21507067 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -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,18 +414,18 @@ 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)) { - this._pendingFindMatches[i] = true; - this._extractTextPromises[i].then((pageIdx) => { - delete this._pendingFindMatches[pageIdx]; - this._calculateMatch(pageIdx); - }); + if (this._pendingFindMatches[i] === true) { + continue; } + this._pendingFindMatches[i] = true; + this._extractTextPromises[i].then((pageIdx) => { + delete this._pendingFindMatches[pageIdx]; + this._calculateMatch(pageIdx); + }); } } @@ -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. }); }