From 5db7924711f6addcb897fc1c0e0ab5dcb9bcc9e7 Mon Sep 17 00:00:00 2001 From: czlonkowski <56956555+czlonkowski@users.noreply.github.com> Date: Thu, 13 Nov 2025 20:05:58 +0100 Subject: [PATCH] perf: implement validator instance caching to avoid redundant initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add module-level cached WorkflowValidator instance - Create getValidator() helper to reuse validator across mutations - Update pre/post mutation validation to use cached instance - Avoids redundant NodeSimilarityService initialization on every mutation Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/mcp/handlers-workflow-diff.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/mcp/handlers-workflow-diff.ts b/src/mcp/handlers-workflow-diff.ts index 13fff29..a6ecfe9 100644 --- a/src/mcp/handlers-workflow-diff.ts +++ b/src/mcp/handlers-workflow-diff.ts @@ -17,6 +17,20 @@ import { WorkflowVersioningService } from '../services/workflow-versioning-servi import { WorkflowValidator } from '../services/workflow-validator'; import { EnhancedConfigValidator } from '../services/enhanced-config-validator'; +// Cached validator instance to avoid recreating on every mutation +let cachedValidator: WorkflowValidator | null = null; + +/** + * Get or create cached workflow validator instance + * Reuses the same validator to avoid redundant NodeSimilarityService initialization + */ +function getValidator(repository: NodeRepository): WorkflowValidator { + if (!cachedValidator) { + cachedValidator = new WorkflowValidator(repository, EnhancedConfigValidator); + } + return cachedValidator; +} + // Zod schema for the diff request const workflowDiffSchema = z.object({ id: z.string(), @@ -99,7 +113,7 @@ export async function handleUpdatePartialWorkflow( // Validate workflow BEFORE mutation (for telemetry) try { - const validator = new WorkflowValidator(repository, EnhancedConfigValidator); + const validator = getValidator(repository); validationBefore = await validator.validateWorkflow(workflowBefore, { validateNodes: true, validateConnections: true, @@ -281,7 +295,7 @@ export async function handleUpdatePartialWorkflow( // Validate workflow AFTER mutation (for telemetry) try { - const validator = new WorkflowValidator(repository, EnhancedConfigValidator); + const validator = getValidator(repository); validationAfter = await validator.validateWorkflow(finalWorkflow, { validateNodes: true, validateConnections: true,