《WebKit 技术内幕》之三(3): WebKit 架构和模块


3 Webkit2
3.1  Webkit2 架构及模块
        相比于狭义的WebKit,WebKit2是一套全新的结构和接口,而并不是一个简单的升级版。Webkit2 的思想同 Chrominum 类似,就是将渲染过程放在单独的进程中来完成,独立于用户界面。

        webKit2中也引入了插件进程,还引入了网络进程。“Web 进程”对应于 Chrominum 中的  Renderer进程,主要是渲染网页。“UI 进程”对应于 Chrominum 中的Browser  进程,接口就暴露在该进程中,应用程序(浏览器和使用者)调用该接口即可。
3.2  Webkit 和 Webkit2 嵌入式接口
        Webkit 提供嵌入式接口,该接口表示其他程序可以将网页渲染嵌入在程序中作为其中的一部分,或者用户界面的一部分。对于WebKit的Chromium移植来说,它的接口主要用于Chromium浏览器,而不是嵌入式的使用方式。
        在 Webkit 项目中,狭义 Webkit 的接口主要是与移植相关的 ewk_view 文件中的相关类。其主要思想是将网页的渲染结果作为用户界面的一个窗口部件,从这个角度上看,这跟其他的部件没有什么不同,区别在于它用来显示网页的内容。总结这些接口,按功能大致可以把所有接口分成6种类型:

  • 加载网页、获取加载进度、停止加载、重新加载等
  • 遍历前后浏览记录,可以前进、后退等
  • 网页的很多设置,例如缩放、主题、背景、编码等
  • 查找网页内容、高亮等
  • 触控事件、鼠标事件处理
  • 查看网页源代码、显示调试窗口等与开发者相关的接口。

       这也式通常的嵌入式接口提供的功能,这些类型大概有180多个接口,非常之多。

         Webkit2 接口不同于 Webkit 的接口,它们是不兼容的,不过目的都差不多,都是提供嵌入式的应用接口。WeKit2接口大致可以分为两个大的部分,下面仍以EFL的移植部分为例加以说明。

        第一部分是WebView相关的接口,表示渲染的设置、渲染过程、界面等。其中大多数跟各个移植紧密相关,这里有三个主要的类,它们被各个移植所共享。

  • WKView[Ref]: 表示的是一个与平台相关是视图,如在Windows上它表示的就是一个窗口的句柄。
  • WKContextRef:所有页面的上下文,这些被共享的信息包括local storage、设置等。
  • WKPageRef:表示网页,也就是浏览的基本单位。

        虽然下面有大量跟移植相关的类,最主要的接口其实还是ewk_view,在EFL中,WebKit2的ewk_view接口同WebKit还是比较相似的,提供的功能也类似,都是一个能够渲染网页的窗口部件。但是,其接口比WebKit的部件少很多,去除一些不是很有用的接口,大概还有48个接口。接口类中还有很多其他跟移植相关的类,它们很多是为提供该窗口部件服务的,例如历史记录等。

        第二部分是上面接口依赖的基础类,它们被各个移植所共享,既包括容器,字符串等基础类,也包括网页相关的基础类,例如URL、请求】网页设置等。

        WebKit2还有一部分接口其实在Web进程里的,那就是WebBundle,其目的是让某些移植访问DOM,目前还没有明确的需求。

3,3 比较 Webkit2 和 Chrominum 的多进程模型
        Webkit2 的多进程模型参考了 Chrominum 的模型和框架,也提供了多进程之上的接口层,但二者还是有一些区别的
        Chrominum 使用的仍然是 Webkit 接口,而不是 Webkit2 接口,也就是说 Chrominum 是在 Webkit 接口之上构建的多进程架构。
        Webkit2 的接口将多进程结构隐藏起来,这样可以让应用程序不必纠缠于内部的细节。但是,对 Chrominum 来说,它的主要目的时给 Chrominum 提供 Content 接口以便构建 Chrominum 浏览器,其本身目标不是提供嵌入式接口。
        Chrominum 中每个进程都是从相同的二进制可执行文件启动,而基于 Webkit2 的进程则未必如此。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人领域顶刊TRO,TASE及RAL的区别与关系

一、背景 机器人领域越来越火,特别是在具身智能的加持下,让机器人在不久的未来可以完成更多复杂的任务,进入到我们的日常生活(不过应该还需要很长很长时间)。作为机器人方向的Researcher,我们会看许多机器…

未来科技五年人工智能行业产业发展趋势最新竞争力

人工智能(Artificial Intelligence,AI)是近年来快速发展的热门领域,被广泛应用于各个行业。随着技术的不断创新和突破,人工智能行业的竞争力也在不断提升。本文将分析未来科技五年人工智能行业产业发展趋势&#xff0c…

【JavaEEj进阶】 Spring实现留言板

