购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 浏览器

浏览器作为HTML、CSS和JavaScript运行的宿主环境之一,运行在浏览器中的代码都是由浏览器负责解析,并最终渲染成我们所看到的页面。浏览器相关的内容也比较多和复杂,本节主要对浏览器工作基础和浏览器代码调试两方面进行讲解。

1.4.1 浏览器的工作基础

下面讲解在网络环境正常的情况下访问一个互联网系统,从在地址栏中输入网址并按Enter键,到最终页面显示,浏览器都做了哪些工作。

1.浏览器的渲染流程

浏览器进程会通过进程间通信把URL传给网络进程,网络进程接收到URL后,会执行浏览器导航、服务器响应,以及浏览器解析和渲染几个过程。

1)浏览器导航

Web页面导航的第一步是寻找页面资源的位置。以输入访问地址http://xxx.com为例,如果没有访问过这个网站,浏览器会先向域名服务器发起DNS查询,最终得到一个IP地址。在第一次请求后,这个IP地址可能会被缓存一段时间,这样在下次访问时就可以从缓存里检索IP地址而不是通过域名服务器进行查询,以提高访问速度。另外,如果Web页面的所有资源都存放在一个位置,通常仅需要一次DNS查询。而如果页面的字体、图像、脚本等分别存放在不同的主机,则在解析时就需要对每一个主机都进行DNS解析。

一旦获取到服务器的IP地址,浏览器就会尝试与该服务器建立连接,并从服务器上获取资源。对于Web网站来说,这通常是一个HTML文件。

2)服务器响应

服务器收到来自客户端的请求,它会将响应头和HTML内容返回,由客户端负责对响应的内容进行解析和渲染。

3)浏览器解析和渲染

解析是浏览器将接收到的内容转换为DOM和CSSOM的过程,渲染则是通过渲染器把DOM和CSSOM绘制成网页,包括样式、布局和绘制。图1-5所示为浏览器进行页面渲染的过程,浏览器接收到的响应文件在HTML解析器、JavaScript引擎等的共同作用下生成一个用于表示网页的内部树结构,浏览器使用该结构树进行布局和绘图,生成最终呈现给用户的页面效果。

浏览器从发出请求到页面渲染完成总共经过了两个过程:一是从服务器上获取资源,二是文件解析和页面渲染。从服务器上获取资源经过的是一系列的网络过程,文件解析和页面渲染则全部由浏览器完成。

图1-5 浏览器渲染流程

2.浏览器渲染

浏览器进行页面渲染的第一步,是将从服务器上获取到的文件进行解析,这些文件通常包括JavaScript、HTML、CSS和一些图片等静态文件。从文件解析到页面渲染,需要经过以下几个过程。

(1)构建DOM树。渲染进程中,由HTML解析器处理HTML标记并生成DOM树。需要注意的是,HTML解析器可以处理HTML标签、图片和CSS,但如果遇到<script>标签,则需要引入JavaScript引擎执行解析。

(2)构建CSSOM树。DOM树是表示网页的文档结构树,CSSOM树则是一种浏览器将节点样式转换为自身可以理解和使用的样式映射,是用来描述DOM节点样式的树状结构。浏览器遍历CSS中的每个规则集,根据CSS选择器创建具有父、子和兄弟关系的节点树,递归地优化计算的样式,形成与DOM树相关联的树状样式结构。

(3)Render Tree和页面渲染。浏览器从DOM树的根节点开始,遍历每个可见节点,给每个可见节点都应用其CSSOM规则,形成一个新的渲染树(Render Tree)。渲染树完成将所有相关样式匹配到DOM树中的每个可见节点,然后在渲染树上计算每个节点的几何体进行布局。布局完成后,通过浏览器的绘图功能,将各节点绘制到屏幕上,完成页面的渲染。

3.浏览器引擎

上述浏览器渲染的过程中,HTML和CSS解析、布局、绘制、合成都是由浏览器渲染引擎完成的。浏览器在解析HTML、CSS并创建CSSOM时,其他资源,包括JavaScript文件也在下载。在这个过程中,由于JavaScript解释、编译、解析和执行等的加入,可能会使得某些过程存在一些阻塞的情况。浏览器各解析器间的工作过程复杂,各种情况的解析顺序和可能导致阻塞的情况更是不同,要掌握更加详细的浏览器渲染引擎的工作原理,可以查看各环节具体的官方文档以进一步了解。

