这些年来,随着浏览器的发展,浏览器引擎其实已经分为比较鲜明的几派,比如IE 的Trident,Firefox 的Gecko等.由。IE 浏览器的用户量相对庞大许多,所以国内许多开发者和用户可能对围绕IE开发比较熟悉。那么究竟围绕Gecko开发是怎样一种情况呢?技术上有哪些异同呢?为此我特别采访了一位拥有丰富Gecko内核开发经验的程序员李沫南。
Ericlee:请介绍一下你自己好吗?比如你从事Albatross开发的经历。
李沫南:我2002年烟台大学土木工程系毕业,在济南浪潮做了近一年.net上的ORMaping。03年11月加入北京共创开源软件有限公司,从事开源浏览器(起初是epiphany,后来是firebird)的开发。Albatross是在Firefox 1.0.x版本分支上改进的,在863项目《Linux下兼容IE扩展的功能增强性浏览器》的基础上,由当时共创开源浏览器部开发的。主要改进功能改进可参考:
http://albatross.cosoft.org.cn/future.html
2006年3月,从公司离职。目前主要从事基于浏览器的互联网爬虫和社区(站内)搜索引擎的开发。 http://www.coreseek.cn
Ericlee:浏览器的内核其实可以分为Trident、Gecko,Presto、WebCore等等几种。请您谈谈Gecko 内核哪点最吸引您?它有与其它内核相比有哪些不同。
李沫南:如果都无法获取源码的情况下,IE的Trident内核实际上是最开放的。其接口设计的相对来讲最成熟,对外部应用程序支持的情况最好,这也是为什么IE外壳的浏览器非常多的原因之一。从我个人的经验看,越了解IE,越发现其设计的巧妙之处。
Oprera的Presto,我用Opera不多,不好评论;
WebCore和khtml 本身没有本地Window版本,这限制其在win32上的普及,不过,由于khtml本身不大,也许在移动设备上存在市场机会。
Gecko核心设计的相对成熟,在无法获取源码的情况下,开放程度仅次于IE。由于其本身Open Source。实际上是目前开发程度最好的浏览器。Firefox的扩展能够给浏览者带来完全不同的浏览体验。我个人因为接触的比较多,对于Gecko的缺点比优点了解的可能更多一些。其中,最大的麻烦是系统各部分和JavaScirpt绑定的太紧,导致很难加入对新的脚本语言的支持;其次,应该承认微软IE的很多设计方便了网页开发人员的开发,而Firefox在这些地方做的还很不够,当然这里里面有技术上的问题,也有法律上的问题。
Ericlee:国内许多浏览器开发都是外壳开发,请谈谈Gecko内核开发在技术上与外壳开发会面对哪些不同的挑战?
李沫南:浏览器的外壳开发和内核开发完全是两个不同的领域。相对而言,我认为内核开发更简单一些,因为其用户需求简单而明确,面对的使用者也都是程序员;外壳开发要面对最终用户,要考虑适应不同的用户使用习惯,特别是还要和各种弹出广告的网站做斗争
在技术上,其实内核开发和外壳开发很多地方是相通的,我认识的一些外壳开发者可以在非常短的时间内成为Gecko内核的开发者。不过内核开发和外壳开发还是有很多不同的,其中最大的区别在于引擎的可信程度,在外壳开发时,可以假设完全信任渲染引擎,假设其没有Bug;而在浏览器内核开发时,这些假设不存在。另外,对于程序员的要求也有很大的不同,特别是浏览器的DOM、插件、Layout和JavaScript模块,这些模块的部分代码对于性能的要求非常严格。我曾经犯了一个错误,在发行代码中多写了一句调试用的printf,结果导致CPU占有率增加了接近30%。而同样的问题,在外壳开发中则很少会遇到。
同样,在外壳开发中的鼠标手势、广告过滤和书签管理等功能在内核开发中根本不会遇到,可以这么认为,虽然外壳和内核都是浏览器开发,但实际上是截然不同的两种软件。
Ericlee:目前市场上有许多基于Gecko内核的浏览器,请谈谈你对他们的看法?
李沫南:市面上Gecko内核的浏览器主要分两类,一类是以Mozilla Firefox为代表的,用XUL作为界面描述语言的浏览器:这类浏览器往往继承了Firefox扩展性好的优点,早前的Madfox和Albatross就是这一类型的浏览器。
另一类是使用本地图形库作为界面的Gecko内核的浏览器:其中有Linux平台上epiphany、Galeon等;在win32上由Orca Browser、K-Meleon等。
一般而言,采用本地图形库的浏览器资源占用较少、速度相对较快,这一点和IE外壳浏览器一样,不过缺少了采用XUL作界面带来的扩展性。同时,由于Mozilla的嵌入接口提供的对外接口相对有限,导致目前使用Gecko做内核的采用本地图形库的浏览器的功能都相对有限。
其中,Win32平台上相对比较好的是Orca Browser,其实现了对应于IE平台的浏览器 Avant Browser 90%以上的功能。
Ericlee:Firefox 这两年越来越引起人们的关注,去年11月发布的1.5版非常的成功,请您谈谈对Firefox浏览器的看法。在技术上比Trident内核浏览器有哪些优势?
李沫南:最大的优势,全部源代码开放
在渲染方面的优势,由于Firefox使用了动态布局引擎,其显示网页内容的速度比IE 快的多。这个我认为是Firefox最大的有时,显示网页的速度快也带来了浏览者工作效率的提升。
安全方面,我不认为Firefox会比IE好多少,就其实现上,也并没有为安全做特别的设计。如果FF有IE一样的用户基数,也会有同样多的漏洞。不过,由于开源的原因,用户基数的增加同时也会带来开发者的增加,考虑到这些因素,总体而言Firefox将更安全。
Ericlee:许多人都说Firefox2.0比1.5版并没有什么进步,你是这么认为吗?
李沫南:2.0的代码我还没有时间仔细研究,不过评价一款有自己内核的浏览器,最终界面仅仅是一个方面。浏览器引擎实际上更接近.net和JavaVM的角色,就想你很难通过javaVM的命令行界面来评价JavaVM的改进一样,你也很难通过最终用户界面来评价一款浏览器内核。
Ericlee:从开发角度看,比如对DOM里的对象原型的扩展,Firefox与IE哪个浏览器的扩展性更好?
在两个技术层面有两个不同的结论。在内核层面,在同样都有源码的前提下,Firefox对DOM对象的扩展没有IE方便,这也是过去一直困扰我们的问题;不过在JavaScript方面,Firefox比IE强大,早期的Albatross其中有一部分IE特性的支持就是通过脚本来实现的。
Ericlee:微软重新对 IE浏览器的投入, 使浏览器市场竞争变得更加激烈,你如何看将来的浏览器发展方向?(浏览器除了作为网络内容阅读,与应用程序结合的角度看,会如何发展?)
李沫南:我个人认为,未来浏览器终将消失,扮演和.net平台和JavaVM类似的角色。
Ericlee:你如何看待国内的开源浏览器开发氛围?
李沫南:其实,开发浏览器内核并不难,至少没有大家想像的难,比开发操作系统内核简单多了。一般一个有中等c++开发经验的程序员学习1-2个月就可以上手。至于具体能作到什么层次,需要看个人的努力程度了。至于开发Firefox浏览器外壳(做扩展)则相对简单一些,有一定的网页制作基础就可以了。
国内的开源浏览器开发氛围,怎么说呢?和国内的开源软件的大环境很像,公司的领导还很难接受自己投资开发的软件拿出去让其他人“白”用,而国内的开源浏览器开发最大的问题在于高质量的开发人员太少,当然,这可能和国内的大环境有关。如果不能很好的解决程序员的生存和发展问题,开发人员短缺的问题将一直存在。
Ericlee:可否向广大软件开发者分享一下你的软件开发成功经验?
李沫南:我现在离成功还很远,只是一个合适的卒子放到了合适的位置而已。{具体还需要增加,主要强调数学和基础知识在程序开发中的重要性}