网站架构的优化,wordpress企业主题免费下载,沈阳营销型网站制作,一级的vi设计公司面试经典题——URL加载
一、涉及基本知识点#xff1a;
1. 计算机网络 五层因特尔协议栈#xff1a; 应用层#xff08;dns、http#xff09;#xff1a;DNS解析成IP并完成http请求发送#xff1b;传输层#xff08;tcp、udp#xff09;#xff1a;三次握手四次挥手…面试经典题——URL加载
一、涉及基本知识点
1. 计算机网络 五层因特尔协议栈 应用层dns、httpDNS解析成IP并完成http请求发送传输层tcp、udp三次握手四次挥手模式建立tcp连接网络层IP、ARPIP寻址数据链路层PPP将请求数据封装成帧物理层利用物理介质传输比特流传输的时候通过双绞线、电磁波等 OIS七层框架:多了两层即会话层处理两个通信系统中交换信息的表示方式和表示层管理不同用户和进程之间的对话。 get和post的区别 get产生一个tcp数据包post产生两个get请求时会把headers和data数据一起发送出去post请求时浏览器先发送headers服务器100继续浏览器再发送data。 DNS查询得到IP 请求信息首先查看域名的本地DNS缓存该缓存存储计算机最近检索到的信息如果计算机不知道答案那么就需要执行一个DNS查询来查找答案 询问递归式DNS服务器 如果信息不存储在本地计算机会联系您的ISP网络提供商的递归DNS服务器这些专用计算机会为你执行一个DNS查询工作递归服务器有自己的缓存所以这个查询过程通常在这里完成并将信息还回给用户 询问根域名服务器 如果递归服务器没有答案他们会查询根域名服务器根域名服务器是一种计算机它扮演着一种DNS的电话接线员的角色他们不知道答案但可以将我们的疑问指向知道在哪里可以找到答案的人。 询问TLD域名服务器 根域名服务器将查看请求的第一部分按从右到左的顺序从www.dyn.com中找到.com并将请求指向.com对应的顶级域名服务器TLD.com;每个TLD如.com,.org,.us都有自己的顶级域名服务器这些服务器没有我们需要的信息但他们可以直接将我们引导到有信息的服务器。 询问权威的DNS服务器 TLD域名服务器会继续检查请求的下一部分dynwww.dyn.com并将查询指向负责此特定域名的服务器这些权威的服务器将负责了解关于特定域的所有信息并将信息存储在DNS记录。 找回记录 -递归服务器从权威服务器中检索dyn.com的记录并将记录存储在本地缓存 如果其他任何人请求dyn.com的主机记录递归服务器已经有答案了并不需要再次进行查找所有记录都有一个期限一段时间后递归服务器将需要要求一个新的记录副本以确保信息不回过时。 接收答案 有了答案递归服务器将记录返回到计算机您的计算机将记录存储在缓存中从记录中读取IP地址然后将这些信息传递给浏览器然后浏览器就可以根据IP地址和服务器进行连接建立。 TCPIP请求 http的本质就是TCPIP请求需要经历3次握手建立连接4次挥手断开连接TCP将http长报文划分为短报文通过三次握手与服务器端建立连接进行可靠传输。 三次握手 客户端你是XXX服务端吗服务端 我是XXX服务端你是客户端吗客服端 是的我是客户端建立连接成功后接下来就可以进行正式的传输数据。 四次挥手断开连接 主动方我已经关闭了向你那边的信息发送通道只能被动接受信息了被动方 收到通道关闭的信息被动方 我现在也关闭了向你那边发送信息的通道主动方 左后收到信息连接断开之后双方无法通信 TCP/IP的并发限制 浏览器对同一个域名下并发的TCP连接是有限制的2-10个不等而且在http1.0中往往一个资源的下载就需要一个tcp/ip请求 2. 浏览器机制
1进程和线程的概念
进程是CPU资源分配的最小单位是能拥有资源和独立运行的最小单位线程是CPU调度的最小单位线程是建立在进程的基础上的一次程序运行单位一个进程可以拥有多个线程通俗的讲进程是一个工厂工厂有它独立的资源工厂之间相互独立-进程之间相互独立线程是工厂中的工人多个工人之间可以协作完成任务工厂内有一个或多个工人工人之间共享空间。
2多进程的浏览器
浏览器是多进程的有一个主控进程以及每一个tab页面都会开一个进程某些情况下多个tab由于优化策略会合并浏览器主要进程 Browser进程浏览器的主进程负责协调、主控只有一个作用 负责浏览器界面的显示、与用户交互如前进、后退等负责各个页面的管理创建和销毁其他进程将Renderer进程得到的内存中的Bitmap绘制到用户界面上网络资源的管理和下载等 第三方插件进程 每种类型的插件对应一个进程仅当该插件使用时才创建 GPU进程 最多一个用于3D绘制等 浏览器渲染进程Renderer进程、浏览器内核、内部是多线程 默认没打开一个tab页面就会启动一个Renderer进程负责页面的渲染脚本的执行事件的处理。 浏览器多进程的优势 避免单个page crash影响整个浏览器避免第三方插件crash影响整个浏览器多进程充分利用多核优势方便使用沙盒模型隔离插件等进程提高浏览器稳定性
简单点理解如果浏览器是单进程那么某个tab页或第三方插件崩溃了就会导致整个浏览器崩溃体验度极差不过多进程内存消耗会更大有点用空间换时间。浏览器内核渲染进程
浏览器渲染进程内部是多线程包含主要线程有
1.GUI渲染线程
1负责浏览器界面的渲染解析HTML、CSS构建DOM树和RenderObject树布局和绘制等2 当界面需要重绘Repaint或由于某种操作引发回流reflow时该线程会执行 注意GUI渲染线程和JS引擎线程是互斥的当JS引擎执行时GUI线程会被挂起GUI更新会保存在一个队列中等JS引擎空闲时立即执行。
2.JS引擎线程
JS内核负责处理JavaScript脚本程序V8引擎负责解析JavaScript脚本运行代码JS引擎一直等待着任务队列中的任务到来然后加以处理一个tab页面renderer进程中无论什么时候都只有一个JS线程在运行JS程序 注意由于GUI渲染线程和JS引擎线程是互斥的所以如果JS程序运行时间过长这样会导致页面渲染不连贯导致页面渲染加载阻塞
3.事件触发线程
归属于浏览器而不是JS引擎用来控制事件循环当JS引擎执行代码块如setTimeOut时也可以来自浏览器内核的其他线程如鼠标单击事件、AJAX异步请求等会将对应的任务添加到事件线程中当对应的事件符合触发条件被触发时该线程就会把事件添加到JS的待处理队列的队尾等待JS引擎的处理 注意由于JS的单线程的关系所以这些待处理队列中的事件都得排队等待JS引擎处理当JS引擎空闲时才会去执行。
4.定时触发器线程
setTimeOut与setInterval所在的线程浏览器的定时计数器并不是由JavaScript引擎计数的因为JavaScript是单线程如果处于阻塞状态就会影响计时的准确因此通过单独的线程来计时并触发定时计时完毕后添加到事件队列等待JS引擎空闲时执行
5.异步http请求线程
在XMLHttpRequest在连接后是通过浏览器新开一个线程请求的将检测到状态变更时如果设置有回调函数异步线程就将产生状态变更事件将这个回调在放到事件队列中再由JavaScript引擎执行。
一、 一个页面从输入URL到加载显示完成这个过程发生了什么 简洁版 浏览器根据请求的URL交给DNS域名解析找到真实的IP向服务器发起请求服务器交给后台处理完成后返回数据浏览器接收文件HTML、CSS、JavaScript等浏览器对加载到的资源HTML、CSS、JavaScript等进行语法解析构建相应的内部数据结构DOM树、CSS树、render树等载入解析到的资源文件、渲染页面、完成。 详细版 首先浏览器开启一个线程来处理这个请求对URL分析判断如果是http协议就按照Web方式来处理其次浏览器会对URL进行解析一般包括协议头、主机域名或IP地址、端口号、请求路径、查询参数、hash等然后开启网络线程发出一个完整到http请求当然一般我们输入的URL是服务器域名这时就需要DNS通过域名查询得到对应的IPDNS首先会查看浏览器DNS缓存没有就查询计算机本地DNS缓存还没有就询问递归式DNS服务器即网络提供商一般这个服务器都会有自己的缓存所以IP查询一般在这里完成如果没有缓存那就需要通过根域名和TLD域名服务器指到对应的权威DNS服务器找回记录并缓存到递归式服务器然后递归服务器在将记录返回给本地。有了IP地址此时网络层便会通过IP地址寻的对应服务器的物理地址寻得服务器地址客户端在网络传输层便可以和服务器通过三次握手建立tcpip连接连接建立后网络数据链路层将数据包装成帧最后物理层利用物理介质进行传输到了服务器就会通过相反的方式将数据一层一层的还原回去请求到了后台服务器一般会有统一的验证如安全验证、跨域验证等验证未通过就直接返回相应的http报文验证通过后就会进入后台代码此时程序收到请求然后执行对应的操作如查询数据库等如果浏览器访问过且缓存上有对应的资源便会与服务器最后修改时间对比一致便返回304告诉浏览器可使用本地缓存前端浏览器接收到响应成功的报文后便开始下载网页 下载完的网页将被交给浏览器内核渲染进程进行处理 根据顶部定义的DTD类型进行对应的解析方式渲染进程内部是多线程的网页的解析将会被交给内部的GUI渲染线程处理首先渲染线程中的HTML解释器将HTML网页和资源从字节流解释转换成字符流再通过词法分析器将字符流解释成词语之后经过语法分析器根据词语构建成节点最后通过这些节点组建一个DOM树这个过程中如果遇到的DOM节点是JavaScript代码就会调用JavaScript引擎对JavaScript代码进行解释执行此时由JavaScript引擎和GUI渲染线程的互斥GUI渲染线程就会被挂起渲染过程停止如果JavaScript代码的运行中对DOM树进行了修改那么DOM的构建需要从新开始如果节点需要依赖其他资源如图片CSS等便会调用网络模块的资源加载器来加载它们但它们是异步的不会阻塞当前DOM树的构建如果遇到的是JavaScript资源URL没有标记异步则需要停止当前DOM的构建直到JavaScript的资源加载并被JavaScript引擎执行后才继续构建DOM对于CSSCSS解释器会将CSS文件解释成内部表示结构生成CSS规则树然后合并CSS规则树和DOM树生成render渲染树最后对render树进行布局和绘制并将结果通过IO线程传递给Browser控制进程进行显示。
原文地址https://segmentfault.com/a/1190000014872028
更多专业前端知识请上
【猿2048】www.mk2048.com