阅读更多

8顶
2踩

互联网

转载新闻 为什么 Mozilla 要固守 Gecko 内核

2008-09-11 16:42 by 资深编辑 wutao0603 评论(2) 有5741人浏览
随着 Google 推出 WebKit 内核的 Chrome 浏览器 ,一些技术狂热分子开始盘算 Mozilla 的 Gecko 内核是否即将走到尽头。然而尽管 WebKit 日渐流行,那些熟悉 WebKit 与 Gecko 的差异,并对 Gecko 大加赞赏的人还是认为,Mozilla 在未来版本的 Firefox 中使用 WebKit 内核的可能性尚无从谈起。
Webkit 的优势

Webkit 是一个开源的HTML 渲染引擎,由苹果公司基于 KDE 的 KHTML 项目开发而成。我们从 Chrome 的评测中已经看Webkit 是一个非常轻量的渲染引擎,因其紧凑干净的代码基础,出色的标准支持,以及很小的内存占用而备受赞誉。这些品质使得 Webkit 成为众多浏览器的热选内核。


Webkit 主要用于苹果的 Safari 浏览器与 iPhone,但一些重要的厂商如 Adobe,Nokia, Trolltech 也使用这个核心。Webkit 的用户中还包括一些不太知名的浏览器,包括  iCab, Omniweb, Shiira, 以及 Epiphany。在一些二线操作系统,如  Haiku, Syllable, 甚至 Amiga,Webkit 也大行其道。越来越多的开发者,使用 Webkit 开发富 Internte 应用(rich Internet applications)。Google 在对众多内核进行评估之后,为 Android 移动浏览器,以及 Chrome 桌面浏览器选择了 WebKit。

开发者对 Webkit 公认的评价是:这是一个非常出色的渲染引擎,可以用于众多场合,它的吸引力让很多开发者开始怀疑 Mozilla 的 Gecko 内核是否还有市场。


苹果为什么抵制 Gecko

Gecko 源自 Netscape,并早于 KHTML,Gecko 因庞大与复杂的代码基础而频遭诟病。Gecko 非常强大,但代价高昂,复杂,高内存占用。因此,在很多场合 Gecko 的众多功能反而成了负担。


Gecko 内核过于复杂的原因是 Gecko 意图提供除了 HTML 渲染之外的更多功能。Mozilla 早期的野心很大,Mozilla 最早的应用套件包括浏览器,邮件和新闻组程序,Web 设计工具,IRC 聊天工具。除了渲染 HTML,Gecko 还要提供一种应用广泛的,基于 XML 的用户界面生成引擎,XUL。XUL 被用在所有这些程序中。XUL 现在仍用在 Firefox 中,用来生成用户界面,因此造就了 Firefox 最有价值的重多扩展应用。

Gecko 过于复杂的另外一个原因是 XPCOM,一个强大的组件系统。虽然 XPCOM 为 Gecko 带来很多激动人心的功能,让这个渲染引擎实现组件化,然而,这个功能被一些开发者滥用,当 Ars Technica 2004年采访 Mozilla 开发者 Scott Collins 的时候,Scott Collins 说,对 XPCOM 的滥用是 Mozilla 犯的几个主要错误之一。

鉴于 XUL 和 XPCOM 所带来的复杂性,苹果自然要考虑为 Safari 选择一种更轻量的内核。苹果要设计一款可以和 Mac 操作系统紧密结合的浏览器,他们还预见到,这个引擎应该支持移动设备,他们因此认识到 KHTML 比 Gecko 更合适。

2003年,当苹果决定在 Safari 中使用 KHTML 的时候,Mozilla 的 Mike Shaver 曾在博客中承认 Gecko 的缺点。他同时预言,苹果会成为他们推广 Web 标准的联盟。他写道,

“小而精练曾是我们的苦苦追寻的目标,Gecko 的庞大与臃肿在各种评测中拉了我们的分数,如果我不得不写一个新浏览器,我会考虑 Mozilla 之外的选择。我希望 Mozilla 向 Safari/KHTML 学习,因为它们用 1/10 的代码实现了非常棒的功能。”


