1.7 KiB
Script Optimization
{{#title Script Optimization}}
{{#include ../../links.md}}
Rhai includes an optimizer that tries to optimize a script after parsing. This can reduce resource utilization and increase execution speed.
Script optimization can be turned off via the [no_optimize
] feature.
Optimization Levels
{{#include ../../links.md}}
There are three levels of optimization: None
, Simple
and Full
.
The default is Simple
.
An [Engine
]'s optimization level is set via [Engine::set_optimization_level
][options].
// Turn on aggressive optimizations
engine.set_optimization_level(rhai::OptimizationLevel::Full);
None
None
is obvious – no optimization on the AST is performed.
Simple
(Default)
Simple
performs only relatively safe optimizations without causing side-effects (i.e. it only
relies on static analysis and [built-in operators] for [constant] [standard types], and will not
perform any external function calls).
After _constants propagation_ is performed, if the [constants] are then modified (yes, it is possible, via Rust functions),
the modified values will _not_ show up in the optimized script.
Only the initialization values of [constants] are ever retained.
Overriding a [built-in operator] in the [`Engine`] afterwards has no effect after the
optimizer replaces an expression with its calculated value.
Full
Full
is much more aggressive, including calling external functions on [constant] arguments to
determine their results.
One benefit to this is that many more optimization opportunities arise, especially with regards to comparison operators.