《WebKit 技术内幕》之一: 浏览器和浏览器内核

news2024/11/17 17:49:38

第一章 浏览器和浏览器内核

        浏览器的内核是浏览器的最核心的部件。

1.浏览器

1.1 浏览器发展简介

  • 80年代后期90年代初期:由Berners-Lee 发明,诞生了世界上第一个浏览器 WorldWideWeb,后改名为 Nexus;并于1991年公布源代码,这个版本功能非常简单,只支持文本、简单的样式表、电影、声音和图片
  • 1993:由Marc Andreessen 领导团队开发了Mosaic浏览器,后来的改名 Netscape ,这个版本也很简单,只能显示简单的静态 HTML 元素,没有 js 和 css 。
  • 1995:微软IE 浏览器被推出,第一次浏览器大战拉开帷幕,大战的结果是网景浏览器消亡。
  • 1998:网景成立 Mozilla 基金会,开始了Netscape的凤凰涅槃,开始开发火狐Firefox浏览器。开始了第二次浏览器大战的帷幕。
  • 2003:基于webkit内核的苹果浏览器Safari 浏览器发布。
  • 2004:FireFox 浏览器1.0版本发布(开源项目),网景公司主导开发,Mozilla 基金会推动,第二次浏览器大战进入白热化。
  • 2005:苹果公司开源 Safari 浏览器中非常重要部件webkit源码,发起了WebKit的开源项目,特别是值得一提的是对移动版的意义非常重大,推出了Safari移动版,拉开了浏览器的一个新的序幕,成为一个重要的里程碑。
  • 2008:Chromium 被创建,以苹果开源项目 WebKit 作为内核,目标是创建一个快速、支持众多操作系统的浏览器。
  • 2009:Chrome 发布,以 Chromium 稳定版本作为基础,发布chrome浏览器。

        经过上面的发展,浏览器在桌面系统的市场形成了三足鼎立的形式,微软IE、Mozilla的火狐、谷歌的chrome(起源于webkit内核的Blink内核)构成了最流行的浏览器,占总份额的90%以上。而在移动端市场则是另一番情形,由于苹果的ios系统和谷歌的andriod的系统站领先地位。而其对应的浏览器Safari和Andriod的浏览器也是最流行的。

1.2 浏览器特性

     浏览器功能包括:网络、资源管理、网页浏览、多页面管理、插件和扩展、书签管理、历史记录管理、设置管理、下载管理、账户和同步、安全机制、隐私管理、外观主题、开发者工具等。

        在桌面和移动操作系统领域,对浏览器的支持如下表所示:

1.3 HTML

        HTML是一种超文本标记语言,用于网页的创建和其他信息在浏览器中显示。HTML5技术在2012年由两大组织WHATWG和W3C推荐为候选规范,是一系列新技术的集合具有构建思想的前瞻性。

HTML5类别:10个大类别,每个类别由众多技术或者规范组成。

  • 离线:Application cache、Local Storage、Index DB、在线/离线事件
  • 存储:Application cache、Local Storage、Index DB 等
  • 连接:Web Sockets、Server-sent 事件
  • 文件访问:File API、File System、File Writer、ProgressEvents
  • 语义:各种新的元素,包括 Media、structural、国际化、Link relation、属性、form 类型、microdata 等方面
  • 音频和视频:HTML5 Video、Web Audio、WebRTC、Video track 等
  • 3D和图形:Canvas 2D、3D CSS 变换、WebGL、SVG等
  • 展示:CSS 2D/3D变换、转换(transition)、WebFonts等
  • 性能:Web Worker、HTTP caching等
  • 其他:触控和鼠标、Shadow DOM、CSS masking 等

       HTML早期网页内容是静态的,随着javaScript语言的诞生,可以进行动态的进行内容的更新。 JavaScript 语言是 EMCAScript 规范的一种实现,最初用于网页的脚本语言还有 JScript,标准化组织制定脚本语言的规范 EMCAScript 。特别是HTML5阶段,很多规范规范都是基于javascript语言来定义的。另一个革命性的成果是CSS级联样式表的引入,使得内容和显示分离,极大的提升了显示效果和开发效率。

        伴随HTML的技术的另一个技术是HTTP,这是一种构建在TCP/IP之上的的应用层协议,用于传输HTML文本和所涉及的各种资源,宝库图片和多媒体等,随后产生安全版的HTTP,即HTTPS,它在HTTP之下加入SSL /TLS,用于安全地传输数据。

