那里治疗白癜风最好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/ffxbdf/Chromium的核心模块其实叫做content,它不包括Chrome/Chromium中的一些产品功能,例如标签栏、用户切换、密码自动填充等等。所以诸如Electron、CEF这类框架就可以单独把content拎出来封一下然后提供给其他app从而实现WebView的能力。Chromiumcontent大致的架构是这个样子:实际上比这个图复杂一千倍,每个子模块单独拿出来都是一个巨庞大的系统工程。比如net模块,它不仅是一个完备且严谨的HTTPClient,更是具有现在很多网络库都不具备的先进特性,比如HTTP/2、QUIC等。并且要在很多地方做很深入的性能优化,比如DiskCache(现在Chromium里已经有两种cachebackend了)等。其他的模块更是恐怖,blink、v8、skia,随便哪一个拿出来都够出几本书,几个团队参与的了。接下来,你还需要让这些模块能完美的在一起工作,不仅可以in-process,还需要可以cross-process,里面很多模块甚至也是支持cross-machine的(比如DevTools)。设计上怎么做才能足够抽象,才能尽可能内聚。所以你能看到Chromium里很多源码都写得十分“啰嗦”,什么Delegate、Host、Client、Proxy、Factory、DelegateFactory甚至ControllerManagerProxyCreator...这种设计在解决问题的同时也会让整体代码量再膨胀近一倍。还没完,以上所有提及的东西所涉及的代码,都需要有测试,十分严谨完备的单元测试,有时测试代码比实现代码都多这是很正常的事情。...总之你只需要知道,「浏览器内核」与「操作系统内核」比在工程复杂度上有过之而无不及。...补充一点,一个浏览器内核想要活下来,它必须得遵守规范,不然就会被人唾弃死。像Trident这种不按套路出牌的迟早会被市场淘汰。Web标准是及其古老繁琐的,为了兼容性,浏览器内核的复杂度还可以无限地往上增长。在这个过程中,还不要忘了:性能、性能、性能。
转载请注明:http://blog.hzbdfjk.com/jbzs/6223.html