Hi all,
I am facing the issue of having large template strings containing an unknown number of variables, and those templates need to be bound thousands of times.
Due to performance constraints, I would like for this procedure to be optimized. I had multiple ways of doing it.
Threads such as this one suggest to use EEx. I saw that I could use EEx.compile_string to get a quoted expression, that I can resolve with Code.eval_quoted (on the benchmark : eex). I also benchmarked a direct call to EEx.eval_string (eex_eval_string).
The previous implementation of this was to simply parse the content of the string for each variable, using a Regex. I added that method to the benchmark (base).
I also tried a manual implementation. The template is parsed once, and broken down into parts. During the binding, I simply append each variable value and each part (manual).
You can see the implementation here, the benchmark here and the results here.
Conclusions :
- Manual implementation outperforms the rest, by a wide margin.
- EEx seriously underperforms for this task (40x-170x slower than manual). Maybe I’m not using it right.
- Creating this benchmark was incredibly simple. Kudos to Benchee.
Please do not hesitate if you have feedback, or if you’d like to add another method to the test.


















