现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

新手必看:如何开发一款浏览器

2014-04-07 05:25 工业·编程 ⁄ 共 2074字 ⁄ 字号 评论 8 条
文章目录

    作为互联网时代用户日常使用最为频繁的一种产品,浏览器领域一直是各大厂商的“兵家必争之地”,甚至有“得浏览器者得天下”的说法。桌面端IE、Firefox、Chrome的争夺一直非常激烈,最近又有腾讯、搜狗、360等公司的加入,各自都开发出具有自身特点的浏览器。在移动端也一样,UC浏览器、海豚浏览器、猎豹浏览器、QQ浏览器等等都加入到这场混战之中。

    那么,想要开发出一款浏览器,需要有哪些知识储备,又有哪些难点呢?

相关阅读

----详说浏览器开发

问题之一:开发一款浏览器内核需要学习哪些方面的知识

    这是一位准备做毕业设计的学生提出的,他“不准备直接用现成的开源浏览器内核(比如WebKit或者KHTML这些)来做套壳,而是打算自己用C/C++从零开始,写一个简单的浏览器内核,也就是所谓的排版引擎或者网页渲染引擎。考虑到自己的能力,目标暂定为能够支持html1.0”。

冬眠给出了比较详细的解答:

网页开发:你要知道inline与block有什么不同,什么是box model,ie是怎么实现的,标准的是怎么样的。

网络方面:浏览器会使用URL,表单提交,下载,DNS等一系列知识,深一些的比如说在chrome下面输入chrome://dns,看看什么叫 prefetch DNS,浅一点至少要知道怎么实现表单提交,表单提交分那些格式。在网络那一层要怎么拼。

编译原理:简单的是状态机,具体的是CSS的解析,Javascript的解析。其实光HTML,CSS的解析就够做一个毕设的了,举一个简单的例子,浏览器是边下载边解析,边显示的,这个地方就有不少的坑等着你,光拿一个开源的xml解析器可不行,html的解析中还有图文混排等功能,整个地方又是无数的坑。 就不要说javascript的引擎了,龙书中写的只是一小部分,里面还牵涉到什么JIT等一大堆东西。

图形:硬件加速,你在chrome浏览器中地址栏中输入 chrome://gpu,里面出现频率最高的就是Hardware accelerated。

前UC浏览器产品经理张瑞从浏览器的工作周期角度给出了建议:

首先是联网模块:包括域名解析(这个可以忽略)、发起请求,连接线程的管理等(单线程请忽略)。

然后是解析模块:包括了html的解析、DOM树的建立等。尤其是html的解析,会涉及到容错方面的考虑,DOM树要考虑各种场景下的效率(好吧,毕业设计可以不考虑效率)。

接下来是渲染模块:根据你建立的DOM树,按照网页所描述的内容展示字体、色块等,这个没什么好说的。

还有其他,比如网页对象的管理、页面事件的响应、插件管理。

问题之二:开发一款浏览器的难点有哪些

    范围并不限于PC端还是移动端的浏览器。

余天升认为难点在于浏览器的两个关键部分:布局引擎和JavaScript解释器。

布局引擎就是我们常说的浏览器的内核,主要处理HTML和CSS。简单的说,就是它决定了什么东西该在什么地方怎么样显示。对于网页这种视觉工程来说,布局引擎的重要程度不言而喻。

对于布局引擎的难点,大概有这些方面:

对标准的支持和扩展: 有一些标准的内容可能会难以实现,或者会带来一些安全的问题,所以各大浏览器对于标准都会有一些的裁剪,而另外又有一些拓展。

布局性能: 布局引擎的性能,包括内存、CPU等指标,能够直接影响用户的体验。简单来说就是显示快不快,占用内存多不多。

其他: 类型稳定性、可拓展性这样的一些其他类型软件共有的特点。

JavaScript解释器本来应该是浏览器内核的一部分,但是现在前端大量对JavaScript的应用,和浏览器厂商对这个部分的重视,开始分离出来了。既然拿出来了,JavaScript解释器的性能,包括时间性能、内存性能这些因素就很重要了,需要各种优化编译过程,优化生成代码,优化指令的工作。

其他的一些难点,就是一些软件上通用的东西,如何挖掘用户需求,如何让用户使用得更满意,比如单窗口向多标签的转变,快速拨号,鼠标手势这些功能。

程序猎人认为问题应该分为技术难点和非技术难点:

如果是非技术难点,最大的就是人才和资金。如果找不到合适的人才,筹不到足够的资金,开发工作是否能开始都是个问题。

如果是作为商业产品开发,就随之而来另一个难点:盈利方式。现在免费浏览器满天飞,你花了钱开发了浏览器,如何与其他产品竞争,如何收回成本甚至盈利。

再看技术难点,余天升说的比较全面。但顺序上,我觉得稳定性和可靠性要更重要一些。对于几乎一切软件,这两点都是最重要的。只不过要求的标准看要定多高了。浏览器肯定不需要银行系统那么高的可靠性和稳定性。