1.4  用户代理

    User Agent 作用是表明浏览器的身份,网页内容提供商可以根据用户代理为不同的浏览器发送不同的网页内容。用户代理字符串越来越长:某种浏览器的流行,很多内容提供商和网站需要根据流行的浏览器来定制内容,比如说 IE 发现很多内容提供商传给 IE 浏览器的内容没有传给火狐的丰富(虽然 IE 也能支持他们),IE 就将其用户代理添加 "Mozilla" 等相关字符串,表明这是一个可以和 Mozilla 兼容的 IE 浏览器(内容提供商会根据这个 "Mozilla" 字符串将发送给 Firefox 浏览器的呢绒也发送给 IE 浏览器,因为在他们看来这些都是 "Mozilla" 的浏览器)。

各浏览器的代理字符串的设置实例如下:

Mozilla Firefox:   Mozilla/1.0(Windows NT 6.1lrv:2.0.1) Gecko/20100101Firefox/4.0.1

IE(IE7):              Mozilla/4.0(compatiibale;MSIE7.0;Windows NT 6.0) 

Safari:                Mozilla/5.0(Linux;Andriod4.0.4;Galaxy Nexus Build/IMM76B) AppleWebKit/535.19(KHTML,Like Gecko)Chrome/18.0.1025.133 Mobile Safar/535.19

2.浏览器内核及特性

2.1 内核和主流内核

      浏览器内核(渲染引擎):主要的作用是将页面转化为可视化(准确讲还要加上可听化)的图像结果。渲染就是更具描述或者定义构建数学模型,通过模拟生成图像的过程。浏览器渲染引擎就是能够将 HTML/CSS/JavaScript 文本及其相应的资源文件转换成图像结果的模块。

        目前主流的渲染引擎包括Trident、Gecko和Webkit,它们分别是IE、火狐和Chrome的内核。有的渲染引擎可以被多个浏览器所采用。

Trident

Gecko

WebKit

基于渲染引擎的浏览器或者 Web 平台

IE

Firefox

Safari,Chromium/Chrome,Android浏览器,ChromeOS,WebOS等

        自从WebKit'开源后有很多浏览器,采用其为渲染引擎,特别是在移动领域,更是占据了垄断地位。已经有超过30种浏览器和web平台是基于webkit渲染引擎开发的。Web平台的ChromeOS和WebOS也是基于WebKit开发。利用HTML5的强大能力,具有前瞻性地尝试开发了支持HTML的web操作系统。

2.2 内核特征

内核主要分为三个层次,最上层为渲染引擎。

浏览器渲染引擎功能模块:

  • HTML 解释器:解释 HTML 文本,将 HTML 文本解释成 DOM 树。
  • CSS 解释器:级联样式表的解释器,为 DOM 中的各个元素对象计算出样式信息。
  • 布局:DOM 创建之后,WebKit 需要将其中的元素对象同样式信息结合起来,计算它们的大小位置等布局信息,形成一个能够表示这所有信息的内部表示模型。
  • JavaScript 引擎:JavaScript 引擎能够解释 JavaScript 代码并通过 DOM 接口和 CSSOM 接口来修改网页内容和样式信息,改变渲染结果。
  • 绘图:使用图形库将布局计算后的各个网页的节点绘制成图像结果。

渲染引擎的一般渲染过程:实线表示先后关系,虚线表示在渲染过程中每个阶段可能使用到的其他模块

中间层为基础模块,这层包括网络、存储、2D/3D图形、音频视频和图片解码器等。实际上,渲染引擎还应该包括如何使用这些依赖模块的部分,这部分的工作其实并不少,因为需要使用设计出合适的框架使用它们来高效的渲染网页。

最下层为操作系统的支持层,如线程支持和文件支持等。

         有了上面三个层次的模块功能的介绍,下面图所介绍的就是这些模块如何一起工作以完成网页的渲染过程。

        首先是网页内容,输入到HTML解释器,HTML解释器在解释它后构建成一颗DOM树,这期间如果遇到JavaScript代码则交给JavaScript引擎去处理,如果网页中包含CSS,则交给CSS解释器去解释。当DOM树建立的时候,渲染引擎接收来自CSS解释器的样式信息,构建一个新的内部绘图模型。该模型由布局模块计算模型内部各个元素的位置和大小信息,最后由绘图模块完成从该模型到图像的绘制。

        图中虚线箭头的指向表示在渲染过程中,每个阶段可能使用到其他模块,在网页内容的下载中,需要使用到网路和存储;在计算布局和绘图的时候,需要使用2D/3D的图形模块,同时因为要生成最后的可视化结果,这时需要开始解码音频、视频和图片,同其他内容一起绘制到最后的图像中。

        在渲染完成之后,用户可能需要跟渲染的结果进行交互,或者网页自身有动画操作,一般而言,这需要持续的重复渲染过程。

