《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 的进程则未必如此。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARM 1.12

norflash与nandflash的区别: 一、NAND flash和NOR flash的性能比较 1、NOR的读速度比NAND稍快一些。 2、NAND的写入速度比NOR快很多。 3、NAND的4ms擦除速度远比NOR的5s快。 4、大多数写入操作需要先进行擦除操作。 5、NAND的擦除单元更小,相应的擦除电…

嵌入式软件工程师面试题——2025校招社招通用(二十一)

说明: 面试群,群号: 228447240面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但…

Unity关于新手引导中实现遮罩镂空效果

在新手引导每一步中实现可以遮掉其他部分而显示当前需要点击的部分,只需要在每一步引导的时候设置对应的镂空区域的RectTransform.效果如下图: 代码: public class SelfMaskSet : MaskableGraphic, ICanvasRaycastFilter {[SerializeField]p…

企业面临哪些能源消耗问题,能源消耗监测管理系统是如何解决这些问题?

随着全球环境问题的日益严重,能源问题一直被世界广泛关注。在企业运营过程中,能源消耗问题也是一大挑战。企业在生产和运营过程中需要大量的能源支持,包括电、水、气、热等多种能源。由于能源价格的不稳定性,使得企业在能源消耗方…

数学建模--比赛

内容来自数学建模BOOM:【快速入门】北海:数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 1.学习内容 2.参赛须知 1)参赛作品的组成 2)参赛作品的提交 3.软件安装 4.注意…

微图Web版如何加载吉林一号影像?

曾为你分享了如何查看调用我们已购买的上海黄浦区区县图。 这里再以该图源为例,为你分享在水经微图(简称“微图”)Web版中如何加载吉林一号影像的方法。 吉林一号图源 如果你还没有吉林一号图源,可以从以下网址登录后免费申请。…

《C++ Primer》第15章 面向对象程序设计(一)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 15.1 OOP:概述(P526) **面向对象程序设计(object-oriented programming)**的核心思想是数据抽象、继承和动态绑定。 继承 通过继承(…

pycharm import torch

目录 1 安装 2 conda环境配置 3 测试 开始学习Pytorch! 1 安装 我的电脑 Windows 11 Python 3.11 Anaconda3-2023.09-0-Windows-x86_64.exe cuda_11.8.0_522.06_windows.exe pytorch (管理员命令行安装) pycharm-community-2023.3.2.exe 2 c…

集成电路/芯片可循环成本(RE)和非可循环成本(NRE)

数字集成电路(Integrated Circuit,IC)的成本可以分为可循环成本和非可循环成本两类。 可循环成本是指在芯片制造过程中,随着芯片批量的增加而逐渐降低的成本。可循环成本主要包括: 晶圆制造成本:包括晶圆…

OpenCV-19图像的仿射变换

放射变换是图像旋转,缩放,平移的总称,具体的做法是通过一个矩阵和原图片坐标进行计算,得到新的坐标,完成变换,所以关键就是这个矩阵。 一、仿射变换之图像平移 使用API------warpAffine(src &…

C++ --- 基础知识与细节(上)

目录 1. 常量 2.关键字 3.标识符命名规则 4.数据类型 4.1 整型 4.2实型(浮点型) 4.3 字符型 4.4 字符串型 4.5布尔类型 bool (只占一个字节大小) 5.sizeof关键字 6.数据的输入 7. goto语句 8. 一维数组 // 数组名是常量&am…

【Filament】材质系统

1 前言 本文主要介绍 Filament 的材质系统,官方介绍详见 → Filament Materials Guide。材质系统中会涉及到一些空间和变换的知识点,可以参考:【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGL ES】MVP矩阵变换、…

IDEA中启动项目报堆内存溢出或者没有足够内存的错误

1.报错现象 java.lang.OutOfMemoryError: Java heap space 或者 Could not reserve enough space for object heap 2.解决办法 在运行配置中VM选项后加下面的配置: -server -XX:MaxHeapSize256m -Xms512m -Xmx512m -XX:PermSize128M -XX:MaxPermSize256m 3.JVM虚…

Conmi的正确答案——eclipse C/C++显示“未解析的包含:<xxx.h>”/“Unresolved inclusion: <xxx.h>”

eclipse IDE 版本&#xff1a;2023-12 部分采自&#xff1a;解决方法&#xff1a;关于问题 “C - Unresolved inclusion: <iostream>” 解释事项&#xff1a;方法一可能版本不同&#xff0c;部分界面修改了。这里使用的是方法二的解决方法。&#xff08;或者各位大神的描…

Gartner发布数据安全治理指南:采取四个关键步骤,加快数据安全治理的采用

部署数据安全控制措施是为了保护数据及隐私&#xff0c;但业务领导者通常采用与业务成果直接相关的评判标准对数据进行分类&#xff0c;这与安全领域使用的数据分类观点不同。首席信息安全官&#xff08;CISO&#xff09;应克服沟通障碍&#xff0c;展示如何通过增强数据安全来…

Verilog刷题笔记15

题目&#xff1a; An adder-subtractor can be built from an adder by optionally negating one of the inputs, which is equivalent to inverting the input then adding 1. The net result is a circuit that can do two operations: (a b 0) and (a ~b 1). See Wikipe…

15.云原生之k8s容灾与恢复实战

云原生专栏大纲 文章目录 Velero与etcd介绍Velero与etcd备份应用场景Velero与etcd在k8s备份上的区别 Velero备份恢复流程备份工作流程Velero备份时&#xff0c;若k8s集群发送变化&#xff0c;会发发生情况&#xff1f;Velero 备份pv&#xff0c;pv中数据变化&#xff0c;会发发…

k8s---对外服务 ingress

目录 目录 目录 ingress与service ingress的组成 ingress-controller&#xff1a; ingress暴露服务的方式 2.方式二&#xff1a;DaemonSethostnetworknodeSelector DaemonSethostnetworknodeSelector如何实现 3.deploymentNodePort&#xff1a; 虚拟主机的方式实现http代…

CHAPTER 9: 《DESIGN A WEB CRAWLER》第9章 《设计一个web爬虫》

CHAPTER 9: 《DESIGN A WEB CRAWLER》第九章 设计一个web爬虫 在本章中&#xff0c;我们将重点介绍网络爬虫设计&#xff1a;一种有趣而经典的系统设计 面试问题。 网络爬虫被称为机器人或蜘蛛。它被搜索引擎广泛用于发现网络上的新内容或更新内容。内容可以是网页、图像、视频…

TCP的三次握手,四次挥手

三次握手 第一次握手&#xff1a;客户端发送SYN报文&#xff0c;井发送seq为x序列号给服务端&#xff0c;等待服务端的确认第二次握手&#xff1a;服务端发送SYNACK报文&#xff0c;并发送seq为Y的序列号&#xff0c;在确认序列号为x1第三次握手&#xff1a;客户端发送ACK报文&…