reorganize module
This commit is contained in:
62
_archive/rhai_engine/rhaibook/engine/optimize/index.md
Normal file
62
_archive/rhai_engine/rhaibook/engine/optimize/index.md
Normal file
@@ -0,0 +1,62 @@
|
||||
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.
|
Reference in New Issue
Block a user