Прекомпилировать скрипт v8 для использования в нескольких изолятах

Я реализовал функцию, похожую на ‘require’, используя встроенный v8, который загружает файл JavaScript и выполняет его, но, поскольку моя программа имеет несколько потоков, и поэтому каждый поток имеет свой собственный изолятор, мне приходится загружать и компилировать файл отдельно в каждом потоке, который указывает один и тот же источник. Я хочу, если возможно, каким-то образом кэшировать любой скомпилированный скрипт, чтобы, если другой поток (использующий другой изолят) захотел получить тот же файл, я мог бы использовать какой-то предварительно скомпилированный формат и просто дать ему скрипт для запуска вместо необходимость отдельно компилировать его внутри каждого изолята, которому нужен один и тот же файл.

3

Решение

Я не понимаю, как это возможно, все Code, Script, SharedFunctionInfo и т. Д. Являются объектами JavaScript, специфичными для изолята.

Однако вы можете создать статический снимок некоторого состояния V8, и это состояние всегда будет загружаться всеми изолятами, но это не может быть динамически во время выполнения. Вот как делают встроенные V8.

2

Другие решения

Я думаю, ScriptCompiler может помочь вам. С ScriptCompiler :: CompileUnboundScript вы можете создавать и использовать кэшированные данные для скрипта. Я не тестировал (пока), но комментарий выглядит многообещающим:

/**
* Compiles the specified script (context-independent).
* Cached data as part of the source object can be optionally produced to be
* consumed later to speed up compilation of identical source scripts.
*
* Note that when producing cached data, the source must point to NULL for
* cached data. When consuming cached data, the cached data must have been
* produced by the same version of V8.
*
* \param source Script source code.
* \return Compiled script object (context independent; for running it must be
*   bound to a context).
*/
1

По вопросам рекламы [email protected]