From 47f2b2284253e20307ba062fa253b35bb28da5ed Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 17 Jul 2026 20:55:58 +0200 Subject: [PATCH] Use Iterator methods to avoid some unnecessary Array creation Currently there are some spots in the code-base where intermediate Arrays are unnecessarily created from Iterators, before `filter` and `map` is used to create a final Array. Thanks to newer Iterators methods, see e.g. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/filter, that can be now be avoided. --- src/core/xfa/xfa_object.js | 5 ++++- src/display/draw_layer.js | 4 +++- web/struct_tree_layer_builder.js | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/xfa/xfa_object.js b/src/core/xfa/xfa_object.js index 9a3ac1ac7..ee395ec28 100644 --- a/src/core/xfa/xfa_object.js +++ b/src/core/xfa/xfa_object.js @@ -447,7 +447,10 @@ class XFAObject { [_getUnsetAttributes](protoAttributes) { const allAttr = this[_attributeNames]; const setAttr = this[_setAttributes]; - return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x)); + return protoAttributes + .keys() + .filter(x => allAttr.has(x) && !setAttr.has(x)) + .toArray(); } /** diff --git a/src/display/draw_layer.js b/src/display/draw_layer.js index 5cca03892..3278900ae 100644 --- a/src/display/draw_layer.js +++ b/src/display/draw_layer.js @@ -366,8 +366,10 @@ class DrawLayer { * Connected text layers sorted in document order. */ static #getOrderedTextLayers() { - return [...this.#textLayerSet] + return this.#textLayerSet + .keys() .filter(textLayer => textLayer.isConnected) + .toArray() .sort(compareTextLayers); } diff --git a/web/struct_tree_layer_builder.js b/web/struct_tree_layer_builder.js index 22a1122e3..16dccb272 100644 --- a/web/struct_tree_layer_builder.js +++ b/web/struct_tree_layer_builder.js @@ -113,7 +113,7 @@ class MathMLSanitizer { "sanitizer", FeatureTest.isSanitizerSupported ? new Sanitizer({ - elements: [...MathMLElements].map(name => ({ + elements: Array.from(MathMLElements.keys(), name => ({ name, namespace: MathMLNamespace, })),