https://zhuanlan.zhihu.com/p/373025534
为何市场上的多数浏览器基于chromium开发而不是cef。 1 Chromium和cef的区别和联系- chromium是谷歌主导的浏览器开源项目,基于chromium可以方便快捷定制一款浏览器,国内外多数浏览器也基于此开发。
- Cef是chromium项目的一个分支,抽离webkite和内核层,提供content层上的API接口,把复杂的底层接口进行封装,更加友好的给用户使用,多数用于客户端的开发,通过内置页面实现快速开发客户端界面的效果。当前钉钉、企业微信、VSCode等多数客户端都使用此框架开发。
- 他们都可以渲染网页,都是开源框架,chromium是浏览器的开源应用,针对浏览器的常用功能做了大量工作,cef抽离渲染部分,应用在客户端的内嵌网页场景,阉割了部分功能,方便用户学习和使用。
2 浏览器能否基于cef的开发2.1 如果能有哪些优势,有哪些问题如果cef能满足日常的网页浏览,方便用户使用,基于此假设进行如下论证。 1、可以更加快速的上手浏览器开发,原因:cef接口隔离比较友好,提供少量API即可实现满足渲染一个页面 2、快速实现内核升级,原因:隔离比较好,cef本身会把底层内核隔离出来一套接口,把上层应用给阉割掉。 3 问题难点如果要实现一个包含常用功能的浏览器,需要先思考如何解决如下问题。 因为cef会阉割掉大多数应用层功能如:UI、Chrome、Content等,导致当前浏览器常用功能在cef中需要自己实现。 3.1 如下技术点cef当前不支持,需要思考如何实现1、如何实现UI框架,支持各类UI展示、右键菜单、横幅、气泡,此UI框架涉及最广,而且要求比较对性能和扩展性、开发友好等都有较高要求。 2、如何支持地址栏,实现地址栏各个功能,如联想提示、历史记录联想、搜索文字联想、收藏联想、地址栏安全标识等等 3、如何支持收藏,收藏历史、收藏搜索、收藏同步、收藏本地保存和收藏界面展示 4、如何支持开发这模式,比如:F12等各类HTML5的调试,此功能在cef可以通过开接口实现F12,cef本身支持一部分开发这模式,默认禁掉,需要重新捕获消息 5、如何支持各类内置页,页面的JS扩展接口、主页设置、各类选项设置页面,这个页面比较多几十个,是chrome浏览器功能入口 6、如何支持插件功能,插件拖进、卸载和运行等 7、如何标签的管理,标签拖拽如:标签拖出新开一个浏览器,拖进可以合并2个浏览器窗口等 8、如何实现浏览器的同步机制 9、如何实现浏览器翻译功能 10、如何实现下载模块、多窗口模块、恢复列表 11、如何实现鼠标手势、Favicon模块 12、UA功能、新标签页
|