perf: implement validator instance caching to avoid redundant initialization

- 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 <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-11-13 20:05:58 +01:00
parent e6bb22eea1
commit 5db7924711

View File

@@ -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,