PPAPI插件与Node 插件对比

最近公司项目需要从cef向electron过度,相应的插件也需要做升级,其实ppapi插件在electron中也是可以工作的,只是某些场景效率会差一些。
以下是个人看法,有错误之处请不吝指正。

PPAPI

插件使用固定接口作为一个module 加载到渲染进程,针对对应的标签对象实例化 instance ,通过 postmsg 、handlemsg方式与 js 交互,这种交互方式有很大局限性,需要两端对齐交互协议,
在渲染方面,ppapi 插件渲染实际上是在一块代表图像的内存上渲染,渲染完毕后通知浏览器,浏览器在合适的时候更新。这似乎还好,但是如果标签是视频显示作用,而且多路显示也就是多个标签效率会比较差。

node addon

node = libuv + v8 +sysapi
electeon = node + chromium + api
node 插件最大不同之处在于插件作为 node 外部扩展被加载,与v8同在一个内存环境。 这样带来的好处是 js 可以与之直接交互。而 electron 中的v8 是将 node和 chromium 两个中的v8融合,这样在 electron 中插件可以和 js 相互调用。
在渲染方面,由于可以直接与 js 交互,渲染可以使用原生的 webgl 这样针对多路视频场景开销会相对低,效率也会高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 CEF(Chromium Embedded Framework)加载插件时,需要进行以下几个步骤: 1. 创建一个CEF应用程序,详见官方文档。 2. 创建一个CEF插件,可以使用NPAPI(Netscape Plugin Application Programming Interface)或PPAPI(Pepper Plugin Application Programming Interface)。 3. 将插件文件放入应用程序所在目录的“plugins”文件夹下。 4. 在应用程序启动时,使用以下代码加载插件: ``` CefRefPtr<CefPluginManager> plugin_manager = CefPluginManager::GetForApplication(); if (plugin_manager.get()) { CefString path = "plugins/myplugin.dll"; // 插件文件路径 plugin_manager->AddPluginPath(path); } ``` 5. 在CEF窗口类中实现以下方法,用于加载插件: ``` virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line) OVERRIDE { if (process_type.empty()) { // 加载 NPAPI 插件 command_line->AppendSwitchWithValue("enable-npapi", "1"); } else if (process_type == "renderer") { // 加载 PPAPI 插件 command_line->AppendSwitchWithValue("enable-ppapi", "1"); } } ``` 6. 在HTML中添加以下标签来加载插件: ``` <object type="application/x-myplugin" width="0" height="0"> <param name="plugin_url" value="myplugin.dll"> </object> ``` 其中,type属性为插件类型,值为插件的MIME类型,如“application/x-myplugin”;width和height属性为插件的宽度和高度;param标签中的plugin_url属性为插件文件路径。 以上是一般情况下加载CEF插件的步骤,不同的插件类型和框架可能会有所不同。建议在开发过程中查阅相关的文档和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值