CEF3专辑-基础篇-01-入门知识
本帖最后由 KenTien 于 2025-2-17 14:55 编辑CEF3基础
1. 入门知识
1.1. CEF简介CEF 是 Chromium Embedded Framework 的简写,顾名思义,这是一个把 Chromium 嵌入其他应用的框架。官网地址是:https://bitbucket.org/chromiumembedded/cef,这个开源项目是 Marshall Greenblatt 在 2008 年创立的,由 C/C++ 编写而成,它通过提供稳定的 API 来避免开发者被 Blink、V8、Chromium 等复杂的代码逻辑所困扰。CEF 非常注重开发者的使用体验,很多功能都有默认实现方式,遵从约定优于配置的原则,开发者可以很轻松地驾驭 CEF 框架。1.2. 为什么选CEF目前市面上的浏览器框架不少,FBrowserCEF3(通过魔改CEF3开发的易语言版本+火山C++版本 和Csharp版本),miniblink(基于C++的)这两款相较于CEF明显的优势是入手快,很快就能上手编写一个浏览器出来,但是缺点也是不能被忽视的,FBrowserCEF3目前依然在维护,但是易语言编写的程序在效率上始终是差强人意,尤其是浏览器多开方面,miniblink虽然速度快点,node.dll内核版本过低。这才是最致命的,导致许多h5的游戏不能在框架上运行。不能下一步操作。1.3. CEF结构1.3.1. CEF进程和窗口结构一个浏览器有很多个CefBrowser窗口,这些窗口都是在Browser进程中创建。Browser进程用来管理和处理回调函数消息。Renderer进程用来实现网页的渲染,每个Renderer进程包含有一个主网页mainframe和多个子网页subframe。
1.3.2. Renderer进程结构Renderer类继承CefApp和CefRenderProcessHandler类,在main函数中初始化。通过CefSettings.browser_subprocess_path配置render可执行程序路径。browser进程就会去启动这个进程去渲染网页。
1.3.3. Browser进程结构CefApp对象要继承CefBaseRefCounted类。实现browserapp的定义。同时要新建clienthandler类实现图中的回调函数接口类,用来处理拦截响应请求、管理生命周期、下载、显示加载、右键菜单等。在mian函数中初始化、启动消息循环。调用CefBrowserHost的静态方法创建browser窗口对象,在render进程的Frame中加载渲染内容。
1.4. CEF多进程和多线程1.4.1. 进程CEF3是多进程架构的,CEF3进程主要有一个Browser(浏览器)进程和多个Renderer(渲染)进程。Browser被定义为主进程,负责窗口管理,网络请求,网页管理 、网络交互。browser从服务器器请求到了响应,将html文本发送给Renderer 进程,render进程加载html,进行渲染,展示网页的内容;除此之外,Renderer进程还负责Js Binding和对Dom节点的访问。Browser和Renderer进程可以通过发送异步消息进行双向通信。主应用程序很大,加载时间比较长,或者不能在非浏览器进程里使用,则宿主程序可使用独立的可执行文件去运行这些Renderer进程。这可以通过配置CefSettings.browser_subprocess_path变量做到。1.4.2. 线程Browser进程中包含如下主要的线程:TID_UI 线程是浏览器的主线程。如果应用程序在调用调用CefInitialize()时,传递CefSettings.multi_threaded_message_loop=false,这个线程也是应用程序的主线程。TID_IO 线程主要负责处理IPC消息以及网络通信。TID_FILE 线程负责与文件系统交互。
页:
[1]