「图文讲解」浏览器原理与页面渲染过程

news2024/11/15 17:25:22

相信大家在面试的时候面试官总是会问一个问题:“可以说下浏览器从输入url到渲染页面完成过程吗?”,非官方标准答案来啦~

那我们首先需要先来讲一下浏览器是什么,浏览器其实就是一个应用软件,在学习操作系统的时候我们了解到每个应用程序必须至少启动一个进程来执行其功能,为你这个应用程序申请计算机资源,所以浏览器作为一个应用程序也是由许多进程组成的。

我们大体可以分为这几个进程:浏览器进程、网络进程、渲染进程、GPU进程、插件进程。

浏览器进程 -> UI 线程

当我们在浏览器导航栏输入一个内容的时候,浏览器进程里的 UI 线程会先进程解析判断是 URL 还是搜索关键词,如果是 URL,便会通过 IPC 通道将信息传送给网络进程

image.png

网络进程

让我们将镜头转向网络进程网络进程拿到 URL 后,以数据包的形式通过 TCP/IP 协议栈来获取到响应的数据,此时网络进程会将拿到的内容与 URL 一并交给警察局也就是 SafeBrowsing 做下安全检查,检查这个内容是否与某个已知的病毒网站相匹配以及这个IP是否在黑名单里,如果有安全风险会先展示警告页面询问你是否继续访问。

当返回的数据准备完毕且无风险,网络进程就会将数据返回给 UI 线程UI 线程就会去摇一个渲染进程,进入渲染阶段。

IMG_4432.JPG

渲染进程

渲染进程的任务就是把 html、css、JavaScript 等资源进行计算,然后转换为显示器的像素点,最终形成合成帧,返回给浏览器进程

首先是对html进行解析,构建一个以 Document 为根节点的 DOM Tree,解析的过程中如果遇到 script 标签,则会转而去加载解析 JavaScript 代码,如果这里的 JavaScript 使用异步加载则不会影响 html 的解析,否则要等 JavaScript 解析完成后才能继续构建 DOM Tree

DOM Tree 构建完成后会开始解析 CSS,计算样式属性,结合 DOM Tree 构建 Layout Tree,也就是进行布局,我的理解就是构图。至此我们便已经知道了页面「有哪些元素」「长什么样」「在哪里」。

理论有了但是怎么能下笔画呢,是要先画蓝天还是先画白云?所以根据 Layout Tree 又创建了一个绘制顺序表,告诉计算机你的元素在屏幕上的显示层级,要先显示蓝天再显示白云不然白云会被篮天挡住。

一切准备就绪但是这是代码,用户要的是可视化的页面,所以要将以上这些信息转化成用户可见的像素点显示在屏幕上,这个过程就叫做栅格化。渲染进程里的合成线程栅格线程会将这些信息生成合成帧,提交给浏览器进程。

IMG_4438.JPG

GPU 进程

浏览器进程将渲染进程里的合成帧发送给 GPU 进程GPU 进程将其进行渲染并展示在屏幕上,至此用户就可以看到我们写的前端页面啦~

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

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

相关文章

《数据结构、算法与应用C++语言描述》线性表-数组描述

