From 04e99b912eb43b0e6a2a08094baeb83c3de1fa17 Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Tue, 28 Mar 2023 20:23:20 -0700 Subject: [PATCH] Increase load performance by dynamically loading engines. --- src/camera-manager/engine-factory.ts | 10 ++++++---- src/camera-manager/manager.ts | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/camera-manager/engine-factory.ts b/src/camera-manager/engine-factory.ts index 42069466..afb8cbbe 100644 --- a/src/camera-manager/engine-factory.ts +++ b/src/camera-manager/engine-factory.ts @@ -9,9 +9,6 @@ import { ResolvedMediaCache } from '../utils/ha/resolved-media'; import { MemoryRequestCache, RecordingSegmentsCache, RequestCache } from './cache'; import { CameraManagerEngine } from './engine'; import { CameraInitializationError } from './error'; -import { FrigateCameraManagerEngine } from './frigate/engine-frigate'; -import { GenericCameraManagerEngine } from './generic/engine-generic'; -import { MotionEyeCameraManagerEngine } from './motioneye/engine-motioneye'; import { Engine } from './types'; export class CameraManagerEngineFactory { @@ -29,13 +26,15 @@ export class CameraManagerEngineFactory { this._resolvedMediaCache = resolvedMediaCache; } - public createEngine(engine: Engine): CameraManagerEngine | null { + public async createEngine(engine: Engine): Promise { let cameraManagerEngine: CameraManagerEngine | null = null; switch (engine) { case Engine.Generic: + const { GenericCameraManagerEngine } = await import('./generic/engine-generic'); cameraManagerEngine = new GenericCameraManagerEngine(); break; case Engine.Frigate: + const { FrigateCameraManagerEngine } = await import('./frigate/engine-frigate'); cameraManagerEngine = new FrigateCameraManagerEngine( this._cardWideConfig, new RecordingSegmentsCache(), @@ -43,6 +42,9 @@ export class CameraManagerEngineFactory { ); break; case Engine.MotionEye: + const { MotionEyeCameraManagerEngine } = await import( + './motioneye/engine-motioneye' + ); cameraManagerEngine = new MotionEyeCameraManagerEngine( new BrowseMediaManager(new MemoryRequestCache()), this._resolvedMediaCache, diff --git a/src/camera-manager/manager.ts b/src/camera-manager/manager.ts index e128e400..e5f26294 100644 --- a/src/camera-manager/manager.ts +++ b/src/camera-manager/manager.ts @@ -142,7 +142,7 @@ export class CameraManager { for (const [index, cameraConfig] of camerasConfig.entries()) { const engineType = engineTypes[index]; const engine = engineType - ? engines.get(engineType) ?? this._engineFactory.createEngine(engineType) + ? engines.get(engineType) ?? await this._engineFactory.createEngine(engineType) : null; if (!engine || !engineType) { throw new CameraInitializationError(