浏览器相关知识
一、浏览器的诞生1990年底,蒂姆·伯纳斯-李(Tim Berners-Lee)发明了世界上第一个网页浏览器,起初就叫“WorldWideWeb”(后改名Nexus),运行在NeXT电脑系统上。1991年:他同时创建了 HTML(超文本标记语言),最初约含18个元素,并写出了第一个网页。1994年,哈肯·维姆·莱(Håkon Wium Lie)首次提出CSS构想,后与正在开发“Argo”浏览器的伯特·波斯(Bert Bos)联手。1996年12月:CSS Level 1 正式成为W3C推荐标准1995年,网景(Netscape)公司工程师布兰登·艾奇(Brendan Eich) 用约10天设计了JavaScript(最初代号Mocha/LiveScript),同年12月,正式定名为JavaScript(为营销借Java热度),并部署在Netscape Navigator 2.0浏览器中。二、浏览器有什么用?浏览器对于网页来说,本质上是一个极其复杂的容器或虚拟机。它向下屏蔽了底层操作系统的差异(Windows、Mac、Linux),向上为前端代码提供了一套标准化的 API。具体来说,它承担了网络加载(获取资源)、代码编译执行(HTML/CSS/JS解析与渲染)、异步调度(Event Loop 多线程管理)以及交互存储(事件响应与数据持久化)四大核心功能。具体职能如下:2.1 职能一 资源加载器1)**发起网络请求:**输入网址后,浏览器通过网络进程发起HTTP/HTTPS请求,把index.html、app.js、style.css、图片等资源从服务器拖回来。2)DNS解析:把域名(如www.baidu.com)翻译成IP地址,方便找到服务器。浏览器会先查自己的DNS缓存,如果没命中,就调用操作系统的解析器去查系统缓存和hosts文件;如果还没找到,操作系统会向本地DNS服务器(通常是ISP提供的)发起递归查询,最终从根DNS、顶级域名服务器、权威DNS服务器一路查下来拿到IP3)HTTP缓存管理:自动管理强缓存(Cache-Control)和协商缓存(ETag),让你第二次打开网页时快如闪电。2.2 职能二 代码解析器与执行器这是浏览器最核心的“加工”功能,把拿回来的文本变成可见的页面。1)HTML解析器(构造DOM树):把纯文本的html标签,解析成浏览器能理解的内存树状结构(DOM树)。2)CSS解析器(构造CSSOM树):解析css代码,形成样式规则树。3)JS引擎(执行JS):执行script标签里的代码4)渲染引擎(合成与绘制):把DOM树和CSSOM树结合成渲染树,计算每个盒子的位置(Layout/Reflow),最后绘制成像素(Paint)并合成图层(Composite)显示在屏幕上2.3 职能三多线程与异步任务管理器JS本身是单线程的,但浏览器提供了强大的宿主环境API,处理耗时的任务,这就是Event Loop的来源。1)定时器线程:管理setTimeout、setInterval,时间到了把回调扔进宏任务队列。2)**事件监听线程:**管理addEventListener绑定的鼠标点击、键盘输入等事件。3)**HTTP请求线程:**XMLHttpRequest或fetch发起的网络请求,由浏览器底层C++线程池去下载,下载完了把then回调扔进微任务队列。4)**Web Workers:**允许开“子线程”去做复杂的计算,不阻塞主页面。2.4 职能四:用户交互与存储系统1)**事件分发机制:**当用户点击鼠标,浏览器会计算这个点击落在哪个DOM元素上,然后触发该元素绑定的点击事件监听器。2)**本地存储:**提供localStorage(永久存)、se