文章目录 🎍预期结果🍀前端代码🎄约定前后端交互接⼝🚩需求分析🚩接⼝定义 🌳实现服务器端代码🚩lombok 🌲服务器代码实现🌴运⾏测试 🎍预期结果 可以发布并…

ssh远程访问及控制

目录 一、ssh协议简介 1、实现远程访问的协议和程序 2、ssh协议的概念及功能 3、ssh协议的工作原理 3.1 对称加密与非对称加密 3.1.1 对称加密(Symmetric Encryption) 3.1.2 非对称加密(Asymmetric Encryption) 3.2 公钥传…

微信商家转账到零钱怎么开通?场景模板

商家转账到零钱是什么? 使用商家转账到零钱这个功能,可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景,提高效率。 商家转账到零钱的使用场景有哪些? 商家…

【生存技能】git操作

先下载git https://git-scm.com/downloads 我这里是win64,下载了相应的直接安装版本 64-bit Git for Windows Setup 打开git bash 设置用户名和邮箱 查看设置的配置信息 获取本地仓库 在git bash或powershell执行git init,初始化当前目录成为git仓库…

C++(13)——string

上篇文章中介绍了中部分函数的用法,本篇文章将继续对其他的函数进行介绍: 1. substr: string substr (size_t pos 0, size_t len npos) const; 函数的两个参数如上述代码所示,此函数的主要作用是根据一个已有的的对象的起始坐标开始&a…

论文笔记(四十)Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds

Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 学习 6D 抓握政策3.1 背景3.2 从点云抓取 6D 策略3.3 联合运动和抓握规划器的演示3.4 行为克隆和 DAGGER3.5 目标--辅助 DDPG3.6 对未知物体进行微调的后视目标 4. 实…

红队打靶练习:BREACH: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.110.1 00:50:56:c0:00:08 …

单片机I/O口驱动MOS管

自记录: 看完本章,串起来看,看mos驱动电路这篇:MOS管驱动电流计算以及分立器件驱动电路-CSDN博客 使用单片机做一个PLC,输出可如下两种情况: 单片机I/O口驱动,为什么一般都选用三极管而不是MOS管&#xf…

二叉树【Java】

文章目录 一、树型结构二、二叉树2.1概念2.2两种特殊的二叉树2.3二叉树的性质2.4二叉树的遍历 三、二叉树的基本操作3.1获取树中节点的个数3.2获取叶子节点的个数3.3获取第K层节点的个数3.4获取二叉树的高度3.5检测值为value的元素是否存在 一、树型结构 树是一种非线性的数据…

Eclipse搭建python环境

一、下载eclipse eclipse官网下载参考链接 二、 下载PyDev ​PyDev 三、安装和配置pyDev 下载完PyDev,解压之后是下面两个文件夹,我下载的版本是PyDev 7.7 ,然后拷到eclipse对应的目录下就可以 四、然后新建一个python程序 1.新建一个项目 ​​…

三、Qt Creator 使用

关于Qt的安装及环境配置,在我的上一篇《二、QT下载、安装及问题解决(windows系统)》已经讲过了。 本章节有一个重点,在新建 工程文件时,所在路径不要有中文,否则编译及运行程序不能正常运行。 在使用Qt Creator(以下…

Redis实现全局唯一Id

一、全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显 受单表数据量的限制 场景分析:如果我们的…

python/c++ Leetcode题解——118. 杨辉三角

方法一:数学 思路及解法 杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。 杨辉三角具有以下性质: 1.每行数字左右对称,由…

【Python数据可视化】matplotlib之设置子图:绘制子图、子图共享x轴坐标、调整子图间距、设置图片大小

文章传送门 Python 数据可视化matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤 三、使用Core API访问与操作数据库 Sqlalchemy 的Core部分集成了DB API, 事务管理,schema描述等功能,ORM构筑于其上。本章介绍创建 Engine对象,使用基本的…

vscode无法自动补全

前提:安装c/c插件 c/c插件功能非常强大,几乎能满足日常编码过程中常用的功能;因此也包含自动补全的功能,开启方法如下: 文件->首选项->设置: 扩展->c/c->Intellisense,找到Intell…

252:vue+openlayers 绘制锥形渐变填充色的圆形

第252个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayer中绘制带有锥形渐变填充色的圆形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共131行)相关API参考专栏目标示例效果 </

【Android开发】不同Activity之间的数据回传实例(一)摘桃子游戏

一、功能介绍 该项目实现的功能主要有&#xff1a; 在首页显示一个按钮点击该按钮跳转到桃园页面在桃园页面&#xff0c;点击桃子会弹窗显示摘到几个桃子&#xff0c;同时被点击桃子消失&#xff0c;总桃子数1点击退出桃园会返回首页&#xff0c;首页桃子数会根据点击的桃子数…