WebKit工程组织与结构随笔

news2024/11/16 10:24:35

1.WebKit结构

       

1.1 三个模块

        概括地说,WebKit由主要由三个模块组成:JavaScriptCore、WebCore 和 WebKit。WebKit作为了整个项目的名称。

1). WebCore,

2). WebKit,

3). JavaScriptCore。

WebCore:排版引擎核心,WebCore包含主要以下模块:Loader, Parser(DOM,Render), Layout,Paint。

WebKit:移植层,主要包含: GUI,File System, Thread,Text,图片编解码等与平台相关的函数。

JavaScriptCore:JS虚拟机,相对独立,主要用于操作DOM, DOM是W3C定义的规范,主要用于定义外部可以操作的浏览器内核的接口,而webcore必须实现DOM规范。

(具体的DOM规范可以查w3c.)

1.2    WebKit分模块介绍

Webkit平台相关

1)       CURL网络库

2)       libPng, LibJpeg图形处理相关

3)       sqlite小型关系数据库

WebCore核心

1)       Loader加载资源及Cache 实现(Curl)

2)       DOM : HTML词法分析与语法分析

3)       DOM : DOM节点与Render节点创建,形成DOM树

4)       Render:Render树介绍,RenderBox

5)       Layout:排版介绍

6)       Css Parser模块

7)       Binding-DOM与JavascriptCore绑定的功能

JavascriptCore-javascript引擎

1)       API-基本javascript功能

2)       Binding与其它功能绑定的功能,如:DOM,C,JNI

3)       DerviedSource自动产生的代码

4)       PCRE-Perl-Compatible Regular Expressions 

5)       KJS-Javascript Kernel

2.平台与工具

当前WebKit支持四种平台:GTK、QT、Mac OS X、和Cygwin。

GTK和QT使用qmake

Mac OS X使用xcodebuild

Cygwin则使用Visual Studio

下面主要针对Qt版的WebKit作分析介绍:        

        首 先,执行WebKitTools/Scripts下的build-webkit Perl 脚本,可以使用一些参数配置需要的功能模块,主要有SVG的一些功能配置,以及XPATH、XSLT、VIDEO等。脚本执行过程中会对相应的参数进行解析,确定编译选项、功能模块、平台信息以及相应的工具、输出路径等等参数,最后根据不同的参数,使用qmake工具由webkit.pro生成整个工程的makefile。在make的过程中会进一步调用qmake由各个子模块的.pro项目文件生成各模块的makefile。最后make各个子模块的makefile就可以得到需要的目标文件。

3.工程结构

        这个project可以分成JavaScriptCore、WebCore、WebKit三个子模块,对应到三个子目录,具体的如上面WebKit结构介绍的。

       更进一步,整个project又分成了六个可构建出来的子project,对应到相应的.pro文件。

WebKit\WebCore\WebCore.pro:生成libQtWebKit.so或libQtWebKit.a,是整个WebKit引擎库,WebKit应用都是基于这个库。

WebKit\JavaScriptCore\kjs\testkjs.pro:生成testkjs可执行文件,它是一个JavaScript的测试工具,测试JavaScriptCore模块的功能实现。

WebKit\JavaScriptCore\pcre\dftables.pro:生成dftables可执行文件,也是一个工具。

WebKit\WebKit\qt\QtLauncher\QtLauncher.pro:生成QtLauncher可执行文件,它是基于WebKit的一个简单浏览器的应用。

WebKit\WebKit\qt\Plugins\plugins.pro:生成了libqtwebico.so,install后会放到/usr/lib/qt4/plugins/imageformats/下,这个库的作用还不明了,因为目前运行的QtLauncher应用没有用到它,有待研究。

WebKit\WebKitTools\DumpRenderTree\qt\DumpRenderTree.pro:生成DumpRenderTree工具,也是基于WebKit的一个应用工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1390865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-344. 反转字符串、9. 回文数

题目1: 解题方法 直接用reverse()即可 代码: class Solution(object):def reverseString(self, s):""":type s: List[str]:rtype: None Do not return anything, modify s in-place instead."""return s.reverse()如果不…

STC8H8K蓝牙智能巡线小车——3.按键开关状态获取

