WebKit探究:从内部结构到应用程序开发

文章目录

    • WebKit结构简介
      • 核心模块
      • 其他组件
      • 多进程架构(WebKit2)
      • Wekbit做了什么?
      • 应用程序如何利用 Webkit

        WebKit结构简介

        WebKit是一个开源的浏览器引擎,它由多个模块组成,这些模块协同工作以提供Web内容的渲染和交互功能。下面是WebKit的主要模块和结构:

        核心模块

        1. WebCore:这是WebKit的核心模块,负责解析和渲染Web页面。它包含了HTML解析器、CSS解析器、JavaScript引擎接口、DOM树和渲染树的构建等功能。WebCore还负责处理页面布局和绘制,以及处理各种网络请求。
        2. JavaScriptCore:这是一个独立的JavaScript引擎,负责解释和执行JavaScript代码。它提供了JavaScript的运行环境,并实现了ECMAScript标准。JavaScriptCore与WebCore紧密集成,用于处理Web页面中的JavaScript脚本。
        3. WebKit API:这是一组用于访问和操作WebCore和JavaScriptCore的API。它提供了与平台无关的接口,使得开发者可以在不同的操作系统上使用相同的API来开发基于WebKit的应用程序。

        其他组件

        1. Ports:为了在不同平台上运行,WebKit需要适配各种操作系统和图形库。Ports是一组与平台相关的代码,用于适配不同的操作系统和图形库,如GTK、Qt、Mac OS X等。
        2. Bindings:Bindings是用于将JavaScript与WebCore中的DOM和其他对象进行交互的代码。它实现了JavaScript与C++之间的桥接,使得JavaScript可以操作DOM和其他对象。
        3. Third-party Libraries:WebKit还依赖于一些第三方库,如网络库(如CURL)、图像处理库(如libpng和libjpeg)和数据库库(如SQLite)等。这些库提供了一些基础功能,使得WebKit可以更好地运行在不同平台上。

        多进程架构(WebKit2)

        为了提高性能和安全性,WebKit还引入了多进程架构(称为WebKit2)。在这种架构下,Web内容在一个独立的进程中运行,与浏览器的主进程分离。这种架构可以防止恶意Web内容影响浏览器的其他部分,并提高了整体性能。

        总之,WebKit的结构由多个模块组成,包括核心的WebCore和JavaScriptCore,以及与平台相关的Ports和Bindings。这些模块协同工作,提供了一个功能强大且可扩展的浏览器引擎。

        Wekbit做了什么?

        从用户角度来看,Web浏览器的输入是一个HTML文档,输出是一个可视化的Web页面。就普通用户而言它的输入和输出就是这么简单,如下图所示

        WebKit作为浏览器内核,其输入是Web文档(如HTML、CSS、JavaScript等),输出是一些抽象的模型,而非直接面向用户的可视化页面。

        这些抽象模型由浏览器的上层组件使用,用于绘制用户实际看到的页面。WebKit负责解析和处理Web文档,构建相应的模型(如DOM树、渲染树等),以供上层组件使用。虽然用户无法直接看到WebKit的输出,但这些模型是浏览器呈现Web内容的基础。

        可以明确WebKit在浏览器中的作用是处理和解析Web文档,并生成相应的模型,以支持浏览器的上层组件绘制出用户可见的Web页面。

        应用程序如何利用 Webkit

        利用WebKit的应用程序(如浏览器)位于 WebKit 模块之上,通过与 WebKit 模块交互来实现Web内容的展示,而非直接与 WebCore 和 JavaScriptCore 打交道。

        WebKit 模块抽象出了大多数应用程序(主要是浏览器)所需的功能,提供了足够的接口来实现一个功能完善的浏览器或其他类浏览器应用程序。

        对于特定应用程序,可能需要对 WebKit 进行一定的改造,但通常情况下,了解 WebKit 模块提供的接口就足以进行开发。

        许多平台提供了基于WebKit的浏览器组件,如Symbian S60、Android、Qt、GTK等,使用起来非常方便。

        例如,在某平台上使用名为WebView的组件仅需三行代码即可展示网页。

        WebView *view = new WebView();
        view->load(Url("http://www.google.cn"));
        view->show();
        

        WebKit 通过提供抽象模块和丰富的接口,使得开发人员能够方便地利用其功能来实现各种浏览器和其他Web应用程序。