首页 > 解决方案 > 在 v8 引擎中执行无源字节码

问题描述

我尝试在我的项目中使用此源https://github.com/JoseExposito/v8-compiler/blob/master/addon/v8-compiler.cpp 。但是从 runScript 调用的函数 compilation_cache() 总是返回 NULL。有什么问题?我需要在源代码中修复什么以使用更高版本的 v8?另外,为什么最新版本的v8 FLAG_serialize_toplevel没有flag?

标签: node.jsv8embedded-v8libv8

解决方案


这里有两个部分:

首先是一个警告:你绝对不应该使用i( internal) 命名空间的任何部分来编写代码。内部命名空间中的 API 并不总是反映 JS 的实际运行方式(由于优化),而且它们经常更改且没有警告。

对于您从 V8 内部复制的代码,V8 已经提供了一个 API 来生成和使用“缓存数据”,这只是序列化形式的字节码。下面是一个来自 Node.js 源代码的示例,说明如何生成代码缓存。

其次,您的实际问题:V8 将始终使用特殊哈希(基本上是 V8 版本和源文本长度)对字节码进行检查,如果不匹配,则不会使用字节码缓存。这就是为什么更改 V8 版本会导致字节码被拒绝。


推荐阅读