rhai/doc/src/start/builds/performance.md
2020-07-13 13:41:01 +08:00

1.7 KiB

Performance Build

{{#include ../../links.md}}

Use Only One Integer Type

Some features are for performance. For example, using [only_i32] or [only_i64] disables all other integer types (such as u16).

If only a single integer type is needed in scripts - most of the time this is the case - it is best to avoid registering lots of functions related to other integer types that will never be used. As a result, [Engine] creation will be faster because fewer functions need to be loaded.

Use Only 32-Bit Numbers

If only 32-bit integers are needed - again, most of the time this is the case - using [only_i32] disables also i64.

On 64-bit targets this may not gain much, but on some 32-bit targets this improves performance due to 64-bit arithmetic requiring more CPU cycles to complete.

Minimize Size of [Dynamic]

Turning on [no_float], and [only_i32] makes the key [Dynamic] data type only 8 bytes small on 32-bit targets while normally it can be up to 16 bytes (e.g. on x86/x64 CPU's) in order to hold an i64 or f64.

Making [Dynamic] small helps performance due to better cache efficiency.

Use ImmutableString

Internally, Rhai uses immutable [strings] instead of the Rust String type. This is mainly to avoid excessive cloning when passing function arguments.

The encapsulated immutable string type is ImmutableString. It is cheap to clone (just an Rc or Arc reference count increment depending on the [sync] feature).

Therefore, functions taking String parameters should use ImmutableString or &str (which maps to ImmutableString) for the best performance with Rhai.