JavaScript脚本在浏览器中最终被解析为抽象语法树(Abstract Syntax Tree,AST)。大部分情况下,浏览器是单线程执行的,所以一些浏览器引擎使用抽象语法树将其传递到解析器中,输出到主线程上执行字节码,这个过程就是所谓的JavaScript编译,由JavaScript引擎完成。其中,JavaScript编译过程如下。

(1)词法分析:将JavaScript代码分解为单词(Token)序列。

(2)语法分析:将单词序列转换为抽象语法树。

(3)代码优化:对AST进行优化,减少代码执行时间和资源消耗。

(4)代码生成:将AST转化为可执行的机器码。

编译过程会对代码进行解析和优化,优化好的JavaScript代码可以提高网页性能和用户体验,使网页更加流畅,响应更加快速。

浏览器引擎作为浏览器的核心组成部分之一,负责将网页资源转换为可视化的网页,执行JavaScript代码,实现网页动态效果。但是,由于浏览器厂家不同,各浏览器的渲染引擎也不相同。目前主流的渲染引擎有Trident(IE浏览器)、Gecko(Firefox浏览器)、WebKit(Safari浏览器)、Chromium/Blink(Chrome浏览器)等。

浏览器渲染引擎所依赖的每一个模块都基于复杂的原理,需要大量实践才可以精通。Web开发一定要掌握浏览器的渲染原理,掌握浏览器各模块之间的相互关系,这样才有助于我们更好地完成工作。

1.4.2 浏览器调试

浏览器调试是开发过程中一个非常重要的环节,它可以帮助开发者定位和修复代码中的问题。在前端开发中,浏览器调试工具是一个非常有用的工具,它通过对网页解析、数据收集、网络监控等技术,以及与浏览器的交互,帮助开发人员调试和优化网页代码。浏览器调试工具如下。

(1)元素查看器。可以查看网页中的元素,修改元素属性,包括HTML属性、CSS属性等。在Chrome浏览器中,可以右击,并在弹出的快捷菜单中选择“检查”选项打开元素查看器。

(2)控制台。可以输出调试信息,查看JavaScript的错误和告警,执行JavaScript代码。在Chrome的调试器中,可以选择Console选项打开控制台。

(3)网络监控。可以监控网页中的网络请求,查看请求和响应的详细信息。在Chrome的调试器中,可以选择“网络”选项打开网络监控。

(4)JavaScript调试器。可以帮助开发人员调试JavaScript代码,包括设置断点、单步执行、查看变量值等。在Chrome浏览器中,可以选择浏览器调试工具中的Sources选项打开JavaScript调试器。

(5)移动设备模拟器。可以模拟不同的设备和网络环境,以便在不同环境下测试网页的兼容性。在Chrome浏览器中,可以通过在浏览器调试工具中选择“移动设备模式”选项打开移动设备模拟器。

不同的浏览器调试工具可能会存在一些差别,我们以Chrome浏览器为例,按F12键或使用Ctrl+Shift+I组合键,或者在浏览器页面上右击,在弹出的快捷菜单中选择调试工具(或称为开发者工具),如图1-6所示。可以看到,我们所使用的版本共包括10个常用的工具,分别为Elements(元素)、Console(控制台)、Sources(源代码/来源)、Network(网络)、Performance(性能)、Memory(内存)、Application(应用)、Security(安全)、Lighthouse、Layers(图层)。表格1-1对这几个主要工具的功能进行了说明。

图1-6 浏览器调试工具

说明: 使用时需要注意,不同浏览器或同一浏览器的不同版本中,调试工具的界面会有所不同。甚至同一版本的不同语言环境下,界面也会存在差异。

表1-1 浏览器调试工具介绍

另外,需要说明的是,浏览器调试工具的作用并非只体现在样式控制、代码调试,它还可以进行网页性能检测、浏览器存储等。随着浏览器版本的升级,浏览器插件也不断产生。如DevTools工具就是一款专为支持Vue组件调试而打造的插件,具有很好的UI交互界面,非常适合使用Vue框架时的开发调试。有了这些调试工具,会让我们的开发效率大大提高,代码调试的成本极大减少。 V3Pb/A1rEeaG1Xeb9L4mtPDlfJJmj0AHAYhpt+RB8/+vZGD+++DEsugY542OSoDQ

点击中间区域
呼出菜单
上一章
目录
下一章
×