Pre-render *one* additional page when spreadModes are enabled
Please note that we (obviously) don't want to unconditionally pre-render more than one page all the time, since that could very easily lead to overall worse performance in some documents.[1] However, when spreadModes are enabled it does make sense to attempt to pre-render both of the pages of the next/previous spread. --- [1] Since it may cause pre-rendering to unnecessarily compete for parsing resources, on the worker-thread, with "regular" rendering.
This commit is contained in:
parent
fb6c807ba2
commit
e4794a678a
@ -1250,10 +1250,16 @@ class BaseViewer {
|
|||||||
const scrollAhead = this._isScrollModeHorizontal
|
const scrollAhead = this._isScrollModeHorizontal
|
||||||
? this.scroll.right
|
? this.scroll.right
|
||||||
: this.scroll.down;
|
: this.scroll.down;
|
||||||
|
const preRenderExtra =
|
||||||
|
this._scrollMode === ScrollMode.VERTICAL &&
|
||||||
|
this._spreadMode !== SpreadMode.NONE &&
|
||||||
|
!this.isInPresentationMode;
|
||||||
|
|
||||||
const pageView = this.renderingQueue.getHighestPriority(
|
const pageView = this.renderingQueue.getHighestPriority(
|
||||||
visiblePages,
|
visiblePages,
|
||||||
this._pages,
|
this._pages,
|
||||||
scrollAhead
|
scrollAhead,
|
||||||
|
preRenderExtra
|
||||||
);
|
);
|
||||||
if (pageView) {
|
if (pageView) {
|
||||||
this._ensurePdfPageLoaded(pageView).then(() => {
|
this._ensurePdfPageLoaded(pageView).then(() => {
|
||||||
|
@ -102,8 +102,9 @@ class PDFRenderingQueue {
|
|||||||
* @param {Object} visible
|
* @param {Object} visible
|
||||||
* @param {Array} views
|
* @param {Array} views
|
||||||
* @param {boolean} scrolledDown
|
* @param {boolean} scrolledDown
|
||||||
|
* @param {boolean} [preRenderExtra]
|
||||||
*/
|
*/
|
||||||
getHighestPriority(visible, views, scrolledDown) {
|
getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {
|
||||||
/**
|
/**
|
||||||
* The state has changed. Figure out which page has the highest priority to
|
* The state has changed. Figure out which page has the highest priority to
|
||||||
* render next (if any).
|
* render next (if any).
|
||||||
@ -128,14 +129,20 @@ class PDFRenderingQueue {
|
|||||||
|
|
||||||
// All the visible views have rendered; try to render next/previous page.
|
// All the visible views have rendered; try to render next/previous page.
|
||||||
// (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)
|
// (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)
|
||||||
const preRenderIndex = scrolledDown
|
let preRenderIndex = scrolledDown ? visible.last.id : visible.first.id - 2;
|
||||||
? visible.last.id
|
let preRenderView = views[preRenderIndex];
|
||||||
: visible.first.id - 2;
|
|
||||||
const preRenderView = views[preRenderIndex];
|
|
||||||
|
|
||||||
if (preRenderView && !this.isViewFinished(preRenderView)) {
|
if (preRenderView && !this.isViewFinished(preRenderView)) {
|
||||||
return preRenderView;
|
return preRenderView;
|
||||||
}
|
}
|
||||||
|
if (preRenderExtra) {
|
||||||
|
preRenderIndex += scrolledDown ? 1 : -1;
|
||||||
|
preRenderView = views[preRenderIndex];
|
||||||
|
|
||||||
|
if (preRenderView && !this.isViewFinished(preRenderView)) {
|
||||||
|
return preRenderView;
|
||||||
|
}
|
||||||
|
}
|
||||||
// Everything that needs to be rendered has been.
|
// Everything that needs to be rendered has been.
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user