node.js - 在 v8 引擎中执行无源字节码
问题描述
我尝试在我的项目中使用此源https://github.com/JoseExposito/v8-compiler/blob/master/addon/v8-compiler.cpp 。但是从 runScript 调用的函数 compilation_cache() 总是返回 NULL。有什么问题?我需要在源代码中修复什么以使用更高版本的 v8?另外,为什么最新版本的v8 FLAG_serialize_toplevel没有flag?
解决方案
这里有两个部分:
首先是一个警告:你绝对不应该使用i
( internal
) 命名空间的任何部分来编写代码。内部命名空间中的 API 并不总是反映 JS 的实际运行方式(由于优化),而且它们经常更改且没有警告。
对于您从 V8 内部复制的代码,V8 已经提供了一个 API 来生成和使用“缓存数据”,这只是序列化形式的字节码。下面是一个来自 Node.js 源代码的示例,说明如何生成代码缓存。
其次,您的实际问题:V8 将始终使用特殊哈希(基本上是 V8 版本和源文本长度)对字节码进行检查,如果不匹配,则不会使用字节码缓存。这就是为什么更改 V8 版本会导致字节码被拒绝。
推荐阅读
- delphi - for 循环的不正确行为
- amazon-s3 - 使用 Airflow 删除 S3 存储桶对象
- android - 如何在Android中调整和压缩质量相对较好的图像?
- javascript - 如何触发使用闭包变量的事件?
- java - 我这样写,但仍然收到错误“与 XXX 的连接被泄露。你忘记关闭响应正文了吗?”
- java - 实时更新活动提要 UI (getstream.io/stream-java)
- c++ - C++ 从 Internet 获取 localtime/gmtime 以获得许可
- java - Java 打印/保留错误中的大浮点数和双精度数。这种行为是由于有效数字的数量造成的吗?
- regex - 使用 VBA 从字符串中删除文本
- c# - 如何使用 Mailkit 读取电子邮件正文中的内联图像