V8嵌入开发(一)

初始化代码块

v8::V8::InitializeICUDefaultLocation(argv[0]);
v8::V8::InitializeExternalStartupData(argv[0]);
std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();

V8:这个是个大杂烩的工具类,从初始化到关闭平台都离不开它。

初始化国际化

国际化的实现由ICU库来提供对Unicode等功能的实现。在初始化时候,可以使用以下两个接口进行初始分化。

给定ICU数据文件进行初始化

v8::V8::InitializeICU(const char * icu_data_file = nullptr)

根据默认的Location数据进行初始化

v8::V8::InitializeICUDefaultLocation(const char * exec_path,
                                       const char * icu_data_file = nullptr 
                                    )

编译参数

使用 v8_enable_i18n_support 可以选择是否开启i18n功能支持。

初始化快照数据

V8有个优化功能,就是把内置函数和一些代码读取并编译,这样运行速度快。而这些编译后的内存布局可以以文件方式保存在磁盘,这样启动V8时,指定这些文件即可加快启动速度。就不用在启动时,针对内置函数进行一次编译操作。 这个文件有两个:

指定保存路径初始化

v8::V8::InitializeExternalStartupData(const char * directory_path)

以字节和结构体方式初始化

v8::V8::SetSnapshotDataBlob(StartupData * startup_blob)
v8::V8::InitializeExternalStartupDataFromFile(const char * snapshot_blob)

初始化Platform

Platform是针对不同平台包装成相同接口的一组适配层。

针对自定义Platform内容过多,在其他文档进行记录。

如无特殊需求,则使用默认的平台。

std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());

初始化V8

v8::V8::Initialize();

到此为止,V8算是初始化完毕

V8释放

v8::V8::Dispose();

关闭并清除V8绑定的Platform

v8::V8::ShutdownPlatform();

通常情况下,在释放V8前,需要调用所有Isolate实例的Dispose方法将其释放掉。