首先,我们浏览的网页文件存放在服务器端(也就是Web服务器)中
在我们对网站进行访问的时候,先是进行Request请求阶段,在这个阶段里会进行一系列的协议以及解析:DNS解析、TCP的三次握手与四次挥手、HTTPS和HTTP协议
之后是Response响应阶段:HTTP状态码、304缓存、HTTP报文
而在客户端也就是浏览器中,我们先是从服务器拿到文件代码,在拿到代码后于内存中开辟出一块栈内存用来给代码的执行提供环境;同时分配一个主线程去一行行的解析和执行代码;
每一行代码都是经过进栈执行、执行完出栈的顺序来的,而需要注意的就是,当浏览器遇到 link、script、img等请求时,都会开辟出全新的线程去加载资源文件(浏览器是多线程,但js只是单线程
在代码进栈出栈执行过程中,是由一个顺序的,叫做任务队列(Task queue),在任务队列中(单线程),所有任务都是顺序完成的,而完成之后则会加载到页面当中,这就叫事件循环Event Loop,
事件循环实际上就是——代码在进栈出栈的执行过程中,会先自上而下走一遍,只生成DOM树,之后是css处理完成后生成CSSDOM,这两个构成Render Tree,而任务队列的每一个任务完成后都会插入到DOM树中.