《数据结构、算法与应用C语言描述》线性表-数组描述 5表示在 数据结构算法与应用C语言描述 书中所在章节。 本文包含了《数据结构、算法与应用C语言描述》第五章主要练习题答案,给出了线性表数组描述完整测试代码。 5.1 数据对象 5.1.1 定义 数据对象(data obj…

java开发的师生评教小程序学生对老师评价老师对班级评价打分题单选题意见框系统选课系统

简介 源码1.0(源码2.0选课功能,请往下看) 师生评教小程序,学生可以对老师进行评价,老师可以对班级行进评级。管理员可以创建不同的评教模板(单选题0分或者10分,打分题0-10分,意见框…

三分钟彻底搞懂paint,repaint,update!

最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲。但是他们之间是怎么来调用的呢,咱们来分析一下(想直接看结果,请跳过分析…

2022卡塔尔世界杯感想

一、概述 说说我个人吧!在体育活动上面真是没什么兴趣,篮球,足球...等等竞技运动不敏感! 今年稍微关注了点世界杯比赛!什么原因呢?我有一个爱买彩票/赌球的一个同事!随着世界杯的进行&#xf…

风力发电机组机械功率Pm与转子转速Wm关系(Matlab实现)

目录 1 数学模型 2 代码 3 结果 1 数学模型 风力机空气动力学模型 风力涡轮机的动态输出机械扭矩表示为: 其中是空气密度 , A是叶片扫掠面积 , R是风力涡轮机的转子半径 (m), 是风速 (m/s)。是叶片的功率系数,它是叶片桨距…

linux内网渗透:docker逃逸

Docker逃逸 前言 Docker 逃逸在渗透测试中面向的场景大概是这样,渗透拿到shell后,发现主机是docker环境,要进一步渗透,就必须逃逸到“直接宿主机”。甚至还有物理机运行虚拟机,虚拟机运行Docker容器的情况。那就还要…

基于VUE.JS的招聘系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):本文是基于Vue.js对招聘系统的设计与实现,对招聘系统管理员、个人用户、企业用户三个模块功能的完善…

kubernetes学习之路--污点容忍度横向主节点

参考:K8s污点容忍度横向主节点-安全客 - 安全资讯平台 一.kube-scheduler调度 kube-scheduler是Kubernetes 集群的默认调度器,并且是集群控制面(master)的一部分。对每一个新创建的Pod或者是未被调度的Pod,kube-scheduler会选择一个最优的N…

[附源码]Nodejs计算机毕业设计基于图书管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

43_SDIO基础知识

目录 SDIO协议简介 SDIO设备分类 SD卡物理结构 SD卡寄存器列表 SDIO总线拓扑 SDIO总线 SDIO总线协议 SDIO命令 命令格式 命令类型 响应 SD卡的操作模式 卡识别模式 数据传输模式 STM32 SDIO功能框图 命令通道 命令状态机 数据通道 数据状态机 数据FIFO SDI…

自定义java注解案例

今天与大家分享java注解的基本使用,如有哪里有问题,望大家指教。 目录 1. 什么是java注解 2. java注解的分类 2.1 JDK基本注解 2.2 JDK元注解 3. 自定义注解 3.1 自定义注解语法 4. 注解示例 4.1 定义注解 4.2 拦截器 4.3 使用注解 4.4 测试 …

Kali Linux渗透测试演示——DNS欺骗

目录 一、DNS欺骗 1.介绍 2.原理 二、环境和工具 1.kali Linux和靶机(这里选择windows 7) 2.ettercap 三、攻击过程 1.首先确认一下Kali和靶机的IP地址以及网关 2.进入ettercap的配置文件 3.打开ettercap,进行主机发现 总结 一、DNS…

MR案例:计算学生成绩

计算学生成绩一、提出任务二、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录(二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启动成绩驱动…

adb常用命令(二)

adb:Android下面一个通用的调试工具管理设备或者手机模拟器的状态,进行手机操作:安装软件、卸载软件、系统升级、运行shell命令等adb命令:一、环境配置1,Java--JDK java -version2,SDK adb versionsdk版本管理(SDK与…

Spark-RDD(转换算子、行动算子、序列化、依赖关系、持久化、分区器、文件读取和保存、累加器、广播变量)

文章目录RDDRDD特点核心属性执行原理RDD创建RDD并行度与分区内存数据的分区文件数据的并行度和分区RDD转换算子Value类型mapmapPartitionsmapPartitionsWithIndexflatMapglom(获取分区数组)groupByfilterdistinctcoalesce(缩小/扩大分区)repartition(扩大分区)sortBysample双 V…

人工智能 之 机器学习(Machine Learning)

目录 一:机器学习概述 二:机器学习算法 三:机器学习模型 四:机器学习过程 五:机器学习模型验证 六:sklearn模块 一:机器学习概述 程序化处理和机器学习处理; 主观思维和客观思…

python利用read()、readline()、readlines()读取文件

目录 1.语法和用法 2.实例 1.语法和用法 with open(file,moder,encodingNone) as f:#①读取所有文本data1 f.read()#②读取第一行数据data2 f.readline() #③读取所有文本数据 data3 f.readlines() 说明: with …… as ……:用于命名&#xff0c…

2022年总结:打开新世界,踏上新征程

一、前言 于我而言,2022年是我的幸运年,人生发生转折的关键点。同时,也可能是互联网行业、社会经济状况开始扭转的一年。因此,打算在CSDN开始记录下我的第一篇年总结。当然除了是意义特殊外,也还有现实实在的意义&…

【ROS服务通信】服务端和客户端

本文记录下ROS服务通信的实现,首先明确,ROS中的服务通信主要适用于偶然的,有实时要求的场景。服务通信基于客户-服务的架构,在主节点下,由服务端和客户端组成,服务端负责对请求做出响应,客户端发…

SQL Server2019详细安装教程(含JDBC连接)

文章目录一、安装SQL Server引擎1.1、安装SQL Server1.2、SQL Server选项配置二、SQL Server Management Studio(SSMS,客户端)2.1、安装连接工具2.2、连接SQL Server三、JDBC连接SQLServer提前配置查看SQLSever的启动端口Java代码参考文章一、…