CEF架构
1、CEF架构的概述
1.1、背景:
CEF:chromium embedded Framework是由Marshall Greenblatt在08年成立的一个开源项目,目的是开发一个基于Google Chromium项目的Web browser控制器。CEF目前支持大多数编程语言和操作系统,并可以轻松的整合新的和已存在的应用。设计的目的也是为了效率/性能和方便使用。基础的框架包括了借助原生库的C/C++接口,这样将主机的应用与chromium和WebKit隔离开来。它提供了浏览器控制和主机应用程序(包括支持自定义插件、协议、JavaScript对象和JavaScript扩展)之间紧密的集成。主机应用程序可以有选择地控制资源加载、导航、菜单、打印等,当利用了相同的性能和Google Chrome浏览器具备的HTML5技术。
1.2、依赖/相关:
CEF项目依靠一堆其它由第三方维护的项目,主要又以下:
- Chromium: 基础,网络堆栈,线程,消息机制,log,进程控制,生成Web browser。
- WebKit: 提供DOM解析,布局,事件处理,渲染,HTML5JS的API。
- **V8: ** JS引擎。 Skia:2D图形库。
- Angle: 3D图形转换,和DirectX有关。
1.3、版本
3个版本:
- CEF1: 单进程工具调用chromium Webkit API 。
- CEF2: 多进程工具建立在Chromium browser 。
- CEF3: ** 多进程工具调用Chromium**。
1.4、Content API
通用API用法:
所有版本的CEF都公开一个简单好用的API(让用户从Chromium和Webkit复杂的代码中分隔开来),详细如下:
- 调用**CefInitialize()**对CEF初始化。
- 调用CefRunMessageLoop() or **CefDoMessageLoopWork()**来在UI消息上处理事务。
- 调用CreateBrowser() or CreateBrowserSync()并传递一个CefClient事例来创造一个browser窗口。
- 在程序退出前调用**CefShutdown()**来关闭CEF。
1.5、CEF1
CEF1使用单进程架构,并直接将Chromium和Webkit整合到客户端应用程序中。单进程的优点包括了建设内存的使用和进一步与客户端应用的耦合。缺点有某些类型的加载内容性能低,和由于同进程中运行Flash插件的崩溃问题。
CEF1 API用法:
-
CefApp,此接口用来传递到CefInitialize(),和允许应用程序定制全局,如资源加载,代
理。 -
CefClient,此接口用来传递到CefCreateBrowser() or CefCreateBrowserSync(),和充当单独CEF Browser事例和客户端应用程序的连接,也负责请求和显示处理的接口 。
-
CefBrowser,公开由浏览器提供的功能。包括前进后退导航,来源检索,加载请求等,一个CefBrowser可能有一到多个子类的CefFrame对象
线程注意事项 。 -
CEF1包括UI,IO和FILE线程。 UI线程创建Browser窗口,用来所有与WebKit和V8的交互,IO