转:https://zhuanlan.zhihu.com/p/29101613?utm_medium=social&utm_source=qqjavascript
你们好,我又来了。这篇是21天自制原子弹的姐妹篇。css
开个玩笑……从这篇开始, 咱们来点干货,如何从blink打造一个能够实用的浏览器组件。java
chromium从零几年搞到如今,已经彻底变成一个无所不包的庞然大物。node
若是你只是想要一个能浏览网页的组件,方便嵌入到本身的程序里,或者想用网页来作界面--例如QQ音乐,网易云音乐那样,c++
那么chromium的那堆多进程、mojo通讯、Chrome Apps 框架、Aura Shell、增量升级系统、Chrome Extensions 、headless模式、P2P 通讯库,native_client、pdf、ppapi、沙盒机制等等一堆乱七八糟你听都没听过的东西都不会须要。程序员
然而只要用了chromium的内核(例如cef,elecTron,nwjs之类),这堆东西除了占用系统资源外,你还不得不都打包带上。web
这时候你就会有个强烈的想法,我不须要这堆乱七八糟的功能,只要能浏览大部分网页的排版渲染组件能够么。api
答案是确定的。浏览器
webkit内核就是为此而生。但这里有个问题,chromium虽然当年是使用webkit内核,但自从和苹果分道扬镳后,把webkit更名成blink不说,代码和结构彻底是面目全非,并且最重要的是blink已经不是像webkit那样是一个独立的组件了,而是chromium那堆几百个第三方库里一个小小的组件,全部外部设施都依赖于chromium的其余组件了。网络
咱们来看看blink目前须要依赖哪些组件:
那咱们如何在尽可能少的使用chromium代码基础上,实现上诉一堆功能和组件呢?
这是目前个人解决方案:
说到这里,你们确定有个疑问:既然这么多都用webkit,那为啥咱们直接拿webkit过来不就好了。
实际上是能够的。webkit发展到今天,已经彻底和chromium分开发展了(当年有一阵子谷歌的人也一直在给webkit提代码,后面苹果把他们都踢走了)。并且webkit就是个完整内核,你用来作轻量级组件正合适。但我有几个缘由仍是放弃了:
既然放弃了webkit,从chomium开始撸,那必然会遇到吨的伤害。欲知后事如何,且听下回分解