elsa-workflows / elsa-core

A .NET workflows library
https://v3.elsaworkflows.io/
MIT License
5.88k stars 1.06k forks source link

[PERF] Cache JavaScript AST for Workflow Definitions #5272

Closed sfmskywalker closed 2 weeks ago

sfmskywalker commented 2 weeks ago

Problem: Currently, each execution of a workflow definition repeatedly parses the same JavaScript expressions, which leads to inefficiencies, especially when a workflow is executed multiple times.

Proposed Solution: To enhance performance, it is proposed to implement caching of the parsed Abstract Syntax Tree (AST) of JavaScript expressions used within a workflow definition. This cache would be utilized across multiple executions of the same workflow, avoiding redundant parsing operations.

Expected Benefits:

This feature would require modifications to the JavaScript expression handling mechanism to enable caching and retrieval of ASTs. Additionally, considerations for cache invalidation and updates when the workflow definition changes would be necessary to ensure accuracy and consistency.

glime-ai[bot] commented 2 weeks ago

To address the problem of repeated parsing of JavaScript expressions during workflow executions, your proposed solution of implementing caching for the parsed Abstract Syntax Tree (AST) of JavaScript expressions is indeed a viable approach to enhance performance. Here are some considerations and steps that could be taken to implement this solution:

  1. Expression Caching Mechanism: Introduce a caching layer that stores the AST of parsed JavaScript expressions. This cache should be keyed by a unique identifier for each expression, possibly a hash of the expression text itself.

  2. Cache Retrieval and Storage: Modify the JavaScript expression evaluation component to check the cache before parsing an expression. If a cached AST is available, use it directly; otherwise, parse the expression and store the resulting AST in the cache.

  3. Cache Invalidation: Implement a strategy for invalidating cached ASTs when the corresponding workflow definition changes. This ensures that the cache does not return stale or incorrect ASTs that do not reflect the latest version of the workflow.

  4. Performance Monitoring: After implementing the caching mechanism, monitor the performance of workflow executions to measure the impact of caching on parsing overhead and execution speed.

  5. Scalability Considerations: Ensure that the caching solution is scalable and can handle the increased load as the number of workflow executions grows. This may involve using distributed caching mechanisms if the workflow engine operates in a distributed environment.

  6. Testing and Validation: Thoroughly test the caching mechanism to ensure that it correctly caches and retrieves ASTs, and that it properly handles cache invalidation. Validate that the cached ASTs are used correctly during workflow execution and that the execution results are consistent with non-cached executions.

By implementing these steps, you can expect to see reduced parsing overhead, improved execution speed, and enhanced scalability of the workflow engine. It's important to carefully design the caching mechanism to avoid potential issues with cache coherence and to ensure that the system remains responsive and accurate as workflow definitions evolve.

This comment was generated by Glime.