63 lines
1.7 KiB
Markdown
63 lines
1.7 KiB
Markdown
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].
|
|
|
|
```rust
|
|
// 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).
|
|
|
|
```admonish warning.small
|
|
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.
|
|
```
|
|
|
|
```admonish warning.small
|
|
|
|
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.
|