Gecko 洗心革面带来 Firefox 3 的火爆

2003年以来,发生了很多变化。Gecko 代码基础已经发展了很久,Gecko 依然复杂,然而它的很多历史遗留的缺陷正被一一攻破,Gecko 为 Firefox 3 带来众多革新,为整个 Web 浏览体验带来非常显著的改善。

Gecko 1.9 使用跨平台的 Cairo 渲染框架,对 SVG 的巨大改进简化了代码并引入一些非常 Cool 的功能,如全页缩放,同时,重构的 reflow 算法,让 Gecko 通过 Acid 2 测试成为可能。Mozilla 还非常显著地降低了对内存的占用,甚至超越了 Safari 和 Opera。

对 XPCOM 的使用被大大减少,XPCOM 对资源的占用通过一个新的循环回收器得到减低。这个工作仍在继续,Mozilla 将在 Firefox 4 中进一步减低 XPCOM 的负担。Gecko 的其它缺陷也在新的开发中被一一正视,比如,Firefox 3.1 的 Alpha 版中就已经加入对 CSS 3 的支持,另外一些性能的改进会让 Gecko 更具竞争性。Mozilla 的 TraceMonkey 引擎将可能包含在 Firefox 3.1 中,这将显著地提高 JavaScript 性能。

从技术的角度,Gecko 现在非常稳固,丝毫不比 Webkit 差。一些证据显示,Gecko 正在进军移动领域,这在不久前还是不可能的事。Mozilla 拥有资源,开发经验以及社区支持,这将引导 Gecko 进入任何 Webkit 所能进入的地盘。

