翻译自官方文档http://webkit.org/blog/1188/how-webkit-loads-a-web-page/
WebKit在渲染页面之前,需要先加载页面并从网络下载该页面上的所有子资源。从web上加载资源涉及到很多层次,本文重点解释WebKit的主要渲染组件WebCore在加载过程中发挥的作用。
WebKit包含两个加载管道,一个用于加载文档(documents)到框架(frames)中,另一个用于加载子资源(如图像、脚本)。下图总结了这两个管道涉及的主要对象。
加载框架
FrameLoader负责加载文档到框架中。每当你点击一个链接时,FrameLoader都会创建一个新的DocumentLoader对象并将其状态置为policy,DocumentLoader对象等待WebKit客户端做出是否处理此加载的决定。一般客户端会指示FrameLoader将该加载视为导航(navigation)。
一旦客户端指示FrameLoader将该加载视为导航,FrameLoader进一步将DocumentLoader置为provisional状态,该状态触发一个网络请求并等待确定该网络请求是否会带来一个下载或者一个新的文档。
接下来,DocumentLoader会创建一个MainResourceLoader,其任务是通过ResourceHandle接口和平台网络库交互。将MainResourceLoader和DocumentLoader分开的目的是:(1)MainResourceLoader将DocumentLoader与处理ResourceHandle回调的细节隔离开。(2)将MainResourceLoader的生命周期和DocumentLoader(被捆绑到Document上)的生命周期解耦。
一旦加载系统受到来自网络的足够的信息断定资源实际上是一个文档,FrameLoader则将DocumentLoaer置为committed状态,进而将框架过渡到显示新文档。
加载子资源
显示一个web页面的要求不止有组成文档的HTML。我们还需要加载图像、脚本和其他该文档引用的子资源。DocLoader负责加载这些子资源。(注意虽然DocumentLoader和DocLoader有相似的名字,但它们的角色很不同。)
以加载图形为例,为了加载一个图像,DocLoader首先查询Cache中是否有该图像在内存中的副本(CachedImaged对象)。如果图像已经在Cache中,DocLoader则立即使用该图像响应。为了更高的效率,Cache经常存储解码后的图像在视频内存中,以便WebKit不需要再次解压缩相同的图像。
如果图像不在Cache中,Cache会创建一个新的CachedImage对象来表示该图像。CachedImage对象要求Loader对象触发一个网络请求,Loader则创建一个SubresourceLoader。SubresourceLoader在子资源加载管道中扮演类似于MainResourceLoader在主资源下载通道中的角色,即SubresourceLoader直接跟平台的ResourceHandle接口打交道。
待改进的地方
WebKit的加载管道有很多需要改进的地方。FrameLoader明显比需要的复杂得多,并且包含了除加载框架之外更多的任务。例如,FrameLoader有几个略微不同的方法都命名为load,这容易让程序员迷惑。加载管道的不同的阶段过于紧耦合,低层次的对象可能直接和高层次的对象交互。例如,MainResourceLoader将从网络收到的字节流直接传递给FrameLoader,而非DocumentLoader。还有,Cache仅用于子资源,主资源下载没能使用WebKit的内存缓存。如果能解决这个问题,webpage的下载速度能大大提高。
JavaScriptCore简介
JavaScriptCore是WebKit的内置JavaScript引擎,它包括以下内建模块:词法分析器、语法分析器和解释器。词法分析器将脚本源码分割成一系列的token,语法分析器利用这些token国建对应的语法树,解释器执行语法分析器产生的二进制代码。
JavaScriptCore的词法分析器的大部分代码在parser/Lexer.h和parser/Lexer.cpp中;JavaScriptCore语法分析器使用了递归下降分析算法(recursive descent parser),代码在 parser/JSParser.h和parser/JSParser.cpp中;JavaScriptCore有两种解释器:基于字节码的和基于JIT的。前者在虚拟机中运行字节码,后者使用JIT编译方法产生本地机器码以便能够更快地执行。大部分的解释器代码在子目录interpreter/下,JIT编译器的代码在子目录jit/下。
WebKit共有30-35W行代码
分享到:
相关推荐
2. **JavaScriptCore**:负责JavaScript的解释执行,提供了一个高性能的JavaScript引擎,使得Web页面可以动态加载和执行脚本代码,实现复杂的网页交互效果。 3. **WebKit(模块)**:这是一个平台抽象层,封装了Web...
2. **JavaScript引擎**:WebKit内嵌了JavaScriptCore,这是一个高效的JavaScript解释器。它负责解析、编译和执行JavaScript代码,使得网页具有动态交互性。 3. **WebGL和SVG支持**:通过OpenGL ES,WebKit提供对...
- Webkit是一个开放源代码的项目,基于KHTML和JavaScriptCore,最初由KHTML(Konqueror浏览器的渲染引擎)发展而来。 - Webkit内核以其高性能、稳定性以及对Web标准的良好支持而受到青睐,它支持HTML5、CSS3、SVG...
在 Web 开发领域,WebKit 是一个至关重要的组件,广泛应用于 Safari、Chrome 等浏览器中。在 "smashing webkit" 这本书中,作者深入浅出地探讨了 WebKit 的内部工作原理和开发实践,旨在帮助开发者更好地理解和优化...
WebKit的设计目标是提供一个轻量级、高效且易于扩展的平台,使得开发者可以轻松地在移动设备上实现高性能的Web应用。 **KHTML:网页布局引擎** KHTML源自KDE项目,是一个遵循W3C标准的HTML和CSS解析器。在WebKit中...
1. **请求解析**: 当用户输入URL或点击链接时,WebKit首先解析请求并创建一个WebFrame对象来管理页面内容。 2. **资源加载**: WebKit使用网络栈加载HTML、CSS、JavaScript和其他资源。 3. **解析HTML**: 解析器将...
首先,当我们打开一个网页时,WebKit会启动一个网络加载器,从网络或缓存中获取网页的HTML内容。接下来,HTML解析器(HTML Parser)会将HTML文档转化为一系列的标签节点,构建出一个DOM树(Document Object Model)...
3. **高性能**: 通过优化的布局算法和 JavaScript 引擎(最初是 JavaScriptCore,现在也包含了 V8),WebKit 提供了快速的页面加载和执行速度。 4. **标准兼容**: WebKit 遵循 W3C 的 HTML、CSS 和 DOM 标准,确保了...
WebKit.NET 是一个强大的开源项目,它允许C#开发者在他们的应用程序中嵌入Web浏览器功能。这个框架基于WebKit引擎,这是一个广泛用于苹果Safari和谷歌Chrome等流行浏览器的渲染引擎。WebKit.NET通过提供C#接口,使得...
Port是WebKit中一个重要的概念,用于描述不同平台上WebKit的具体实现。每个Port都针对特定的操作系统或硬件平台进行了优化。 #### WebKitPort移植实现分析 - **WebCore交互接口**:提供了与WebCore交互的接口,以...
WebKit 是一个开源的 web 渲染引擎,被广泛用于各种操作系统和设备上的浏览器,如苹果的 Safari 和谷歌的 Chrome。它的核心任务是解释 HTML、CSS、JavaScript 代码,并将它们渲染成用户可见的网页。在本项目中,你...
WebKit.net 是一个基于开源 WebKit 引擎的 .NET 库,它允许.NET开发者在他们的应用程序中嵌入高性能的Web浏览器组件。WebKit 是一个广泛使用的网页渲染引擎,最初由 KDE 项目开发,后来被苹果公司采纳并进一步发展,...
- **Main Entrances**:每个移植都有一个简单的主函数入口,可以构建一个基于WebKit2接口的基本可执行程序。 #### 五、总结 通过对WebKit源代码结构的详细解析,我们可以清楚地看到其清晰的目录组织方式不仅有利...
WebKit还包含了一个资源调度器(ResourceScheduler),用于管理资源的加载顺序和优先级,确保重要的资源能够优先加载。此外,还提供了资源缓存机制(ResourceCache),以提高加载速度并减少网络流量消耗。 #### 五、...
9. **社区与贡献**:WebKit是一个活跃的开源项目,书中可能涵盖参与WebKit开发的流程、提交代码、参与社区讨论等信息,对于希望贡献自己力量的开发者有指导意义。 通过深入学习《WebKit技术内幕》,不仅可以提升你...
WebKit 是一个开源的 Web 浏览器引擎,广泛应用于苹果的 Safari 和谷歌的 Chrome 浏览器中。这个引擎使得浏览器能够解析 HTML、CSS、JavaScript 以及其他 Web 相关的格式,为用户提供丰富的网络浏览体验。下面我们将...
这种设计使得Webkit可以方便地与其他项目集成,如Chromium中的Blink就是基于Webkit的一个分支。 Webkit的工作流程通常分为以下几个步骤: 1. **解析**:Webkit接收到网页请求后,使用网络模块加载HTML和CSS资源。 ...
WebKit是一个强大的、高性能的Web内容解析和渲染引擎,被广泛应用于各种操作系统和移动设备。本篇将深入探讨Android浏览器与WebKit的结合,以及相关的重要知识点。 一、WebKit简介 WebKit起源于KDE项目中的KHTML...
8. **Web Inspector**:WebKit 提供了一个强大的 Web 开发工具——Web Inspector,允许开发者调试 HTML、CSS、JavaScript,查看性能指标,以及检查网络请求等,是前端开发的重要辅助工具。 9. **多平台支持**:...
WebKit 是一个开源的网页渲染引擎,被广泛用于开发浏览器,如 Safari 和早期版本的 Google Chrome。这个"WEBKIT研究报告1和2"很可能是对Webkit技术深入研究的两份文档,涵盖了其核心功能、设计理念、性能优化以及...