This repository has been archived on 2025-08-04. You can view files and clone it, but cannot push or open issues or pull requests.
rhaj/rhai_engine/rhaibook/engine/optimize/index.md
2025-04-19 08:10:30 +02:00

1.7 KiB
Raw Blame History

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.