预编译v8脚本以用于多个隔离

时间:2015-03-30 04:18:59

标签: c++ multithreading v8 precompile embedded-v8

我使用嵌入式v8实现了一个类似于需求的函数,它加载了一个JavaScript文件并执行它,但由于我的程序有多个线程,因此每个线程都有自己的隔离,我是必须在指定相同源的每个线程中单独加载和编译文件。我想,如果可能的话,以某种方式缓存任何编译的脚本,以便如果另一个线程(使用另一个隔离)碰巧想要相同的文件,我可以利用某种预编译格式,并只是给它脚本运行,而不是必须在每个需要相同文件的隔离内部单独编译它。

2 个答案:

答案 0 :(得分:2)

我不知道它是如何可能的,所有Code,Script,SharedFunctionInfo等都是特定于孤立的JavaScript对象。

但是,您可以构建某个V8状态的静态快照,并且此状态始终由所有隔离加载,但这不能动态地用于运行时。这就是V8内置的功能。

答案 1 :(得分:1)

我认为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).
   */