• 环亚ag88登录 2018-12-16
  • ag环亚官网平台 2018-12-12
  • 环亚在线娱乐 2018-12-12
  • ag88登录 2018-12-07
  • ag环亚游戏 2018-12-04
  • ag88 2018-12-04
  • ag88环亚手机登录 2018-12-01
  • 咸阳两女子冒充尼姑四处化缘 假行善真骗财终落网尼姑落网-要闻 2018-11-27
  • 习近平谈构建人类命运共同体 2018-11-20
  • 習近平同塞爾維亞總統尼科利奇舉行會談 2018-11-05
  • 把個人理想追求融入國家和民族事業中——廣大知識分子和青年學生黨員掀起學習貫徹黨的十九大精神熱潮 2018-11-05
  • 中国创新创业生态系统将影响世界 2018-10-03
  • 银行在行动 结构性存款将更合规 2018-09-28
  • 佛山南海湾森林生态园天气,佛山南海湾森林生态园天气预报,佛山南海湾森林生态园天气预报一周 2018-09-28
  • 剧烈运动韧带受伤 慎涂外用药油 2018-08-29
  • 立即下载 知乎日报 每日提供高质量新闻资讯

    「红芯」造假可耻,不过自主研发浏览器内核的有多难?

    图片:Yestone 邑石网正版图库

    罗志宇

    ag88环亚备用网址 www.qhwanhong.cn 来来来, 让写过内核的人给你们聊一聊 ^^

    其实内核分类啥的,真的没有那么复杂。 要了解难度啥的, 看看浏览器本身发展的历史会清楚很多。

    浏览器的内核从头开看的话, 其实并没有那么多。 Google 的 Blink 来源于 苹果开源的 Webkit,而苹果的开源的 Webkit 来源于 KTHML, 属于 KDE 的一部分, 而 KDE 基于的 QT, 是 Trolltech 开发的, 很多 KHTML 的贡献者其实是来自于 Trolltech.

    因此,Google Chrome 和 Safari 这个分支其实是来自于 Trolltech .

    很多人不知道的是, Trolltech 也是一家挪威公司, 而且就在 Opera 的楼下。 他们是四楼, 我们是五楼。 我刚加入 Opera 的时候, 他们还和我们共享食堂。很多员工彼此都是好朋友,连代码都是部分共享的. 因此 KTHML 和 Opera 的自有引擎 Presto 架构非常类似。

    现在你看到了吧, 内核架构其实就三个分支

    • KTHML, Opera -> Webkit -> Blink (Chome, Opera, Safari)
    • Netscape -> Firefox
    • Trident or whatever -> IE

    两个系列是美国的,一个系列是挪威的。

    然后有人就要问, 美国做这些东西很正常, 毕竟 IT 起步早,发展快。为啥挪威这种莫名其妙的国家也做浏览器, 还做得风生水起的。。

    很大程度上和这个兄弟有关系。这个兄弟叫 Haakon Wium Lie, 也是个挪威人, 发明了 CSS. 然后做了 Opera 的 CTO.

    H?kon Wium Lie - Wikipedia

    Haakon 在 W3C 的影响力非常大, 毕竟 CSS 之父。 于是带了一大票挪威人在 W3C 里面制定标准。 当年我旁边办公室里面随便拎一个出来,都是 W3C 某个讨论组的主席啥的. 然后事情就比较有意思了。 CSS 规范里面其实非常多的地方定得非常的绕。 如果你去看 Opera 里面的一些 CSS 实现方法, 你会发现实现的非常优雅。而其他浏览器就更像七拼八凑出来的。这让我非?;骋?,其中这些规范是 Opera 实现好了, 再提出来的 ...

    现在看清楚了吧。从历史原因来说,美国有资本优势,毕竟互联网泡沫还在, 而挪威有标准影响力。其他任何一个国家研发浏览器在那个时候来说, 都是费力不讨好的事情。

    从技术上来说,浏览器研发的难度更多的像是一个系统工程。浏览器的各个组件研发难度其实都不大。

    包括很多人认为的 Javascript engine。 其实除非像 V8 那样子往死里面优化,单纯的 javascript engine 其实相当独立且并不复杂

    Opera 里面很长一段时间做 javascript engine 就一个人。javascript engine 和浏览器之间的耦合非常标准, 所以做 javascript engine 和 浏览器其他部分的人几乎没有交集。于是这个哥们长达数年时间, 自己跟自己开会,自己跟自己汇报,自己定计划。 最后离职的理由是和其他部门交流太少,实在是太孤独。。

    做为系统工程,浏览器最大的挑战的是浏览器承载的网页是不确定的,虽然标准还在, 但是扛不住无限种可能。

    比如你并不知道在明天在世界某个角落的人会不会发精神病在页面里面写上一万个 canvas. Opera 当年为了追求小巧, 解析器用的是简单的递归下降。 于是你也不知道是不是有一个精神病会写上一万层标签嵌套搞挂你的栈。

    而无限可能带来的另外一个问题是: 你在解决一个新的可能时。你怎么知道没有搞挂另外一个已经解决过的可能呢?

    如果是非主流浏览器, 解决这问题事情都需要靠暴力的, Opera 因为做得早,积累了非常多的回归测试。我记得放弃掉 presto 的时候, 大概 14 万个测试用例, 有一个服务器集群每天晚上都跑。 新的提交要是出现了回归,集群马上把报告用邮件自动发给提交者。

    如果是主流浏览器,那就好办多了,只需要保证满足标准就行(比如 Chrome), 或者不要自己砸自己老版本的浏览器(比如 IE). 因为网页反过来, 会来适配你,

    于是如果你要研发一个浏览器内核,那你肯定是从 “非主流浏览器” 浏览器开始,要不然你像 Google 一样,找一个 “主流浏览器” 的内核二次开发,然后强行推广成为一个主流浏览器。

    要不然就像 Opera 一样暴力解决。

    而技术本身,相对于系统工程本身,并不是很大问题。从某种意义上面,这和操作系统蛮类似的,不同的仅仅在于,浏览器需要适应无限可能的页面,而操作系统需要适应无限可能的硬件。

    而我非?;骋晒谟腥魏纬逃心托睦醋稣飧鍪虑椤?/p>

    [1] WebKit - Wikipedia

    [2]The Qt Company - Wikipedia

    知乎用户,超级码农

    参与过一款大家可能不太知道但是很多人实际用过的嵌入式浏览器开发。说很多人用过,因为 PSP、PSV、PS3 以及老任的 DS、Switch 的浏览器就是这款。(还包括日本大多数非智能手机)

    https://en.m.wikipedia.org/wiki/NetFront

    浏览器内核的主要构成部件包括文本语法解析器,layout 引擎和脚本执行器。当然下面还有网络协议栈。

    文本语法解析器主要负责 HTML/CSS 文法的解析;

    Layout 引擎负责排版和渲染;

    脚本执行器则负责网页当中的动态内容,比如 Javascript 的解析执行。

    编写一个浏览器引擎,首先需要的是良好的 RFC 阅读能力,也就是各种标准的阅读能力。

    接下来,是将这些标准转化成实际代码的能力。

    这部分要说有多难,其实我觉得准确地说是有多烦(繁)。如果你是一个编程基础扎实的人,并且有恒心有毅力,将这几十篇每篇几百上千页的标准文档巨细无遗地翻译成代码,那么至少一个 working 的浏览器内核就出来了。

    接下来,如同一些其它回答提到的,就是兼容性问题。为什么按照标准写的浏览器会有兼容性问题?这个在历史上很操蛋,因为微软又是置标准而不顾利用自己的市场占有率强推非标准浏览器(如 IE6),致使互联网上相当一部分内容其实都是非 W3C 标准(而其实是微软标准,当然,其实微软也没有标准,IE 各个版本之间也有很多兼容问题)的。其它浏览器不得不模拟 IE6 的各种非标行为,甚至是 bug。这就是我在做这方面工作的时候,各家浏览器公司最耗费资源的地方。

    再后来,微软这方面守规矩一些了。但是市面上动态内容的复杂度不断提升,甚至出现了在浏览器里跑 linux 这种怪胎。于是乎大家又开始拼脚本执行器的优化。

    总之,市面上这些浏览器最早的内核相对来说都没有那么高门槛。门槛在于过去的这几十年发生的各种操蛋的事情,现在已经无法再重新经历。因此要从头写一款与现行商业引擎兼容性很高的内核(也就是能正确显示市面上绝大数有着各种各样“方言”的内容),与其说难不如说除了大幅抄袭没人能记住每个细节。就如中华文明的形成一样,it just works。

    所以,如果目标是互联网,在开源核心上修改本来并没有什么,甚至是个明智的决定。能够深入理解并定制化一个拥有如此复杂历史沉淀的代码块,这挺不容易的。

    但是如果只是利用内核本身提供的插件架构,写了几个过滤器换了个皮肤这种的,还要标榜自己开发的内核,那就真是恬不知耻了??瓷缜幸桓鲎罨镜脑?,就是要尊重别人的劳动。能够看懂别人的劳动并在这个基础上继承发挥,这已经足够荣耀了。不能理解这一点的人,觉得必须将所有光环戴在自己头上的人,一定是底气不足,知道自己实际并没有做什么。

    扫描二维码下载知乎日报

    支持 iOS 和 Android
    二维码下载知乎日报
    阅读更多 关于山东寿光的洪水,捋一捋成因的「天灾」和「人祸」 ag88环亚备用网址