From fce2cfddcf2e07e9f1c50c013789c52494c2a4bd Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 16 Apr 2017 13:10:56 +0200 Subject: [PATCH] Check if `pageView.pdfPage` exists in `PDFViewer._ensurePdfPageLoaded`, to avoid potentially calling `PDFPageView.setPdfPage` multiple times for the same page Since calling `PDFPageView.setPdfPage` will in turn call `PDFPageView.reset`, which cancels all rendering and completely resets the page, it's thus possible that we currently cause some unnecessary re-rendering during the initial loading phase of the viewer. Depending on the order in which data arrives, it's possible (and in practice always seem to happen) that the `pdfPage` property of the *second* page has already been set during `PDFViewer.setDocument`, by the time that the request for the `pdfPage` is resolved in `PDFViewer._ensurePdfPageLoaded`. Also, note how the `setPdfPage` call in `PDFViewer.setDocument` is already guarded by this kind of check. --- web/pdf_viewer.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index e6ecb2f30..e384ec885 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -843,12 +843,13 @@ var PDFViewer = (function pdfViewer() { if (this._pagesRequests[pageNumber]) { return this._pagesRequests[pageNumber]; } - var promise = this.pdfDocument.getPage(pageNumber).then( - function (pdfPage) { - pageView.setPdfPage(pdfPage); + var promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => { + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } this._pagesRequests[pageNumber] = null; return pdfPage; - }.bind(this)); + }); this._pagesRequests[pageNumber] = promise; return promise; }, @@ -859,9 +860,9 @@ var PDFViewer = (function pdfViewer() { this._pages, this.scroll.down); if (pageView) { - this._ensurePdfPageLoaded(pageView).then(function () { + this._ensurePdfPageLoaded(pageView).then(() => { this.renderingQueue.renderView(pageView); - }.bind(this)); + }); return true; } return false;