1.单进程架构:扩展性低、安全性低、稳定性低、流畅度卡顿。(单进程虽然各种不好,早期的硬件内存限制,有些基础框架会占用资源,单进程可以省资源)
多进程架构:扩展性中等,安全性高、稳定性高、流畅度好。
面向服务架构:各个方面都很好
浏览器:主进程,主要是页面展示
渲染进程
1.常见浏览器内核:Chrome(早期是webkit后来使用了Blink),国产的浏览器都是双核的,Trident+webkit(Blink)。
2.渲染进程的多线程架构:JS引擎:解析脚本。GUI线程:渲染界面,解析HTML,CSS等。JS引擎和GUI线程互斥,如果JS执行任务过长,会导致页面卡顿。定时触发器:定时器所在的线程,将回调添加到事件队列中,等待JS引擎执行。网络线程:在XHR以及Fetch等发起请求后断开一个网络线程请求。事件触发:不断的从事件队列里面取出任务执行。
3.JS引擎和渲染引擎是相互独立的,中间通过通信延迟。
浏览器地址输入URL之后发生了什么:
-
URL 解析:首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作。
-
DNS 查询:1. 浏览器缓存:浏览器会先检查是否在缓存中,没有则调用系统库函数进行查询。2. 操作系统缓存操作系统也有自己的 DNS缓存,但在这之前,会先检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。3. 路由器缓存:路由器也有自己的缓存。4. ISP DNS 缓存 ISP DNS 就是在客户端电脑上设置的首选 DNS 服务器,它们在大多数情况下都会有缓存。
根域名服务器查询**
在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域
-
TCP 连接:TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装
-
处理请求:最常见的 HTTPD 有 Linux 上常用的 Apache 和 Nginx,以及 Windows 上的 IIS。 它会监听得到的请求,然后开启一个子进程去处理这个请求。假如服务器配置了 HTTP 重定向,就会返回一个
301永久重定向响应,浏览器就会根据响应,重新发送 HTTP 请求(重新执行上面的过程 -
接受响应:浏览器接收到来自服务器的响应资源后,会对资源进行分析。首先查看 Response header,根据不同状态码做不同的事(比如上面提到的重定向)。如果相应资源进行了压缩(比如 gzip),还需要进行解压。然后,对相应资源做缓存。
-
渲染页面:不同的浏览器内核,渲染过程也不完全相同,但大致流程都差不多。