From 0e73be039eed78fda20e9bf28ee7f6f7c0d62fd8 Mon Sep 17 00:00:00 2001 From: Dima Date: Tue, 30 May 2023 11:39:20 -0400 Subject: [PATCH] perf(get-element-stack): improve getElementStack performance on large pages (#4026) * perf(get-element-stack): improve getElementStack performance on large pages * use memoize instead of cache in getScroll --- lib/core/utils/get-scroll.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/core/utils/get-scroll.js b/lib/core/utils/get-scroll.js index 306237270e..7270104bee 100644 --- a/lib/core/utils/get-scroll.js +++ b/lib/core/utils/get-scroll.js @@ -1,12 +1,14 @@ +import memoize from './memoize'; + /** * Get the scroll position of given element * @method getScroll * @memberof axe.utils - * @param {Element} node + * @param {Element} elm * @param {buffer} (Optional) allowed negligence in overflow * @returns {Object | undefined} */ -export default function getScroll(elm, buffer = 0) { +function getScroll(elm, buffer = 0) { const overflowX = elm.scrollWidth > elm.clientWidth + buffer; const overflowY = elm.scrollHeight > elm.clientHeight + buffer; @@ -38,3 +40,5 @@ function isScrollable(style, prop) { const overflowProp = style.getPropertyValue(prop); return ['scroll', 'auto'].includes(overflowProp); } + +export default memoize(getScroll);