未完待续
来自: comsharp.com
8
2
评论 共 2 条 请登录后发表评论
2 楼 songze39 2009-03-13 09:25
看是什么人用
1 楼 hantsy 2008-09-12 19:02
从www.mozilla.org 网站可以了解到,基于的mozilla的应用程序或插件已经有好几千,这些不是webkit短时间内可以赶上的。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Socket 读取数据

    Socket 读取数据

  • Java Socket正确读取数据姿势

    前言 平时日常开发用得最多是Http通讯,接口调试也比较简单的,也有比较强大的框架支持(OkHttp)。 个人平时用到socket通讯的地方是Android与外设通讯,Android与ssl服务通讯,这种都是基于TCP/IP通讯,而且服务端和设备端协议都是不能修改的,只能按照相关报文格式进行通信。 但使用socket通讯问题不少,一般有两个难点: socket通讯层要自己写及IO流不正确使用,遇......

  • socket阻塞与非阻塞读写

    网络协议一般都是由head和body构成。 socket在实际应用中有2种方式,阻塞和非阻塞。 使用setsockopt()可以在2种方式之间切换。 /** * * 设置非阻塞模式(for Win32) * **/ int nNonBlocking = 1; ioctlsocket(sockListen,FIONBIO,&nNonBlocking); 先看阻塞

  • socket数据读写

    学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket数据读写的部分,包括TCP数据读写、UDP数据读写和通用数据读写。...

  • Java利用Socket进行数据读写

    Java中和网络有关的类分为四种:InetAddress(网络信息标识)、URL(统一资源定位器,读写网络数据)、Sockets(利用TCP/IP实现网络通信)、Datagram(UDP数据报通信) 通过InetAddress可以获取计算机名、IP地址等信息,也可以通过计算机名、IP地址获取到网络上的计算机实例 public static void main(String[] arg...

  • 【Socket】Python使用非阻塞模式接收完整数据

    之前我使用阻塞模式接收数据时必须使用Socket的方法设置一个超时时间,用来判断连接对象是否还是数据传入。但是这种方式有个很明显的弊端,那就是会影响整个的数据传输的效率。因为需要判断数据传输是否超时来得到数据是否传输完毕,但有时会因为网络波动导致每次接收的数据量都不一样,也就会导致数据完整性无法得到验证。影响数据接收的效率是因为需要等待方法设置的时间来判断是否超时,而短了通常会提前断开,长了又过于耗时。...

  • 非阻塞socket网络编程之数据收发完整代码示例

    非阻塞socket网络编程之数据收发完整代码示例

  • Socket的阻塞模式和非阻塞模式

    阻塞模式   Windows套接字在阻塞和非阻塞两种模式下执行I/O操作。在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。

  • Internet Socket (非)阻塞write/read n个字节

    目录一、阻塞/非阻塞的write和read简单介绍(1)write2.返回值:(2)read2.返回值:二、阻塞/非阻塞的write和read读到n个字节的写法三、send和recv四、阻塞wirte和read+超时1.setsocketopt:参数option_name: 2.I/O多路复用select()/poll():select阻塞write+超时:select阻塞read+超时:3.信号中断阻塞读/写alarm():alarm()阻塞write超时alarm()阻塞read超时总结:阻塞加超时用s

  • 一文搞懂socket读写数据接口API

    注意: 再启动一个客户端,尝试连接服务器,发现第二个客户端,不能正确的和服务器进行通信。分析原因,是因为我们accept了一个请求之后,就在一直while循环尝试read,没有继续调用到accept,导致不能接受新的请求 所以这是不科学的,需要采用下面的多进程和多线程版本的TCP网络通信。注意:recvfrom函数和sendto函数还可以用于面向连接的socket读写,只需要把最后两个参数都设置为NULL就可以了,因为我们已经知道对端的socket地址了,这就有点像下面要将的recv和send了。

  • 非阻塞方式下Socket读取数据的一个例子

    2001年08月19日 16:17:00 标题:非阻塞方式下Socket读取数据的一个例子作者:DreamTiger发表时间:2000-1-15 下午 05:59:13发信人: lBlade (刀锋), 信区: Delphi 标 题: Re: 斑竹帮忙看看偶这段Socket程序!救救我! (转载)发信站: BBS 水木清华站 (Tue Jan 11 14:22:56 200

  • c# 非阻塞算法_关于C#:socket select()与非阻塞recv

    我已经看到了一些将select()与poll()或epoll()进行比较的文章,并且我已经看到了许多指南讨论具有多个套接字的select()的实际用法。但是,我似乎找不到与没有select()的非阻塞recv()调用的比较。 如果只有1个套接字要读取和1个套接字要写入,是否有使用select()调用的理由? 可以将recv()方法设置为在没有可用数据时不阻塞并返回错误(WSAEWOULDBLOCK...

  • 使用socket读取服务器发送的数据问题

    刚刚项目使用到socket进行数据的传送,其中数据的读取问题着实 费了老大的劲,以此分享希望能让有缘人少走弯路。new Thread() { @Override public void run() { try { mSocket = new Socket(SERVICEADD,

  • Java Socket 读取服务器端返回数据

    //客户端 //1、创建客户端Socket,指定服务器地址和端口 Socket socket =newSocket("localhost",10086); //2、获取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw =newPrintWriter(os);//将输出流包装成打印流 pw.

  • Android 使用非阻塞的方式读写串口

    正常Android设备的串口一般是用作debug调试使用,随着Android设备使用越来越广,比如智能pos、智能扫码机都会用到Android主板和单片机进行通信,如果Android主板和单片机通信数据量大可以使用USB,若是通信数据量小可以使用串口进行通信,因为串口通信简单并且稳定性高,最近做的一个项目就是Android使用串口和加密芯片进行通信,Android主板使用的是rk3288和rk33...

  • linux网络编程:设置非阻塞socket收发数据

        非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接。包括的函数有:read, readv, recv, recvfrom, recvmsg, write, writev, send, sendto, sendmsg, accept。    将socket 设置为非阻塞模式有三总方法:    (1)创建socket的时候,指定socket是异步的,在ty...

  • 从TcpSocket上读取数据的三种方式

    我在一个项目中碰到了一个TcpSocket的应用。在java程序中使用TcpSocket同本机的一个服务进行进程间的通信。 由于通信路径只是单机并没有经过网络,因此两个进程之间的互通相对与网络传输是比较快速的。因此,进程间的交互使用了如下方式: (见上传图片) 让我们看一下代码实现: [code="java"] public synchronized void send...

Global site tag (gtag.js) - Google Analytics