阅读更多

8顶
2踩

互联网

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

2008-09-11 16:42 by 资深编辑 wutao0603 评论(2) 有5801人浏览
随着 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 读取数据

  • socket阻塞与非阻塞读写

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

  • 关于socket阻塞与非阻塞情况下的recv、send、read

    http://allenli1987.blog.163.com/blog/static/192332154201242434813196/ 关于socket阻塞与非阻塞情况下的recv、send、read   2012-05-24 15:48:13|  分类: IT|举报|字号 订阅 1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区

  • 阻塞socket 和非阻塞socket的区别(浅显易懂版)

    对于这个问题,我们要先弄清什么是阻塞/非阻塞。阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式。阻塞的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。非阻塞的意思是,当没有东西可读或者不可写时,读写函数就马上返回,而不会等待。现在来理解什么是阻塞socket,什么是非阻塞socket。

  • socket编程中的阻塞与非阻塞

    通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。     在Tcp通信的例子中,很多时候就是采用的阻塞式的工作方式:当接收tcp

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

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

  • 非阻塞方式下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

  • linux 阻塞socket与非阻塞socket

    阻塞socket和非阻塞socket的区别读操作对于阻塞的socket/recv,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。对于非阻塞socket而言,socket的接收缓冲区中有...

  • QTcpSocket通信编程时阻塞与非阻塞的问题

    目标,qt程序作为客户端,windows下winsock作为服务器端,实现两端通信。开始时写了一个小函数测试:QTcpSocket tmpSock;tcpSock.connectToHost("59.64.159.87",7716);tcpSock.write(buf,strlen(buf)+1);msleep(3000);tcpSock.disconnect(); 

  • 非阻塞式socket

    引言 返回错误EWOULDBLOCK或EAGAIN。 套接字的默认状态是阻塞的。这就意味着当发出一个不能立即完成的套接字调用时,其进 程将被投入睡眠,等待相应操作完成。可能阻塞的套接字调用可分为以下四类: ( 1 ) 输入操作,包括read 、 readv、 recv、 recvfrom和 recvmsg共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些输入函数之,而且该...

  • Java中Socket通信的基本方法

    从Socket中读取数据 创建Socket连接到Server Socket chatSocket = new Socket("127.0.0.1", 5000);创建Socket的时候需要用到两个重要的参数,一个是IP地址,另外一个是端口号。IP地址可以理解成网络中特定位置的计算机(服务器相当于一台连续工作的计算机),端口号对应于计算机中特定的服务或者应用。 这里的IP地址127.0.0.1是本机

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

    非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接。包括的函数有:read, readv, recv, recvfrom, recvmsg, write, writev, send, sendto, sendmsg, accept。     将socket 设置为非阻塞模式有三种方法

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

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

  • android socket通信非阻塞式简单实现

    关于网络通信就一句话:一切通信皆socket。socket分为阻塞和非阻塞,服务端多为阻塞式,客户端多为非阻塞式。非阻塞式主要开了两个线程,一个线程(ReadThread)专门读取服务端返回,一个线程(WriteThread)专门读取往服务器写消息。这个类的代码如下://消息发送线程 class SendThead extends Thread { String messag

  • socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一...

  • Linux socket编程实战(非阻塞)

    socket在创建的时候默认是阻塞的,要想设置为非阻塞的有以下几种方法: 1.ioctl 和 fcntl 设置已经创建socket的fd ioctl用于设备控制 #include <sys/ioctl.h> int ioctl(int fd, unsigned long request, ...); fcntl用于文件控制 #include <uni...

  • Windows Socket 异步编程(非阻塞模式) -- Select回送示例

    使用Select异步模式来实现返送示例。服务器启动并监听9999端口,并将收到的客户端信息打印并返送给客户端。 重点理解的是:一个套接字是否是可读、可写状态。当服务器端socket在Accept成功之后,便是可读状态,接收客户端发送数据。当客户端发送recv函数时,这个socket便成为可写状态,服务器端便知道这个客户端可写,然后根据自己的定义发送给客户端内容。如果客户端不发送recv函数,

Global site tag (gtag.js) - Google Analytics