From 7e852851fd2e99a8ceccfb7a5a9394bc6d591c25 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sun, 29 May 2022 16:37:18 +0200 Subject: [PATCH] A small memory-usage improvement for PDF documents opened from TypedArray-data This patch contains a small optimization specifically for the case when `getDocument` is called with TypedArray-data. In that case we'll still hold onto that data, which could obviously be large, even after the "GetDocRequest"-message has been sent to the worker-thread. In practice this will most likely not affect memory usage in any noticeable way, since the application calling `getDocument` will probably also be keeping a reference to the TypedArray-data. However, it seems like a good idea to ensure that the PDF.js API *itself* won't unnecessarily keep this data alive. --- src/display/api.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index 3b36f18e0..fba542a87 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -513,6 +513,12 @@ async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { } ); + // Release the TypedArray data, when it exists, since it's no longer needed + // on the main-thread *after* it's been sent to the worker-thread. + if (source.data) { + source.data = null; + } + if (worker.destroyed) { throw new Error("Worker was destroyed"); } @@ -953,8 +959,8 @@ class PDFDocumentProxy { } /** - * @returns {Promise} A promise that is resolved with a - * {TypedArray} that has the raw data from the PDF. + * @returns {Promise} A promise that is resolved with a + * {Uint8Array} that has the raw data from the PDF. */ getData() { return this._transport.getData();