Further improve caching in Catalog.getPageDict
, for disableAutoFetch
mode (PR 8207 follow-up)
PR 8207 added caching to improve the performance of `Catalog.getPageDict`, by not having to repeatedly fetch the same data and also reducing the asynchronicity of that method. However, because of *another* oversight on my part, we're only caching /Page references once we've found the correct page. As long as all pages are loaded *in order* this doesn't really matter (happens by default in the viewer), but when `disableAutoFetch` is used the pages may be fetched in a more random order (this patch reduces the asynchronicity of `Catalog.getPageDict` slightly in that case).
This commit is contained in:
parent
97dc048e56
commit
8a05db230e
@ -1117,13 +1117,14 @@ class Catalog {
|
|||||||
|
|
||||||
xref.fetchAsync(currentNode).then(function (obj) {
|
xref.fetchAsync(currentNode).then(function (obj) {
|
||||||
if (isDict(obj, "Page") || (isDict(obj) && !obj.has("Kids"))) {
|
if (isDict(obj, "Page") || (isDict(obj) && !obj.has("Kids"))) {
|
||||||
|
// Cache the Page reference, since it can *greatly* improve
|
||||||
|
// performance by reducing redundant lookups in long documents
|
||||||
|
// where all nodes are found at *one* level of the tree.
|
||||||
|
if (currentNode && !pageKidsCountCache.has(currentNode)) {
|
||||||
|
pageKidsCountCache.put(currentNode, 1);
|
||||||
|
}
|
||||||
|
|
||||||
if (pageIndex === currentPageIndex) {
|
if (pageIndex === currentPageIndex) {
|
||||||
// Cache the Page reference, since it can *greatly* improve
|
|
||||||
// performance by reducing redundant lookups in long documents
|
|
||||||
// where all nodes are found at *one* level of the tree.
|
|
||||||
if (currentNode && !pageKidsCountCache.has(currentNode)) {
|
|
||||||
pageKidsCountCache.put(currentNode, 1);
|
|
||||||
}
|
|
||||||
capability.resolve([obj, currentNode]);
|
capability.resolve([obj, currentNode]);
|
||||||
} else {
|
} else {
|
||||||
currentPageIndex++;
|
currentPageIndex++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user