Open baixiaoji opened 5 years ago
我们都知道浏览器的功能,就是向服务器发送请求,然后在浏览器窗口中展示对应请求回来的网络资源。
那一个经典的前端面试题来说:「在浏览器地址栏中输入 url 到页面展现的短短几秒内浏览器究竟做了什么?」
我的记忆点中,更多的是如何查询对应的 IP,然后发送请求到服务器,然后在渲染就结束了,不知你是不是这样?
可往往我们好像忽视了,当代浏览器那些细微的交互点,如 tab 上的 spinner 的展现。为了能慢慢的理解上述的问题,我们首先一起理一下浏览器这款软件中到底有有什么吧。
当代现有的浏览器主要由用户界面(The user interface)、浏览器引擎(The browser engine)、呈现引擎(The rendering engine)、网络(Networking)、JavasScript 解释器(JavaScript interpreter)、用户界面后端(UI backend)、数据存储组成(Data storage)。
而这些组件的功能如下:
根据前置知识可知:软件是由其中进程可以运行的。那么如果想写一款浏览器的话,我们有两种实现思路,要么实现为单进程多线程模式,要么实现为多进程模式。
那我们常用的浏览器是属于哪种模式呢?
1-浏览器架构-原理篇
我们都知道浏览器的功能,就是向服务器发送请求,然后在浏览器窗口中展示对应请求回来的网络资源。
那一个经典的前端面试题来说:「在浏览器地址栏中输入 url 到页面展现的短短几秒内浏览器究竟做了什么?」
我的记忆点中,更多的是如何查询对应的 IP,然后发送请求到服务器,然后在渲染就结束了,不知你是不是这样?
可往往我们好像忽视了,当代浏览器那些细微的交互点,如 tab 上的 spinner 的展现。为了能慢慢的理解上述的问题,我们首先一起理一下浏览器这款软件中到底有有什么吧。
当代现有的浏览器主要由用户界面(The user interface)、浏览器引擎(The browser engine)、呈现引擎(The rendering engine)、网络(Networking)、JavasScript 解释器(JavaScript interpreter)、用户界面后端(UI backend)、数据存储组成(Data storage)。
而这些组件的功能如下:
根据前置知识可知:软件是由其中进程可以运行的。那么如果想写一款浏览器的话,我们有两种实现思路,要么实现为单进程多线程模式,要么实现为多进程模式。
那我们常用的浏览器是属于哪种模式呢?