阅读更多

8顶
2踩

互联网

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

2008-09-11 16:42 by 资深编辑 wutao0603 评论(2) 有5830人浏览
随着 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短时间内可以赶上的。

发表评论

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

相关推荐

  • 非阻塞 Socoket 编程

     

  • Linux socket非阻塞connect方法(一)

    Linux非阻塞connect方法(linux non-blocking socket connect)

  • socket编程 —— 非阻塞socket

    在上一篇文章 《socket编程——一个简单的例子》 http://blog.csdn.net/wind19/archive/2011/01/21/6156339.aspx 中写了一个简单的tcp socket通信程序,可以进行数据的交互,但有一个问题是这个程序是阻塞的,任何socket函数都要等返回后才能进行下一步动作,如果recv一直没有数据,那么就一直不会返回,整个进程就阻塞在那。所以我们要进行改造一下,让程序不再阻塞在那,而是在有数据到来的时候读一下数据,有数据要写的时候发送一下数据。

  • [C++]C/C++ Socket设置非阻塞模式接收超时时间的多种方法

    然而,它的缺点是灵活性较差,因为它只能设置一个固定的超时时间,而不能动态地根据网络状况调整超时时间。网络编程中经常需要处理的一个问题就是如何正确地处理Socket超时,对于C/C++,有几种常用的技术可以用来设置Socket接收超时时间,在这篇文章中,我们将详细介绍如何在C/C++中设置Socket的非阻塞模式以及如何配置接收超时时间,需要的朋友可以参考下。需要注意的是,SO_RCVTIMEO和SO_SNDTIMEO选项设置的超时时间是一个总时间,而不是在Socket函数阻塞时每次等待的时间。

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

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

  • socket 设置非阻塞

    阻塞和非阻塞   阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞(blocking)。而非阻塞操作则可以立即完成。比如,如果你希望服务器仅仅注意检查是否有客户在等待连接,有就接受连接,否则就继续做其他事情,则可以通过将Socket设置为非阻塞方式来实现。非阻塞socket在没有客户

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

  • 非阻塞式读取矩阵按键:保姆教程

    非阻塞式读取矩阵按键 这个教程是在电协培训新生的一点点心得,旨在解决许多人学习单片机,对按键的一个困惑:按键的非阻塞式消抖。如何在不消耗很多时间的情况下,有效地消抖,具有非常实际的意义。 本文就把一个循序渐进的对按键处理的理解记录下来,方便大家学习,由于本人已投入半导体器件的学习,很久没有接触数字电路,如有错误,还请读者指出。 本文注重方法的连续演化,遵循事物的发展规律,如需要计数式非阻塞矩阵按键读取方法,直接翻到最后即可,最后我将给出本文所讲的所有代码,屏蔽掉,稍加修改端口可以在51单片机上实现,体会每种

  • can收发问题

    ARM_CAN232自收自发的问题设置好CMD=3(自发自收模式),然后调用CANAPP.C 文件中的InitCAN、CANSendData 函数、ReadCANRcvCyBuf 可以实现CAN自我测试吗,我仿造做了一个好像不行。还有,由于没有CAN接口卡,简单的讲开发板通过串口延长线与PC机的COM连接,然后更改发送数据格式,CMD=3,ARM_CAN232实例程序能实现自发自收吗,版主帮忙解释下,谢谢!回复 LPC2292 CAN自发自收问题 遇到同样的问题:设置好CMD=3(自发自收模式),然后调用C

  • Android socket获取服务器返回的多行数据

    1:用eclipse打包好的APK,通过微信发送给别人之后都会被添加一个.1后缀,导致不能直接安装。     这个是微信的一种安全机制,防止安装包在不确定安全的前提下自动运行,所以自动把收到的安装包后缀都加了.1,需要手动删除才能安装。 2:Socket连接,客户端接收服务武器返回的字符串数据: 下面是最开始的socket接受程序代码: 当服务器返回的只是一行简单的字符串时,没

  • java的socket读取一行就结束运行了?使用这种方法可以读取多行数据!

    目录 引出问题 第一种(只能读取一行数据) 第二种(可以读取多行数据) 引出问题 写一个socket的公共方法,结果发现socket读取一行数据就结束了,百思不得其解。 在网上也找了一些资料,很多也有坑,这里贴出来自己用的两种方法,以后就不用一直找解决方案了。 第一种(只能读取一行数据) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import j

  • Socket通讯读取数据阻塞解决方案

    一、问题描述 while ((len = in.read(bytes)) != -1) { os.write(bytes, 0, len); os.flush(); } 1.read方法读取文件数据时读取到文件末尾返回-1. 2.在socket通讯过程从InputStream输入流中读取数据时如果没有数据可读会一直阻塞,如果关闭流会返回-1。 Socke

  • socket阻塞与非阻塞读写

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

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

    recv: 阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小, 特别:非阻塞模式下返回 值  只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取。 write: 阻塞与非阻塞write返回值没有区分,都是 0发送数据大小, 特别:非阻塞模式下返回值  只是阻塞模式下write会阻塞着发送数据,非阻塞模式下如果暂时无法发送

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

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

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

    1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区 别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,

  • 网络编程:socket的阻塞模式和非阻塞模式

    返回值n返回值含义大于0成功发送(send)或接收(recv)n字节0对端关闭连接小于0(-1)出错、信号被中断、对端TCP窗口太小导致数据发送不出去或当前网卡缓冲区已无数据可接收返回值大于0。在这种情形下,一定要判断send函数的返回值是不是我们期望发送的字节数,而不是简单的判断其返回值大于0.\n");}虽然返回值n大于0,但在实际情况下,由于对端的TCP可能因为缺少一部分字节就满了,所以n的值可能为(0, buf_length]。...

  • Socket的非阻塞模式

    socket的阻塞与非阻塞工作模式 设置socket非阻塞的方法 非阻塞socket编程

Global site tag (gtag.js) - Google Analytics