轉: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開始擼,那必然會遇到噸的傷害。欲知後事如何,且聽下回分解