CEF是什么文件,CEF英文全称
Chromium Embedded Framework (CEF,Chromium Embedded Framework)是一个基于Google Chromium项目的
开源Web browser控件
,支持Windows、Linux和Mac平台。除了提供C/C接口,还有其他语言的移植版本。(铬是指铬,银白色金属)因为基于Chrome,CEF支持Webkit Chrome中实现的HTML5的特性,性能接近Chrome。
CEF还提供以下功能:
自定义插件
,自定义协议
,自定义
JavaScript对象和扩展
;可控的资源加载、导航、上下文菜单等。
支持语言:
的基本CEF框架包括对C和C编程语言的支持,但也有为其他语言提供绑定的外部项目:
Delphi
德尔福(CEF1)-DCEF 1(D (D表示德尔福)德尔福(ce F3)-DCEF 3
德尔福(ce F3)-ce F4德尔福
帕斯卡自由帕斯卡(CEF3) - fpCEF3
Go Go(ce F3)ce F2 Go
Java Java(ce F3)Java Chromium嵌入式。net.net(ce f1,ce F3)cef sharp(sharp的意思是c#)。NET(ce f1)cef glue。NET/Mono(ce F3)-Xilium。头孢胶水。NET(ce F3)ChromiumFX
Python Python (CEF1,ce F3)——CEF Python
Swift Swift(ce F3)cef . Swift
谁在使用CEF?让我们通过一些实际例子来说明大家对CEF做了什么:
各种浏览器
一些早期的双核浏览器(即Webkit)使用CEF作为Webkit内核浏览器控件。
但是
对于浏览器来说,直接在Chrome上面扩展,其实才是王道,大家现在都这么做了(各种极速浏览器)。
Evernote Client (on Windows)
Evernote允许用户将网页粘贴到笔记中,还提供插件将网页保存为笔记。
必须在客户端上正确呈现页面,这个任务就交给了CEF。
GitHub Client (on Windows)
GitHub还打包了libcef.dll。从性能的角度来看,用于显示项目的ReadMe页面必须是CEF,其他地方的UI也可能部分由页面实现。
QQ很早以前就通过嵌入IE实现了一些功能和接口。从去年开始,QQ引入了CEF,取代了以前使用IE的一些地方,这样可以使用一些基于
Webkit
的新功能,同时可以获得速度、稳定性和兼容性方面的优势。
Adobe Edge Animate Adobe Edge Reflow
Adobe推出了一整套现代网页(或HTML5?)工具,名为Edge。
Adobe Animate,用于动画制作,可以通过编辑时间轴和创建原件(Edge Animate中称为符号)来实现复杂动画。
边缘回流是设计响应式卷筒纸。有人翻译为响应式,其实就是适应性。
以上两个软件基本都是面向有Webkit内核的浏览器,所以需要嵌入一个Webkit内核来提供所见即所得的预览和编辑界面。他们都用CEF。(CEF和pure Webkit的区别后面会介绍)
Q+
在Web App的概念下,提供网页的运行环境(简而言之,一盒客户端和一些可用的API),支持IE和Webkit内核。
对于Web开发学生来说,我们推出的Webkit内核(其实是CEF)不需要考虑IE的版本兼容性,不仅提高了开发效率,还利用了HTML5的一些新特性。当时Q的应用市场、消息中心、壁纸、音乐Widget等应用都是基于Webkit内核开发的。
q项目可以说在CEF上做了更多的尝试,比如:
HTML5的音频标签用于开发音乐小部件。
有些应用程序使用HTML5的脱机功能(即带有清单文件的功能)。当然也有一些曲折,也获得了不少经验。
打包的Webkit调试工具(开发工具)。
自定义协议:比如对qplus://协议的访问可以重定向到专门的文件夹等功能。
离屏渲染(OSR):
不规则的网页窗口
(网页的不透明区域是什么形状,窗口就是什么形状)由Windows的分层窗口进行离屏渲染。为什么要在客户端嵌入CEF?举了这么多例子,这个问题就好说多了:
用于
展示Web页面
,使用各种Web服务;
做UI
带网页;使用
HTML5的特性
,如音频、画布等。包括CSS3特性等。屏幕外渲染(OSR):
所谓的OSR是
不创建真窗口,将整个页面渲染到一张位图上面
。当然不仅仅是渲染,还有一系列处理鼠标键盘事件和输入法事件的API。当无法使用真实窗口时,例如在分层窗口上,或者在游戏中渲染到纹理时,该功能特别有用。
使用OSR功能,可以制作一些有趣的效果,例如:
AlloyTeam做了Webtop,其中OSR用来做浏览器,播放器等。都是网页。
有一个Awesomium项目也支持OSR。已经有游戏项目在游戏中使用Awesomium渲染网页。(看Awesome的输出文件,应该类似于CEF的实现,是Chromium的封装。牛逼能对CEF做的也应该做。)
我在业余时间做了一个演示,用CEF把网页渲染到OpenGL的纹理,这是在游戏中应用CEF的一个小尝试,如图:
为什么是CEF?(CEF与其他替代产品)IE作为嵌入式浏览器控件有着悠久的历史。准确的说,现在我们有很多IE的替代品。
CEF vs IE:
兼容性
:IE:内核随操作系统不同,版本从6到10。这些版本在Web开发中兼容性的工作量不可小觑。
CEF:使用Webkit内核。从功能上看,一个CEF版本可以对应Chrome的一个版本号,这样Web开发就有了一个清晰的功能集,省去了考虑兼容性的工作量。
HTML5标准 新特性
:IE:当然,老版本的IE不支持最新的HTML特性和标准。
CEF:毫无疑问,Webkit和Chrome是支持新功能的先锋。
开源 跨平台
:IE:不开源,只在Windows平台上。
CEF:开源,使用的Webkit、Chromium都是开源的,开源意味着更多可定制的可能性;它跨越了三个平台:Windows,Mac,Linux3。
离屏渲染(OSR)
:IE:离屏渲染可以通过一些hack的方法实现,但是工作量不小,官方也不支持。
CEF:有一个特殊的离屏渲染模式和相应的API。
普及率
:IE:所有Windows用户都有IE,这是IE的优势。(但是有些用户的IE设置不正确,会导致无法使用。例如,jscript.dll没有注册,这导致他们无法使用JavaScript。)
CEF:你需要自己安装软件包。
为什么Webkit故意拿CEF和Webkit做比较?
最近看了一篇很好的文章,关于Webkit是什么,不是什么,为什么有这么多Webkit端口:《开发者需要了解的WebKit》。
这里有一个总结:
Webkit是网页的
解析和排布
引擎,由所有基于Webkit的浏览器共享。默认的Webkit端口是Safari,这是下载的Webkit源代码的编译版本。此外,还有其他Webkit端口,包括Chromium, QtWebkit
,在2D绘图、GPU加速、JavaScript引擎、音视频解码等方面都有不同的实现。CEF vs webkit(其实也可以说是Chromium vs Webkit)
V8引擎,skia的2D渲染,Chromium的GPU加速等。随着Chromium的出色实现,CEF也成为了一个优秀的Webkit端口。
CEF的缺点:善良。CEF也有自己的缺点和局限,不能只提优点。在这里,我来介绍一下CEF的缺点和不足:
体积
:最新版本的CEF,所有dll的体积加起来应该接近40M,压缩后估计有10M。如果你的项目本身安装包量不大,无法接收这个量,那么CEF不适合你。
当然这个体积对于现在G算的游戏应该还是可以接受的。
普通的客户端项目,根据项目本身的特点需要CEF来实现,值得增加产品的安装包这么多。当然在实现上也有一些妥协,比如安装后下载(个人认为这个意义不大,毕竟安装包的用户可以选择下载软件来加速)。
缓存
:Chrome的缓存设计为
只能有一个进程读写
,CEF也是。对于需要多开通的客户端,目前只能是
每个进程实例指定一个不同的缓存文件夹
。但这无疑增加了硬盘占用,也使得一些已经缓存的文件被多次下载(比如进程A缓存jQuery.js,进程B因为缓存不同的目录,不得不请求缓存jQuery.js一次)。OSR:
目前OSR可以用GPU加速,不像真正的窗口模式。目前OSR只能用软件渲染,也就是说不能支持一些CSS 3D效果。
但是,OSR的特点仍在不断改善,我认为这是值得期待的。