当前位置: 首页 > 科技观察

什么样的浏览器内核才能称为“自主研发”?

时间:2023-03-14 20:08:45 科技观察

声称,国产“自主研发”的红芯浏览器在宣布获得2.5亿C轮投资后,引起了大家的关注。微博用户@Touko在给自己的安装包打压后发现,所谓的自主研发不过是Chrome浏览器的“换皮”而已。红芯浏览器当晚关闭官网下载通道。原因是技术部门进行了自查。随后,其发布公告承认内部使用了Chrome内核,并在开源Chrome内核的基础上进行了二次开发。***“红芯公司”也为此事道歉,称夸大自主研发,并承认确实是在开源Chromium之上二次开发,尘埃落定。但话说回来,怎么能被技术领域认定为浏览器内核的“自主研发”呢?让我们借此机会回顾一下浏览器内核的发展史。什么是浏览器内核首先要清楚浏览器的组成。简单来说,一个浏览器可以分为两部分:Shell和Kernel。Shell是指浏览器的外壳,如菜单、工具栏等,为浏览器提供方便的用户操作界面、参数配置等。贝壳其实很丰富。大部分国产浏览器其实都是利用已有的内核来定制不同的shell,有能力的会在内核之上做一些定制化的修改。对于浏览器来说,内核就是它的核心。浏览器内核也可以分为两部分:渲染引擎(RenderingEngine)JS引擎(JSEngine)渲染引擎主要负责将网页中的元素(HTML、CSS、图片)渲染成相应的外观并输出他们到显示器或打印机。不同的浏览器有不同的渲染效果,这也是前端工程师需要适配不同浏览器的原因。JS引擎解析JavaScript语言并执行JavaScript,实现网页的动态效果和逻辑。一开始渲染引擎和JS引擎并没有明确区分,后来JS引擎越来越独立。后来说到浏览器核心,就简单的指渲染引擎。除了一些小众的非商业免费内核,比较常见的浏览器内核可以分为四种:Trident、Gecko、Blink、WebKit。下面我们分别介绍一下。Trident(IE内核)Trident的前身是微软的Mosaic(史上第一款浏览器),Trident是在Mosaic代码的基础上修改而成,对外输出的产品是微软的IE,所以又被称为“IECore”。Trident是一个开放的浏览器内核。一开始,它的内核设计就相当成熟,是Windows系统内置的浏览器,让Trident在很长一段时间内独树一帜。导致有点臃肿,这直接导致了两个后果。与W3C标准严重脱节,这也是前端工程师抗拒适配IE的原因。本身存在大量的bug和安全问题,没有得到重视和解决。IE的扩展也让很多用户转而使用其他浏览器,Firefox和Opera就是在那个时期兴起的。Whenthechoiceisnolongersingle,manydevelopersalsostarttopayattentiontotherenderingeffectofwebstandardsandnon-IEbrowsers.说到IE浏览器,再来说说一些冷知识。MacOS下的IE版本“InternetExplorerforMac”并没有使用Trident内核,而是使用Tasman内核。与Trident相比,Tasman内核对Web标准的支持更好。很高兴知道这一点。IE浏览器从最初的扩张到现在的开放态度和拥抱标准,一路上经历了很多重大的变化。比如IE8的JS引擎是JScript,IE9开始使用Chakra。这两个版本的区别非常大,查克拉在速度和水准上都非常优秀。IE9是大改版,下面已经形成断层。这就是为什么流行的前端框架VUE只敢告诉IE兼容IE9+的原因。三叉戟在中国的使用仍然占有很大的市场。大多数所谓的双核浏览器,其中之一是指Trident,就是所谓的“兼容模式”。Gecko(火狐内核)Gecko最初是Netscape浏览器(Netscape)使用的内核,后来MozillaFirefox(火狐浏览器)也采用了该内核。而在使用Gecko内核的浏览器中,由于Firefox占有最大的市场份额,所以有时也被称为Firefox内核。Gecko引擎和IE也有一些渊源。正是因为IE的扩容,微软内部的一些开发人员对其不满。他们选择离开微软和当时已经停止更新的Netscape团队的部分成员一起创建Mozilla。当时的内核是基于Mosaic内核改写的,Gecko才应运而生。并且Gecko是完全开源的,所以可以高度开发,导致大量的程序员在上面编写代码和添加功能。当时出现了一大批以Gecko为核心的浏览器,但只有Firefox被大家记住了。活的。WebKit(Safari内核)WebKit的前身是KDE团队的KHTML,WebKit中包含的WebCore(渲染引擎)和JSCore引擎来自KDE的KHTML和KJS。在比较了Gecko和KHTML之后,Apple选择了WebKit,因为它具有更清晰的源代码结构和极快的渲染速度。Apple发扬了KHTML,推出了基于KHTML改进的WebKit引擎,并用在自家的浏览器Safari上。虽然WebKit的鼻祖是Safari,但提起它我们往往会想到Chrome。事实上,Chrome早年确实使用了WebKit内核,并且已经将WebKit内核深入人心。我们稍后会详细介绍。Chromium/Blink(Chrome内核)谷歌在2008年发布了Chrome浏览器,使用的内核被命名为Chromium。Chromium在WebKit的基础上重构了代码,大大提高了编译速度,所以渲染引擎渲染出来的页面效果也和WebKit有些不同。也正是因为这个渊源,有的地方把Chromium和WebKit放在一起讨论,有的地方把它们区分开来,其实也是有道理的。后来,Google(丹麦)也开发了自己的V8引擎,用于JS的解析和执行,这就是后来Node.js的运行环境。Google将V8引擎替换为WebKit原有的JSCore,为Chrome带来了更快的JavaScript运算速度。Chromium虽然是WebKit的一个Fork,但实际上是两个项目,而且由于谷歌和苹果在很多领域存在竞争,所以双方都不想在浏览器方向上完全共享技术。双方各自独立开发,最后由于苹果的WebKit2和谷歌的Chromium沙盒设计存在冲突,强行整合会增加复杂度,谷歌索性决定从WebKit衍生出自己的Blink引擎。毕竟,它们都是基于WebKit切出的子分支代码。独立开发了一段时间后,***发现差异太大,导致代码集成成本太高,于是索性独立开发。Blink引擎后期由Google和OperaSoftware联合开发。它基于WebKit代码开发了一种更快、更简单的渲染引擎,并逐渐脱离了WebKit的影响。据说,Blink为此删除了880w行WebKit代码,最终开发出独立的浏览器内核。前面提到过,国产双核浏览器中,其中一个核心使用IE的Trident,定义为“兼容模式”,而另一个核心基本使用Chromium,称为“极速模式”。下面说说移动端的浏览器内核,主要说说系统内置的浏览器内核。上面提到的四大核心在移动端都有对应的产品。平台方面,iOS平台主要是WebKit,Android4.4之前的浏览器内核是WebKit,Android4.4之后切换到Chromium/Blink。腾讯推出的X5内核其实是基于WebKit内核的二次开发,而且是假的“双核”模式。当WebKit内核加载失败时,将使用原生的Blink内核。X5内核用在腾讯旗下的微信、QQ等产品中,一定程度上解决了自家安卓和iOS版本的渲染差异,以及安卓版本碎片化带来的渲染差异。内核开发图Trident和Gecko比较简单,就是从一个版本开始增加功能。相对来说,WebKit里面纠缠的关系更多一些。在这个图中,其实并没有体现出内核的升级和变化,以及一些细节的更换。事实上,每一次迭代都伴随着大量的代码投入、功能改动和优化。这张图只是为了让大家对WebKit的发展有一个了解。上图中将渲染引擎和JS引擎分开,其实是为了说明开发过程。我在文章开头也说过,现在说到浏览器内核,一般都是指渲染引擎内核。所以Apple开发的WebKit其实是KED团队(KHTML,KJS)开发的一个分支(WebCore,JSCore)。而Google其实是觉得WebKit中的JSCore有一些不足,所以自己搭建了一个V8JS引擎,这也是为什么Chrome敢说在一些JS效率测试中表现优于Safari的原因,基本上我也看到了JSCore的不足和站在巨人的肩膀上做了更好的优化。浏览器现状以国内浏览器现状为例,大部分公司出品的浏览器无非就是这些浏览器内核的组合。所谓双核或多核浏览器,通常是带有WebKit或Blink的Trident。其中,做了二次开发,可以切换多核,适应不同的场景。360该浏览器在国内浏览器市场算是比较早的产品了。据360发表的一篇名为《中国为什么没有自主研发的浏览器内核?》的文章称,谷歌在开发Chromium时,至少投入了30亿美元的研发费用和数百亿的推广费用。在国内,还没有一家具有同等实力的公司投入如此大的研发推广资金,打造自主研发的浏览器内核。此外,今天的Chromium和Gecko(Firefox)本身就是开源项目,产品由社区共同生产。从许可协议的角度来看,他们也鼓励在现有技术的基础上进行技术创新,而不是重复发明轮子。所以,遵守开源标准做浏览器并不丢人。Chromium本身就是基于大量开源项目的积累,才有现在的体量和市场。这就是开源的力量。与开源项目被美国人控制相比,更令人担忧的是标准本身缺乏话语权。毕竟,浏览器中的每一行代码都必须受到W3C、CABForum和RFC协议的规范。内核引擎中的每一行代码都遵循相应的行业标准。看完浏览器内核的发展史,你应该知道为什么谷歌在WebKit的基础上开发了Blink却没有人批评它,而国产红核内核所谓的“自主研发”就是个笑话***。《主流浏览器介绍》:http://web.jobbole.com/84826/《各主流浏览器内核介绍》:http://www.cnblogs.com/vajoy/p/3735553.html百度百科-X5内核:https://baike.baidu。com/item/X5%E5%86%85%E6%A0%B8/14083554维基百科。【本文为专栏作家“张扬”原创稿件,转载请微信联系作者公众号获得授权】点此查看该作者更多好文