前端开发前端工程师需要了解的浏览器知识

前端工程师需要了解的浏览器原理

2021-03-09  本文已影响0人  sylvia_yue

1 进程和线程

1.1 进程和线程:

  • 进程是资源分配的最小单位,线程是操作系统可识别的最小执行和调度单位
  • 一个进程可以有多个线程,线程运行在进程中,一个线程只能属于一个进程,

1.1.1 本质

  • 一个进程就是一个程序的运行实例,启动一个程序时,操作系统会为该程序创建一块内存,用来存放代码、运行中的数据和一个执行任务的主线程,这样的一个运行环境就是进程,进程拥有独立的堆栈空间和数据段,开销大,但进程间相互独立,安全性高,且一个崩溃不影响其他。
  • 线程拥有独立的堆栈空间,但共享数据段,开销小,切换速度快,效率高,线程是不能单独存在的,它由进程来启动和管理,因为线程是在进程间行进,一个线程崩溃则整个进程崩溃。

1.1.2 通信

  • 因为进程间相互独立,所以通信机制也相对复杂;
  • 多个线程运行在同一个进程中,通信更便利;

1.3.1 适用

  • 频繁创建销毁、频繁切换的使用线程;
  • 多机分布用进程,多核分布用线程;

2 浏览器历史

2.1 单进程浏览器

缺点:

2.2 早期多进程浏览器

有主进程、插件进程、渲染进程

2.3 目前多进程浏览器架构:

浏览器多进程避免了一个页面或一个插件崩溃导致整个浏览器崩溃,提升了用户体验,但也加大了系统资源消耗,缺点是资源占用高

浏览器的主要进程如下:(浏览器主进程、第三方插件进程、渲染进程、网络进程、GPU进程)

浏览器有多个进程,其中前端的主要操作是在渲染进程中进行的,而渲染进程是多线程的

2.3.1 渲染进程是多线程的

以下列举些渲染进程中的常驻线程:

  • GUI 渲染线程:解析html、css文件,渲染页面,处理重绘、重排;
  • JS 引擎线程:处理 javascript 脚本(注: GUI 渲染线程和 JS 引擎线程是互斥的,JS 引擎线程执行时 GUI 线程会被挂起,因此 JS 执行时间过长可能会造成页面渲染阻塞);
  • 事件触发线程:维护一个事件队列,当一个事件被触发时,将其添加到事件队列尾部,等到 JS 引擎空闲时才会来进行处理;
  • 定时器线程:setInterval、setTimeout 所在线程,因为 JS 引擎可能会存在阻塞影响计时准确性,所以计时由单独线程控制,计时完毕后添加到事件队列尾,等待 JS 引擎来处理;
  • 异步请求线程:建立一个异步请求会新开一个线程,检测到状态变更且设置有回调函数时,会把这个回调添加到事件队列尾,等待 JS 引擎来处理。

3 浏览器数据传输

互联网中的数据是通过数据包来传输的。如果发送的数据很大,那么该数据就会被拆分为很多小数据包来传输。

3.1 TCP/IP

3.1.1 IP:把数据包送达目的主机

计算机的地址就成为IP地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息。

3.1.2 UDP:把数据包送达应用程序

UDP 中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号,通过端口号 UDP 就能把指定的数据包发送给指定的程序了。

但 UDP 的传输有两个问题:

IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。

3.1.3 TCP:面向连接、可靠、基于字节流的传输层通信协议

TCP 头除了包含目标端口和本机端口号外,还提供了用于排序的序列号,据此来重排数据包。

特点:

TCP 连接的完整生命周期

TCP 牺牲了数据包的传输速度来保证数据传输的可靠性。

3.2 HTTP

HTTP 协议建立在 TCP 连接基础上,允许浏览器向服务器获取资源,是 Web 的基础,也是浏览器使用最广的协议。

3.2.1 浏览器端发起 HTTP 请求流程

响应体: 信息数据

4 浏览器渲染

在浏览器里,从输入 URL 到页面展示,发生了什么?

image

参考:

https://time.geekbang.org/column/article/113513
http://www.dailichun.com/2018/01/21/js_singlethread_eventloop.html
https://www.cnblogs.com/quanshubli/p/8552626.html
https://blog.csdn.net/didudidudu/article/details/80181505

上一篇 下一篇

猜你喜欢

热点阅读