3.WebKit 内核

3.1 WebKit介绍

        webkit起源于KHTML,是KDE开源项目的KHTML和KJS引擎的一部分。在它的诞生和发展过程中,由两家著名的公司参与开发过程中,造成两次裂变。诞生两个内核webkit和blink,并发展和产生了两个主流的浏览器,分别为safari和chrome

        广义 WebKit :WebKit 项目。

        狭义 WebKit:WebKit 嵌入式接口,即在 WebCore (包含 HTML 解释器、CSS 解释器和布局等模块)和 JavaScript 引擎之上的一层绑定和嵌入式编程接口,可以被各种浏览器调用。

        WebKit 移植(Port):由于各自需求不同,或者操作系统不同,或者依赖的模块不同(如 2D 图形库,有 CG、skia、cairo、Qt等),操作系统的开发者必然需要 WebKit 设计和定义一套灵活的框架系统,不同厂商基于框架系统完成基于自身操作系统和依赖模块的实现。WebKit 每个移植的实现都不同,对 HTML5 规范的支持也不尽相同。

3.2 WebKit和WebKit2

     WebKit2:一组支持新架构的全新绑定和接口层,该接口和调用者代码与网页渲染工作代码不在同一个进程。

WebKit2至少有两个进程,其一是UI进程,即WebKit2绑定和接口所在的进程,位于浏览器或者web平台的UI进程;其二是Web进程,也就是网页渲染所在的进程。

3.3 Chromium 内核:Blink

        Blink内核,2013年4月从 WebKit 复制出来并独立运作。独立后谷歌对webkit进行了如下的改动增强:

     (1)移除了Chromium浏览器所需要之外的其他移植代码。

     (2)实现跨进程的iframe,允许网页嵌入其他页面,并为iframe创建一个单独的沙箱来规避存在的潜在的安全问题。

    (3) 重新整理和修改webkit关于网络方面的接口,在blink中做了大的调整。

    (4)将DOM树引入JavaScript引擎中,降低JavaScript引擎访问DOM树的代价,提升访问速

   (5)针对各种技术的性能优化,包括但不限于图形、JavaScript引擎、内存使用、编译的二进制文件大小等。

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

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

相关文章

《2023年终总结》

笔者来回顾一下2023年的个人成长。 2023年总的来说,工作和生活都相对比较顺利。 工作上领导给予了肯定的评价,升职加薪,对我的鼓舞很大; 生活上和女朋友的感情越来越好,生气频率降低,也能相互理解&#xf…

【编码魔法师系列_构建型4】原型模式(Prototype Pattern)

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通…

Meproc:简单高效的跨平台进程/任务管理工具

最近使用 Melang 语言写了一个 supervisor 相似服务Meproc来管理进程。 Meproc 有如下特性: 使用 HTTP API 管理控制 Meproc 来管理进程跨平台,支持 UNIX/Linux 、Mac 、Windows 等平台支持 cron 类定时调度任务支持简单的任务间依赖关系支持原生的协…

基于51单片机的模拟量输入输出通道实验

实验一 模拟量输入输出通道实验(C51) 一、实验目的: 1、了解A/D、D/A转换的基本原理。 2、了解A/D转换芯片ADC0809、D/A转换芯片DAC0832的性能及编程方法。 3、掌握过程通道中A/D转换与D/A转换与计算机的接口方法。 4、了解计算机如何进…

第二证券:利空因素影响成本端 豆粕期现价偏弱运行

上个买卖周,受利空要素影响,内盘豆粕期价刷新2021年12月14日以来收盘价新低。到上周五收盘,豆粕主力合约MO2405最低下探至3075元/吨,收报3078元/吨,周内累计跌幅近4%。业内人士以为,美国农业部超预期调高20…

pinyin-pro库使用方式

