We have just implemented an important feature which affects how the runtime engine treats your script modules. Now we have two module architectures available at the same time.
What is new here is the way you main
module is executed. In the old-style architecture, it is executed every tick, and every module required
from it is also executed every tick. In the new architecture, your main
module should contain the module.exports.loop
function which is executed in a game loop, while the rest of the main
module contents are executed only after a new global
is instantiated. It's the same with required modules - their contents are executed only once per global
instantiation, after which they get cached. You have to export some functions from your required module and run it explicitly from the main loop. The architecture is switched automatically upon detecting module.exports.loop
function in the main
.
Here is a comparison table:
OLD | NEW |
main:
|
main:
|
mod:
|
mod:
|
This new style is now recommended. It allows caching of your modules which drastically affects your script performance. Also, you can perform some initial operatons in your modules body (e.g. extending prototypes) which won't be executed every tick, thus saving your CPU.