Each script is semi-compiled while it is being loaded and syntax-checked. In addition to reducing the memory consumed by the script, this process also enhances its runtime performance (by orders of magnitude in some cases). The performance boost is greatest when SetBatchLines is -1, meaning that the script is running at maximum speed.
In addition to SetBatchLines, the following commands may also affect performance depending on the nature of the script: SetKeyDelay, SetMouseDelay, SetWinDelay, SetControlDelay, and SetDefaultMouseSpeed.
Here are the technical details of the optimization process (semi-compiling):
- Input and output variables (when their names don't contain references to other variables) and group names are resolved to memory addresses.
- Loops, blocks, IFs, and ELSEs are given the memory addresses of their related jump-points in the script.
- The destination of each Hotkey, Gosub, and Goto is resolved to a memory address unless it is a variable.
- Command names are replaced with their addresses in a jump table.
- Each line is pre-parsed into a list of parameters.
- Each parameter and expression is pre-parsed into a list of variables and functions (if any).
- Each variable and function is resolved to a memory address.