camunda / feel-scala

FEEL parser and interpreter written in Scala
https://camunda.github.io/feel-scala/
Apache License 2.0
119 stars 46 forks source link

Significant performance degradation of expressions' evaluation switching from 1.16 to 1.17 #814

Open eugene-furs opened 4 months ago

eugene-furs commented 4 months ago

Describe the bug After switching FEEL implementation from 1.16 to 1.17 it has been observed that performance of expressions' evaluation significantly degraded. In our test case with 6 million evaluations (6 expressions 1 million times each) the performance became about 6 times slower for not pre-parsed expressions and 12 times slower for pre-parsed expressions.

To Reproduce Steps to reproduce the behavior (our test case setup):

  1. Prepare 6 FEEL expressions to be evaluated on provided context
  2. Generate 1000 contexts (Map<String, Object> in our case)
  3. 1000 times: evaluate each expression for each context and measure time of overall evaluation running the test with FEEL 1.16 and 1.17

Alternatively the attached test code can be used switching FEEL versions in pom.xml. FEEL-Perf.zip

Expected behavior About the same performance of expressions' evaluation or reasonable low performance degradation

Environment

saig0 commented 4 months ago

@eugene-furs thank you for raising this and making it easy to reproduce. :+1:

Currently, the performance of the FEEL engine is not our highest priority. However, I will have a look and try to confirm the results (using my benchmark project https://github.com/saig0/feel-scala-jmh).

Everyone is welcome to find and fix performance issues. :rocket:

saig0 commented 3 months ago

I can confirm the performance degradation from 1.16 to 1.17. :heavy_check_mark: The evaluation is 10 to 100 times slower than before (ref). :snail: