2013-3-22 22:37| 发布者: sxwgf| 查看: 575| 评论: 0|来自: infoqcss
摘要: Paul Irish是著名的前端开发工程师,同时他也是Chrome开发者关系团队成员,jQuery团队成员,Modernizr、 Yeoman、CSS3 Please和HTML5 Boilerplate的lead developer。针对你们对WebKit的种种误解,他在本身的博客发表 ...html
Paul Irish是著名的前端开发工程师,同时他也是Chrome开发者关系团队成员,jQuery团队成员,Modernizr、 Yeoman、CSS3 Please和HTML5 Boilerplate的lead developer。针对你们对WebKit的种种误解,他在本身的博客发表了《WebKit for Developers》一文,试图为你们解惑。前端 对许多开发者来讲,WebKit就像一个黑盒。咱们把HTML、CSS、JS和其余一大堆东西丢进去,而后WebKit魔法般的以某种方式把一个看起来不错的网页展示给咱们。但事实上,Paul的同事Ilya Grigorik说:java
因此让咱们来花些时间了解这些事儿:css3
如今,特别是Opera宣布将浏览器引擎转换为WebKit以后,咱们有不少使用WebKit的浏览器,可是咱们很难去界定它们有哪些相同与不一样。下面我争取为这个谜团作些解读。而你也将会更懂得判断浏览器的不一样,了解如何在正确的地方报告bug,还会了解如何在特定浏览器下高效开发。web 标准Web浏览器组件算法 让咱们列举一些现代浏览器的组件:chrome
这里面哪些是WebKit浏览器共享的?差很少只有前两个。其余部分每一个WebKit都有各自的实现,所谓的“port”。如今让咱们了解一下这是什么意思……windows WebKit Ports是什么? 在WebKit中有不一样的“port”,可是这里容许我来让WebKit hacker,Sencha的工程主管Ariya Hidayat来解释:
上面已经提到,CoreGraphics只是Mac port的实现。不过Mac Chrome用的是Skia。
……不过Windows版本的Safari如今已经死掉了。
让咱们看看其中一些WebKit ports:
不一样的port专一于不一样的领域。Mac的port注意力集中在浏览器和操做系统的分割上,容许把ObjectC和C++绑定并嵌入原生应用的渲染。Chromium专一在浏览器上。QtWebKit的port在他的跨平台GUI应用架构上给apps提供运行时环境或者渲染引擎。 WebKit浏览器共享了那些东西? 首先,让咱们来看看这些WebKit ports的共同之处: (做者注:颇有意思,这些内容我写了不少次,每次Chrome团队成员都给我纠正错误,正如你看到的……)
因此,状况很复杂。 就像Flickr和GitHub经过flag标识来实现本身的功能同样,WebKit也有相同处理。这容许各个port自行决定是否启用WebKit编译特性标签的各类功能。经过命令行开关,或者经过about:flags还能够控制是否经过运行时标识来展现功能特性。 好,如今让咱们再尝试一次搞清楚WebKit究竟有哪些相同… 每一个WebKit port有哪些共同之处
这些领域如今有点儿模糊,让咱们尝试把事情弄得更清楚一点。 什么是WebKit port们并无共享的:
让咱们谈谈其中的2D图像部分: 根据port的不一样,咱们使用彻底不一样的库来处理图像到屏幕的绘制过程: 更宏观一点来看,一个最近刚添加的功能:CSS.supports()在除了没有css3特性检测功能的win和wincairo这两个port以外,在其它全部port中都可用。 如今到了卖弄学问的技术时间。上面讲的内容其实并不正确。事实上那是WebCore被共享的东西。而WebCore实际上是当你们讨论HTML和SVG的布局、渲染和DOM处理时提到的WebKit。技术上讲,WebKit是WebCore和各类ports之间的绑定层,尽管一般来讲这个差异并不那么重要。 一个图表应该能够帮助你们理解: WebKit中的许多组件都是能够更换的(图中标灰色的部分)。 举个例子来讲,Webkit的JavaScript引擎,JavaScriptCore,是WebKit的默认组件。(它最初是当WebKit从KHTML分支时从KJS演变来的)。同时,Chromium port用V8引擎作了替换,还使用了独特的DOM绑定来映射上面的组件。 字体和文字渲染是平台上的重要部分。在WebKit中有两个独立的文字路径:Fast和Complex。这二者都须要平台特性的支持,可是Fast只须要知道如何传输字型,而Complex实际上须要掌握平台上全部的字符串,并说“请绘制这个吧”。
如今,让咱们放宽镜头看看一些port和一些子系统。下面是WebKit的5个port;尽管它们共享了WebCore的大部分,但考虑一下它们的stack有哪些不一样。
*iOS Chrome注:你可能知道它使用 UIWebView。因为UIWebView的能力限制。它只能使用移动版Safari的渲染层,JavaScriptCore(而不是V8)和单进程模式。然而,大量的Chromium 代码仍是起到了调节做用 ,好比网络层、同步、书签架构、地址栏、度量工具和崩溃报告。(同时,因为JavaScript不多成为移动端的瓶颈,缺乏JIT编译器只有很小的影响。) 好吧,那么咱们该怎么办? 如今全部WebKit彻底不一样了,我好怕。 别这样!WebKit的layoutTests覆盖面很是广(据最新统计,有28,000个layoutTests),这些test不只针对已存在的特性,并且针对任何发现的回归。实际上,每当你探索一些新的或难懂的DOM/CSS/HTML5特性时,在整个web平台上,layoutTests常常已经有了一些奇妙的小demo。 另外,W3C正在努力研究一致性测试套件。这意味着咱们能够期待使用同一个测试套件来测试不一样的WebKit port和浏览器,以此来得到更少的怪异模式,和一个带来更少的怪癖模式和更具互操做性的web。对全部参加过Test The Web Forward活动的人们……致谢! Opera刚刚迁移到了WebKit了。会怎样? Robert Nyman和 Rob Hawkes也谈到了这个 ,可是我会再补充一些:Opera在公告中明显指出Opera将采用Chromium。这意味着WebGL,Canvas,HTML5 表单,2D图像实现——Chrome和Opera将在全部这些功能上保持一致。API和后端实现也会彻底相同。因为Opera是基于 Chromium,你能够有足够的信心去相信你的尖端工做将会在Chrome和Opera上得到兼容。 我还应该指出,全部的Opera浏览器都将采用Chromium:包括他的Windows,Mac、Linux版本,和Opera Mobile(彻底成熟的移动浏览器)。甚至Opera Mini都将使用基于Chromium的服务器渲染集群来替换当前的基于Presto的服务器端渲染。 ……那WebKit Nightly是什么? 它是WebKit的mac port ,和Safari运行的二进制文件同样(尽管会替换一些底层库)。由于苹果在项目中起主导地位,因此它的表现和功能与Safari的老是那么一致。在不少状况下,当其它port可能会试验新功能的时候,Apple却显得相对保守。无论怎样,若是你想我用中学同样的类比,想一想这个好了:WebKit Nightly对于Safari就像Chromium对于Chrome。 一样的,Chrome Canary 有着最新的WebKit资源。 |