Байткод
Иногда может быть полезно использовать заранее скомпилированный байткод вместо пересборки скрипта каждый раз при его загрузке.
Это может уменьшить время загрузки и время выполнения больших скриптов.
Для сохранения скомпиленного кода вызовите SaveByteCode метода из asIScriptModule,
предоставляя указатель на обьект, представляющий интерфейс asIBinaryStream.
Скриптовый модуль скопирует байткод и данные в этот объект с помощью метода Write.
Для загрузки байткода неободимо создать модуль asIScriptModule, как при компилировании нового скрипта.
Но вместо вызова AddScriptSection воспользуйтесь методом LoadByteCode, передавая указатель на бинарный поток.
Скриптовый модуль восстановит байткод и данные с помощью метода Read.
Запомните
- Конфигурация движка должны быть одинаковой для сохранения-загрузки байткод, иначе загрузка не получится, если функции, типы, глобальные переменные не будут найдены.
- Движок не выполняет проверку подлинности байткода, так что ответственность за проверку несет приложение.
Если байткод был изменен вручную, приложение может иметь большие проблемы.
- Байткод не зависит от архитектуры процессора, скомпилированный байт код для 32-bit платформы теоритически будет работать и на 64-bit, но могут быть проблемы с большими значениями.
Также байт код не зависит от ОС, так что скрипт под Linux аналогичен скрипту под Windows, но не стоит забывать о необходимости одинаковых конфигураций движка.
- Если приложение, которое компилирует код, отличается от приложения, которое его запускает, зарегистрируйте функции и методы без описания их.
Также вы можете указать asEP_INIT_GLOBAL_VARS_AFTER_BUILD 0 с помощью asIScriptEngine::SetEngineProperty, таким образом движок не будет инициализировать глобальные переменные после сборки скрипта.