Merge pull request #16004 from Snuffleupagus/WorkerTransport-cacheSimpleMethod
Improve how we cache Promises in `WorkerTransport`
This commit is contained in:
commit
e698664927
@ -2337,12 +2337,12 @@ class PDFWorker {
|
|||||||
* @ignore
|
* @ignore
|
||||||
*/
|
*/
|
||||||
class WorkerTransport {
|
class WorkerTransport {
|
||||||
|
#methodPromises = new Map();
|
||||||
|
|
||||||
#pageCache = new Map();
|
#pageCache = new Map();
|
||||||
|
|
||||||
#pagePromises = new Map();
|
#pagePromises = new Map();
|
||||||
|
|
||||||
#metadataPromise = null;
|
|
||||||
|
|
||||||
constructor(messageHandler, loadingTask, networkStream, params) {
|
constructor(messageHandler, loadingTask, networkStream, params) {
|
||||||
this.messageHandler = messageHandler;
|
this.messageHandler = messageHandler;
|
||||||
this.loadingTask = loadingTask;
|
this.loadingTask = loadingTask;
|
||||||
@ -2376,6 +2376,17 @@ class WorkerTransport {
|
|||||||
this.setupMessageHandler();
|
this.setupMessageHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#cacheSimpleMethod(name, data = null) {
|
||||||
|
const cachedPromise = this.#methodPromises.get(name);
|
||||||
|
if (cachedPromise) {
|
||||||
|
return cachedPromise;
|
||||||
|
}
|
||||||
|
const promise = this.messageHandler.sendWithPromise(name, data);
|
||||||
|
|
||||||
|
this.#methodPromises.set(name, promise);
|
||||||
|
return promise;
|
||||||
|
}
|
||||||
|
|
||||||
get annotationStorage() {
|
get annotationStorage() {
|
||||||
return shadow(this, "annotationStorage", new AnnotationStorage());
|
return shadow(this, "annotationStorage", new AnnotationStorage());
|
||||||
}
|
}
|
||||||
@ -2472,9 +2483,7 @@ class WorkerTransport {
|
|||||||
Promise.all(waitOn).then(() => {
|
Promise.all(waitOn).then(() => {
|
||||||
this.commonObjs.clear();
|
this.commonObjs.clear();
|
||||||
this.fontLoader.clear();
|
this.fontLoader.clear();
|
||||||
this.#metadataPromise = null;
|
this.#methodPromises.clear();
|
||||||
this._getFieldObjectsPromise = null;
|
|
||||||
this._hasJSActionsPromise = null;
|
|
||||||
|
|
||||||
if (this._networkStream) {
|
if (this._networkStream) {
|
||||||
this._networkStream.cancelAllRequests(
|
this._networkStream.cancelAllRequests(
|
||||||
@ -2939,15 +2948,11 @@ class WorkerTransport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getFieldObjects() {
|
getFieldObjects() {
|
||||||
return (this._getFieldObjectsPromise ||=
|
return this.#cacheSimpleMethod("GetFieldObjects");
|
||||||
this.messageHandler.sendWithPromise("GetFieldObjects", null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hasJSActions() {
|
hasJSActions() {
|
||||||
return (this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise(
|
return this.#cacheSimpleMethod("HasJSActions");
|
||||||
"HasJSActions",
|
|
||||||
null
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCalculationOrderIds() {
|
getCalculationOrderIds() {
|
||||||
@ -3028,8 +3033,13 @@ class WorkerTransport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getMetadata() {
|
getMetadata() {
|
||||||
return (this.#metadataPromise ||= this.messageHandler
|
const name = "GetMetadata",
|
||||||
.sendWithPromise("GetMetadata", null)
|
cachedPromise = this.#methodPromises.get(name);
|
||||||
|
if (cachedPromise) {
|
||||||
|
return cachedPromise;
|
||||||
|
}
|
||||||
|
const promise = this.messageHandler
|
||||||
|
.sendWithPromise(name, null)
|
||||||
.then(results => {
|
.then(results => {
|
||||||
return {
|
return {
|
||||||
info: results[0],
|
info: results[0],
|
||||||
@ -3037,7 +3047,9 @@ class WorkerTransport {
|
|||||||
contentDispositionFilename: this._fullReader?.filename ?? null,
|
contentDispositionFilename: this._fullReader?.filename ?? null,
|
||||||
contentLength: this._fullReader?.contentLength ?? null,
|
contentLength: this._fullReader?.contentLength ?? null,
|
||||||
};
|
};
|
||||||
}));
|
});
|
||||||
|
this.#methodPromises.set(name, promise);
|
||||||
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
getMarkInfo() {
|
getMarkInfo() {
|
||||||
@ -3063,9 +3075,7 @@ class WorkerTransport {
|
|||||||
if (!keepLoadedFonts) {
|
if (!keepLoadedFonts) {
|
||||||
this.fontLoader.clear();
|
this.fontLoader.clear();
|
||||||
}
|
}
|
||||||
this.#metadataPromise = null;
|
this.#methodPromises.clear();
|
||||||
this._getFieldObjectsPromise = null;
|
|
||||||
this._hasJSActionsPromise = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get loadingParams() {
|
get loadingParams() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user