pinyin-pro 是一个专业的 JavaScript 中文转拼音的库,具备多音字识别准确、体积轻量、性能优异、功能丰富等特点。 pinyin-pro官网链接:介绍 | pinyin-pro 运行展示 pinyin-pro安装命令: # 选择一个你使用的包管理器进行安装即可# NPM $ n…

学网络必懂的华为CSS堆叠技术

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

2024多系统萎缩最新全球特效药治疗进展

多系统萎缩是一种罕见的神经退行性疾病,由于缺乏有效的治疗方法,患者经常面临症状无法缓解和生活品质下降的困扰。然而,近期刘家峰大夫基于中医理论研究和临床实践,采用中药治疗多系统萎缩取得了显著疗效,给患者带来了…

mysql原理--undo日志2

1.概述 上一章我们主要唠叨了为什么需要 undo日志 ,以及 INSERT 、 DELETE 、 UPDATE 这些会对数据做改动的语句都会产生什么类型的 undo日志 ,还有不同类型的 undo日志 的具体格式是什么。本章会继续唠叨这些 undo日志 会被具体写到什么地方&#xff0c…

RMI简介

RMI 介绍 RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此,RMI 意味着需要一个…

Spring MVC中的一些常用注解

目录 RequestMapping 实现路由映射 限制请求方式 PathVariable 从url中获取变量的值 更改绑定参数的名字 RequestParam 可以传递集合 更改绑定参数的名字 可修改是否为必传参数 RequestBody 获取请求正文的内容 可修改是否为必传参数 RequestPart 可以支持上传…

Android中的SPI实现

Android中的SPI实现 SPI是JVM世界中的标准API,但在Android应用程序中并不常用。然而,它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中,不同的提供者为推送功能提供服务,而在大型项目中…

python入门,数据容器:字典dict

字典作用就和它的名字一样,我们可以通过某个关键字找到它对应的信息,或者讲的高级一点,就是key与value的对应关系 举例: 一场考试小明考了80分,小红考了90分,小东考了95分,在字典里&#xff0…

使用JDK自带的jvisualvm工具查看堆dump文件【回顾】

JDK自带的jvisualvm的使用 打开方式: 直接命令行输入:jvisualvm ,然后回车​​​​​​​ ​​ 或者去jdk的bin目录下找到打开 安装visual GC插件 检测死锁 再点击“死锁 dump”就可以看到死锁的线程信息了;

C++每日一练(16):数组逆序

题目描述 给你m个整数&#xff0c;将其逆序输出 输入 第一行一个整数m&#xff08;3 < m < 100 )&#xff1a;数的个数 第二行m个整数&#xff08;空格隔开&#xff09;&#xff08;这些数在0-9999999之间) 输出 m个整数&#xff08;空格隔开&#xff09; 输入样例 3 1 7…

SV-7041T 30W网络有源音箱校园教室广播音箱,商场广播音箱,会议广播音箱,酒店广播音箱,工厂办公室广播音箱

SV-7041T 30W网络有源音箱 校园教室广播音箱&#xff0c;商场广播音箱&#xff0c;会议广播音箱&#xff0c;酒店广播音箱&#xff0c;工厂办公室广播音箱 SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将…

GZ075 云计算应用赛题第9套

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷9 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenSt…

【已解决】fatal: Authentication failed for ‘https://github.com/.../‘

文章目录 异常原因解决方法 异常原因 在 Linux 服务器上使用git push命令&#xff0c;输入用户名和密码之后&#xff0c;总会显示一个报错&#xff1a; fatal: Authentication failed for https://github.com/TianJiaQi-Code/Linux.git/ # 致命&#xff1a;无法通过验证访问起…

CAN总线记录仪在车企服务站的应用

CAN总线记录仪在车企服务站的应用 CAN总线记录仪在车企服务站中有着广泛的应用。这种设备可以记录车上的CAN总线数据&#xff0c;方便工程师进行分析&#xff0c;以找出可能存在的问题。CAN记录仪一般采用TF卡来存储数据&#xff0c;实现离线脱机实时存储。数据存储完毕后&…

Shiro框架:Shiro登录认证流程源码解析

目录 1.用户登录认证流程 1.1 生成认证Token 1.2 用户登录认证 1.2.1 SecurityManager login流程解析 1.2.1.1 authenticate方法进行登录认证 1.2.1.1.1 单Realm认证 1.2.1.2 认证通过后创建登录用户对象 1.2.1.2.1 复制SubjectContext 1.2.1.2.2 对subjectContext设…