电路分析 引脚为P37开关未按下时,P37是高电平开关按下时,GND导通,P37是低电平 编程思路 Driver目录中添加KEY.h文件,应包含引脚定义、开关GPIO实例化函数、开关状态获取函数以及当按下和未按下时执行不同的函数(函数…

用Python“自动连发消息”

自动连发消息,基本上C和Python的思路都是不停的模拟“击键”操作,还有一种VB的脚本写法,反成每种语言都能写,更厉害的可以用java做出个GUI界面,先上代码。 一 代码 import pyautogui # 鼠标 import p…

掌握Spring缓存-全面指南与最佳实践

第1章:引言 大家好,我是小黑,咱们今天来聊聊缓存,在Java和Spring里,缓存可是个大角色。咱们在网上购物,每次查看商品详情时,如果服务器都要去数据库里翻箱倒柜,那速度得慢成什么样&…

线性回归理论+实战

线性回归 什么是线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation (d2l.ai) 模型 损失函数 模型拟合(fit)数据之前,我们需要确定一个拟合程度的度量。 损失函数(loss function)能够量化目标的实际值…

仿真机器人-深度学习CV和激光雷达感知(项目2)day01【项目介绍与环境搭建】

文章目录 前言项目介绍功能与技术简介硬件要求环境配置虚拟机运行项目demo 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎大家的关注,我的博客主要关注…

Unity Shader 的模板测试效果

模板测试是渲染管线中逐片元操作的一环,它的作用是筛选出指定模板的片元,而不符合模板的片元会被舍弃,从而做到一个遮罩的效果。 以下是Unity中实践的一个效果: 场景中可以看出,熊模型和茶壶模型都在差不多的位置&am…

力扣labuladong一刷day61天动态规划最小下降路径

力扣labuladong一刷day61天动态规划最优子结构 一、931. 下降路径最小和 题目链接:https://leetcode.cn/problems/minimum-falling-path-sum/description/ 如下图所示,求最小下降路径,定义dp[i][j]表示从最上面那行的任意位置抵达到nums[i]…

vtk9.3 + Visual Studio2019 + Cmake3.28 win11 上的环境安装(这个过程网上比较多,自己记录下过程加深下印象)

开始 介绍 欢迎来到 VTK!我们建议您首先阅读《VTK book》,这是一本全面的 VTK 指南,涵盖了其功能的所有方面。此外,您可能会发现探索 VTK 示例很有帮助,这是一组有用的参考资料,演示了如何使用 VTK 的不同模…

【电力电子】1 Cuk仿真电路

【仅供参考】 【2022.11西南交大电力电子仿真】 参考博客: [1] Cuk电路的参数计算及仿真_cuk电路参数计算-CSDN博客 目录 1 仿真电路搭建及波形记录 1.1 DCM工作模式 1.2 CCM工作模式 2 PI控制器的设计 1 仿真电路搭建及波形记录 仿真要求:建立输入…

通过OpenIddict设计一个授权服务器02-创建asp.net项目

在这一部分中,我们将创建一个ASPNET核心项目,作为我们授权服务器的最低设置。我们将使用MVC来提供页面,并将身份验证添加到项目中,包括一个基本的登录表单。 创建一个空的asp.net core项目 正如前一篇文章中所说,授权…

从零开始:Golang中JSON解析与生成的完全指南

从零开始:Golang中JSON解析与生成的完全指南 引言Golang与JSON:基础概念JSON简介为何在Golang中使用JSON Golang中JSON数据的解析使用encoding/json解析JSON解析成基本数据类型解析成自定义结构体错误处理和常见问题 Golang中生成JSON数据将Golang对象转…

ZABBIX根据IP列表,主机描述,或IP子网批量创建主机的维护任务

有时候被ZABBIX监控的主机可能需要关机重启等维护操作,为了在此期间不触发告警,需要创建主机的维护任务,以免出现误告警 ZABBIX本身有这个API可供调用(不同版本细节略有不同,本次用的ZABBIX6.*),实现批量化建立主机的维护任务 无论哪种方式(IP列表,主机描述,或IP子网)创建维护…

服务器里面很卡,打开文件卡住了一般是什么问题,怎么解决

随着互联网业务的快速发展,各项业务都绕不开服务器。在日常使用中,服务器有着非常重要的作用。而我们日常使用中,也会遇到各种各样的问题。最近就有遇到用户联系咨询德迅云安全,询问自己服务器突然很卡,打开文件都卡住…

预备知识02-自动微分

线性代数、微积分 这两个不作介绍,可以点击下方链接阅读原文 2.3. 线性代数 — 动手学深度学习 2.0.0 documentation (d2l.ai) 2.4. 微积分 — 动手学深度学习 2.0.0 documentation (d2l.ai) 梯度 在微积分中,对多元函数的参数求偏导,把…

【RabbitMQ】RabbitMQ高级:死信队列和延迟队列

目录 设置TTL(过期时间)概述RabbitMQ使用TTL原生API案例springboot案例 死信队列概述原生API案例springboot案例 延迟队列概述插件实现延迟队列安装插件代码 TTL实现延迟队列实现延迟队列优化 设置TTL(过期时间) 概述 在电商平台…

《数据结构》实验报告-实验二 栈与队列的应用

《数据结构》实验报告-实验二 栈与队列的应用 一、问题分析 (1)实验1中,火车进站和出站的过程,与后进先出的数据结构栈很相似。因为火车只能单方向进出站,前面进来的火车反而要等后面的火车先出站,这也导…

MongoDB面试系列-01

1. MongoDB 是什么? MongoDB是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。再高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在给Web应用提供可扩展的高性能数据存储解决方案。 MongoDB将数据存储…

php网站上传文件失败File upload failed(文件大小超过限制)

php项目中,用户上传文件报错:“File upload failed”,按如下代码输出文件名: $temp_name $_FILES[file][tmp_name]; $file_name basename($_FILES[file][name]);echo "Temporary File Name: " . $temp_name . "…

软件设计师3--CPU组成(运算器与控制器)

软件设计师3--CPU组成(运算器与控制器) 考点1:计算机结构考点2:CPU结构CPU包括运算器和控制器例题: 考点1:计算机结构 考点2:CPU结构 CPU包括运算器和控制器 运算器: 算数逻辑运算…