WebKit浏览器所共有的与不同的
2014-05-13 00:00
435 查看
让我们回顾一下所有 WebKit port 的共同点:
首先,WebKit 以同样的方式解析 HTML 。好吧,除了 Chromium,它是迄今为止唯一支持 threaded HTML 解析的 port。
然而一经解析,DOM 树构造依然相同。所以,实际上只有在 Chromium port 中 Shadow DOM 被打开的情况下, DOM 结构才会改变。当然这同样适用于自定义元素。
WebKit 都会创建了一个 window 对象和 document 对象。使得通过它暴露出来的属性和构造器(译者注:某种函数)可以在 feature flags 选择打开。
CSS解析基本是一样的,把你的 CSS 文件解析成(内部的)CSS 对象模式还是一个比较标准的过程。是的,尽管 Chrome 仅接受 -webkit- 前缀,然而 Apple 和其它的 port 接受遗留前缀像 -khtml- 和 -apple-。
排版,定位?好吧,也来点面包和黄油吧!Sub-pixel layout 和 saturated layout (译者注:已经添加链接)算法是 WebKit 的一部分,但是各 port 之间存在差异。
好极了(搞定了)。
所以,事情很复杂。
就像 Flickr 和 Github 通过 flags 标识实现特性,WebKit 也是这么做的。允许 port 通过 WebKit 的编译特性标识 , 启用或禁用各种功能。这些特性可以作为运行时标识被暴露,也可以通过命令行开关(Chromium 是这样) ,或者通过配置 about:flags 。
好吧,让我们重新归纳下各 WebKit 的共同点……
CSSOM。
CSS 解析,属性/值处理。无供应商前缀处理。
HTML 解析和 DOM 结构。如果我们只考虑 Web 组件,它是相同的。
所有的布局和定位。Flexbox,浮动,块级格式化上下文… 所有这些都是共享的。
Chrome DevTools ( WebKit Inspector) 的 UI 和各种工具。尽管去年4月以来,Safari 为 Safari Inspector 放弃了自有的非 Webkit 的闭源 UI。
contenteditable, pushState,File API,大部分的 SVG,CSS Transform 公式, Web Audio API,localStorage。特性尽管后端不同。每一个 port 的 localStorage 可能使用不同的存储层,Web Audio API 可能使用不同的 audio API。
大量其它的特性和功能。
3D变换
WebGL
视频解码
2. 屏幕上的 2D 绘图
抗锯齿方法
SVG & CSS 渐变渲染
3. 文字渲染 & 断字
4. 网络堆栈(SPDY,预渲染,WebSocket 传输)
5. JavaScript 引擎。JavaScriptCore 在 WebKit repo. 它和 V8 绑定在 WebKit 里。
6. 表单控件渲染。
7. video & audio 元素行为(以及编解码器支持)。
8. 图像解码。
9. 导航 前进/后退。pushState() 的导航部分。
10. SSL 特性像严格传输安全性(Strict Transport Security)和公钥。
看下面这些: 2D 图形方面依赖于不同的 port ,我们用完全不同的库把它绘制到屏幕上:
或者更微观一点,最近的新特性:CSS.supports() 除了 win 和 wincairo, 所有的 port 都可用 ,同时它们没有启用 css3 conditional (css3 特性检测)特性。
既然我们了解了这些,是时候更加深入一些了。事实上以上的叙述是不正确的。 WebCore 是共享的,WebCore 是一个针对 HTML 和 SVG 的排版、渲染和文档对象模型(DOM)的库,它就是人们通常所说的 WebKit 。实际上“WebKit ”是 WebCore 和 port 的绑定层,尽管在扯淡时这种区别是不重要的。
下图应该有所帮助:
WebKit 里面许多的组件是可交换的(上图灰色区域)。
举个例子,起初,WebKit 的默认 JavaScript 引擎是 JavaScriptCore 。(它基于最初的 KJS (源于 KDE),WebKit 开始只是 KHTML 的一个 fork 分支)。后来,Chromium port 替换为 V8,然后使用独立的 DOM 绑定机制映射上去就完事了。
字体和文本渲染占一个平台的很大一部分。WebKit 有2个单独的文本路径:快速(Fast)和复杂(Complex)。两者都需要平台特定(port-side)的支持,但快速(Fast)仅需要知道如何 blit glyphs (传输字形)(WebKit 为平台做了缓存),而复杂(Complex)实际上是传递整个字符串到平台层,然后说“绘制这个吧”。
WebKit 像一个三明治。尽管在 Chromium 中更像墨西哥玉米卷。一个美味的 web 平台玉米卷。”——Dimitri Glazkov,Chrome WebKit hacker,Web 组件和 Shadow DOM 的拥护者。
现在,让我们放大镜头看看一些 port 和一些子系统。下面是 WebKit 的5个 port;尽管它们共享WebCore 的大部分,但它们的 stacks 是不同的。
PS:iOS 版 Chrome 注解:你可能知道它使用 UIWebView,由于 UIWebView 的能力意味着它只能使用像移动版 Safari 那样的渲染层,JavaScriptCore (替代 V8),单进程模式。尽管如此,大量的 Chromium 代码起衔接作用 ,例如网络层,同步和书签基础设施,地址栏,度量和崩溃报告。(同时,更重要的是,JavaScript 很少成为移动端的瓶颈,缺乏 JIT 编译器。
首先,WebKit 以同样的方式解析 HTML 。好吧,除了 Chromium,它是迄今为止唯一支持 threaded HTML 解析的 port。
然而一经解析,DOM 树构造依然相同。所以,实际上只有在 Chromium port 中 Shadow DOM 被打开的情况下, DOM 结构才会改变。当然这同样适用于自定义元素。
WebKit 都会创建了一个 window 对象和 document 对象。使得通过它暴露出来的属性和构造器(译者注:某种函数)可以在 feature flags 选择打开。
CSS解析基本是一样的,把你的 CSS 文件解析成(内部的)CSS 对象模式还是一个比较标准的过程。是的,尽管 Chrome 仅接受 -webkit- 前缀,然而 Apple 和其它的 port 接受遗留前缀像 -khtml- 和 -apple-。
排版,定位?好吧,也来点面包和黄油吧!Sub-pixel layout 和 saturated layout (译者注:已经添加链接)算法是 WebKit 的一部分,但是各 port 之间存在差异。
好极了(搞定了)。
所以,事情很复杂。
就像 Flickr 和 Github 通过 flags 标识实现特性,WebKit 也是这么做的。允许 port 通过 WebKit 的编译特性标识 , 启用或禁用各种功能。这些特性可以作为运行时标识被暴露,也可以通过命令行开关(Chromium 是这样) ,或者通过配置 about:flags 。
好吧,让我们重新归纳下各 WebKit 的共同点……
WebKit port 的共同点
DOM,window, document。大致相同。CSSOM。
CSS 解析,属性/值处理。无供应商前缀处理。
HTML 解析和 DOM 结构。如果我们只考虑 Web 组件,它是相同的。
所有的布局和定位。Flexbox,浮动,块级格式化上下文… 所有这些都是共享的。
Chrome DevTools ( WebKit Inspector) 的 UI 和各种工具。尽管去年4月以来,Safari 为 Safari Inspector 放弃了自有的非 Webkit 的闭源 UI。
contenteditable, pushState,File API,大部分的 SVG,CSS Transform 公式, Web Audio API,localStorage。特性尽管后端不同。每一个 port 的 localStorage 可能使用不同的存储层,Web Audio API 可能使用不同的 audio API。
大量其它的特性和功能。
哪些是各 WebKit port 不同的
1. 运行在 GPU 上的3D变换
WebGL
视频解码
2. 屏幕上的 2D 绘图
抗锯齿方法
SVG & CSS 渐变渲染
3. 文字渲染 & 断字
4. 网络堆栈(SPDY,预渲染,WebSocket 传输)
5. JavaScript 引擎。JavaScriptCore 在 WebKit repo. 它和 V8 绑定在 WebKit 里。
6. 表单控件渲染。
7. video & audio 元素行为(以及编解码器支持)。
8. 图像解码。
9. 导航 前进/后退。pushState() 的导航部分。
10. SSL 特性像严格传输安全性(Strict Transport Security)和公钥。
看下面这些: 2D 图形方面依赖于不同的 port ,我们用完全不同的库把它绘制到屏幕上:
或者更微观一点,最近的新特性:CSS.supports() 除了 win 和 wincairo, 所有的 port 都可用 ,同时它们没有启用 css3 conditional (css3 特性检测)特性。
既然我们了解了这些,是时候更加深入一些了。事实上以上的叙述是不正确的。 WebCore 是共享的,WebCore 是一个针对 HTML 和 SVG 的排版、渲染和文档对象模型(DOM)的库,它就是人们通常所说的 WebKit 。实际上“WebKit ”是 WebCore 和 port 的绑定层,尽管在扯淡时这种区别是不重要的。
下图应该有所帮助:
WebKit 里面许多的组件是可交换的(上图灰色区域)。
举个例子,起初,WebKit 的默认 JavaScript 引擎是 JavaScriptCore 。(它基于最初的 KJS (源于 KDE),WebKit 开始只是 KHTML 的一个 fork 分支)。后来,Chromium port 替换为 V8,然后使用独立的 DOM 绑定机制映射上去就完事了。
字体和文本渲染占一个平台的很大一部分。WebKit 有2个单独的文本路径:快速(Fast)和复杂(Complex)。两者都需要平台特定(port-side)的支持,但快速(Fast)仅需要知道如何 blit glyphs (传输字形)(WebKit 为平台做了缓存),而复杂(Complex)实际上是传递整个字符串到平台层,然后说“绘制这个吧”。
WebKit 像一个三明治。尽管在 Chromium 中更像墨西哥玉米卷。一个美味的 web 平台玉米卷。”——Dimitri Glazkov,Chrome WebKit hacker,Web 组件和 Shadow DOM 的拥护者。
现在,让我们放大镜头看看一些 port 和一些子系统。下面是 WebKit 的5个 port;尽管它们共享WebCore 的大部分,但它们的 stacks 是不同的。
PS:iOS 版 Chrome 注解:你可能知道它使用 UIWebView,由于 UIWebView 的能力意味着它只能使用像移动版 Safari 那样的渲染层,JavaScriptCore (替代 V8),单进程模式。尽管如此,大量的 Chromium 代码起衔接作用 ,例如网络层,同步和书签基础设施,地址栏,度量和崩溃报告。(同时,更重要的是,JavaScript 很少成为移动端的瓶颈,缺乏 JIT 编译器。
相关文章推荐
- CSS3不同浏览器兼容问题,-moz,-webkit,-ms,-o所代表的不同意思
- 浏览器跟服务器交互的整体流程(个人理解,如有不同见解,愿意分享)
- 移动WebKit-带你进入浏览器的世界
- 根据浏览器和分辨率不同自动调用CSS样式表 (jscript实现)
- 不同浏览器内核简介及测试重点
- 兼容不同的浏览器时间
- 站点改进心得--CSS、JS在不同浏览器的兼容性问题 - []
- 不同浏览器下图片滚动效果的js
- 定位元素间的Z值比较及z-index在不同浏览器下默认值的影响
- webkit浏览器常见开发问题
- webkit浏览器常见开发问题
- TextArea设置MaxLength的代码(未测试在不同浏览器下的兼容性)
- 空格&nbsp在不同浏览器中显示距离不一致问题解决方法
- 网页在不同浏览器下的兼容问题--针对IE
- 浏览器 游戏大厅 聊天工具 每个对象新建一个控件 不同控件里的控件名字不要相同
- 各浏览器对 SCRIPT 标签内 type 和 language 属性值识别程度不同
- 不同浏览器上中文文件名的下载乱码问题
- 不同浏览器获取DOM元素的各种高度
- 判断读者浏览器类型(包括苹果)和屏幕分辨率,自动调用不同CSS
- 用QtWebKit开发简单的浏览器