另外,从技术上看,你是要重新开发一个渲染引擎还是利用现有引擎。如果要重新开发引擎,那么难点就会多很多。各种协议、标准的支持,自身的特性,性能都是不得不考虑的问题。

    由此看来,想要开发出一款浏览器,并不是一件容易的事情,其中涉及到的各种知识和需要处理的难点都非常多,不过这么多的付出也会得到相应的回报。读者们,你是否也考虑过开发一款浏览器呢,对于如何开发一款浏览器有什么样的看法呢?欢迎加入讨论。

目前有 8 条留言    访客:8 条, 博主:0 条

  1. 爱求索 2014年04月12日 5:41 上午  @回复  Δ1楼 回复

    建议参考开源浏览器。这不是看什么书的问题,它要求完备的软件开发知识和流程,熟悉操作系统、网络编程、HTTP、TCP、JS等等。。。

  2. 爱求索 2014年04月12日 6:06 上午  @回复  Δ2楼 回复

    大概的知识:

    1. 对html, css, xml这些内容有极其深刻的理解,因为要根据这些内容生成网页结构。

    2. 对程序绘图、数字成像要有极高的造诣。能根据html ,css, image生成相应页面。

    3. 精通HTTP协议,w3c万维网规范。

    4. javascript虚拟运行环境解释

    这里的任何一项,都是相当深奥的。

    可以阅读firefox, chrome之类的源代码

  3. 爱求索 2014年04月12日 6:06 上午  @回复  Δ3楼 回复

    现在比较靠谱的做法是用开源引擎二次开发,比如webkit

  4. 爱求索 2014年04月12日 6:07 上午  @回复  Δ4楼 回复

    国内做一个浏览器都是这样的:把chrome换个皮肤和名字,搞定!

  5. 爱求索 2014年04月12日 6:07 上午  @回复  Δ5楼 回复

    浏览器是应用程序里的王冠,要做出一个真正能广泛使用的浏览器,等于做完半个操作系统了。

    所以就算牛逼如chrome,里面仍然内置了巨量的第三方软件。现在的浏览器基本就是个各类应用程序的万花筒,而不光光是看网页那么简单。

    浏览器的内容主要是在保证安全的前提下,实现web文件模型,在此基础上的渲染模型,js解释运行环境,在此基础上整合兼容无数种种互联网标准(各类通信协议,html5,ccs等等等等),同时还要保证相当的效率,这个是最耗费精力的,此外还有建立自己的应用/插件框架

    现在不比90年代了,那时候单枪匹马也能写出一个浏览器,因为网上的东西就那么点,现在要想一个人写,哪怕人胡子都写白也写不出来。较为实际的做法是,直接把整合好的浏览器内核拿过来,包装修改一下,加减些功能,如果能够在这个浏览器内核更新之前支持新出来的互联网标准,就算成功了,以前的遨游浏览器在ie不思进取的年代就是这么做的。

  6. 爱求索 2014年04月12日 6:07 上午  @回复  Δ6楼 回复

    1. http协议的封装和实现。(TCP/IP 网络编程, 多进程/多线程, 压缩/解压, 数据库[http缓存中会用到])

    2. 难点是html, css的解析和同步渲染。还有js的嵌入(现在有开源的js编译引擎,开发单独的js引擎就是一个麻烦的事情)。(基本的数据结构,尤其是树,图像渲染, 编译器…)

    3. 另外一个就是UI咯。

  7. 爱求索 2014年04月12日 6:08 上午  @回复  Δ7楼 回复

    世界上的浏览器内核:WebKit、Trident(IE)、Gecko(FF)、Presto(Opera弃用内核)、Blink(Google的新内核)。。。

  8. 爱求索 2014年04月12日 6:08 上午  @回复  Δ8楼 回复

    稍微列举一下你需要的知识和技术:

    1、编译原理。你需要解析HTML/CSS,并且要写一个JS引擎。
    2、HTML/CSS/JS语言规范。写解析器和引擎需要了解这些规范的全部内容。
    3、HTTP协议。完整实现所有的http协议相关内容。

    其实主要是这些,其他诸如多线程和TCP/IP啥的默认楼主已经精通。

    然后稍微说一下以上规范和协议的量:
    HTML4规范,纯文字版:http://www.w3.org/TR/html4/html40.txt 大小为794k。
    HTML5规范,有一个Single Page的版本:http://www.w3.org/TR/html5/single-page.html 大小为5595k。(以上还不包括XML规范和这两个规范中引用的其他规范)
    CSS 2.1规范,纯文字版:http://www.w3.org/TR/CSS2/css2.txt 大小为910k。
    CSS Selector 3/ CSS Media Query和其他CSS 3相关的,不一一列举,平均都应该在1M左右。
    Javascript规范,http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 大小2995k。

    (然后我犯懒了,不想再找了)
    其他还有SVG规范,浏览器标准API规范,HTTP协议规范等等。

给我留言

留言无头像?