From 87bbcc04510034111b95073fafb0952e7dc2335f Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Tue, 31 Mar 2026 15:16:56 +0100 Subject: [PATCH] Cache module resources to avoid duplicate loads --- src/panels/lovelace/common/load-resources.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/panels/lovelace/common/load-resources.ts b/src/panels/lovelace/common/load-resources.ts index 1ff1ecb20c..72cce42edc 100644 --- a/src/panels/lovelace/common/load-resources.ts +++ b/src/panels/lovelace/common/load-resources.ts @@ -2,9 +2,10 @@ import { loadCSS, loadJS, loadModule } from "../../../common/dom/load_resource"; import type { LovelaceResource } from "../../../data/lovelace/resource"; import type { HomeAssistant } from "../../../types"; -// CSS and JS should only be imported once. Modules and HTML are safe. +// CSS, JS, and modules should only be imported once. const CSS_CACHE: Record> = {}; const JS_CACHE: Record> = {}; +const MODULE_CACHE: Record> = {}; const _loadLovelaceResource = ( resource: LovelaceResource, @@ -36,8 +37,15 @@ const _loadLovelaceResource = ( return loadTask; } - case "module": - return loadModule(normalizedUrl); + case "module": { + if (normalizedUrl in MODULE_CACHE) { + return MODULE_CACHE[normalizedUrl]; + } + + const loadTask = loadModule(normalizedUrl); + MODULE_CACHE[normalizedUrl] = loadTask; + return loadTask; + } default: // eslint-disable-next-line