《WebKit 技术内幕》学习之十四(2):调式机制

2 实践——基础和性能调试

        Chromium开发者工具基本上沿用了Web Inspector的功能,所以这一节主要以该开发者工具作为介绍的对象,一起了解开发者工具提供的功能和一些基本的用法,有些用法其实在之前已经介绍过,这里可能为了系统性考虑会再次提及一下,但是不做太多的重复性介绍。主要包括两个部分,基础功能部分的调试和性能部分的调试。

2.1 基础调试

        基础部分的调试大致可以分成DOM元素的修改等访问、CSS样式值修改、日志和控制台信息,以及JavaScript代码单步调试、断点设置等部分功能。

        开启或者关闭开发者工具的功能快捷键是F12或者在浏览器地址最右侧的按钮中调用开发者工具即可。还有一个直接的方法就是右键单击一个HTML元素,然后在右键菜单中能够找到“Inspect Element”选项,那就是审查该元素,这种方式也可以打开开发者工具,如图14-9是使用该选项打开开发者工具并显示“Inspect Element”选项所做的Chrome浏览器截图。

图14-9 “Inspect Element”选项和开发者工具

        当开发者工具被打开后,开发者就会发现在“Elements”标签之下显示的其实是被调试页面的源代码,同时,Chromium浏览器会高亮被审查元素的源代码,这一做法可以帮助开发者获悉当前的元素的源代码。右侧下方是当前元素的CSS属性值,包括经过WebKit计算之后应用在该元素上的属性值和支持获得这些属性值的规则等信息,这对开发者而言非常方便。如果读者认为只是显示源代码(DOM结构)和CSS属性值的话,那就大错特错了。开发者工具的方便之处就在于开发者可以任意修改源代码或者CSS属性值,而且这些修改都是即时显示在网页的渲染结果中的。如前面的一个例子就是取消一个CSS属性值,图14-3就是该例子背后发送的消息,前端的修改很快就会在后端显示的网页结果中起作用,例如,将字体颜色的红色值取消掉,那么它可能就会变成默认的颜色。

        另外一个例子就是在图14-9左边的源代码中(实际是DOM树的一种显示方式),开发者可以随时修改任何元素,包括它们的属性,这些修改立刻由后端处理触发重新绘制的操作。这一切对网页开发者来说是透明的。当然这些改动只是针对本地浏览器下载后的网页,并不会对服务器端的网页做任何修改,因为其本来目的也是帮助调试之用。

        当然,为了查看网页的DOM结构和网页中的各种对象,开发者工具提供了命令行式的控制台,开发者可以以此查看任何DOM中的节点(这个在第5章中也使用过控制台来理解DOM树结构)和各种对象(包括对象值和它包括的函数,笔者经常使用它来查看Chromium支持的一些JavaScript接口是什么样的,因为不同浏览器对于接口的支持也是不一样的),甚至可以执行JavaScript语句。图14-10是开发者工具控制台中的两个示例,第一个是查看“geolocation”对象相关的接口,可以看到这个对象包括三个接口。第二个是查看“window”对象下所有的其他对象,这对查看编程接口也有一定的帮助。

图14-10 开发者工具的控制台

        控制台的另外一个功能就是能够显示所有的JavaScript代码执行的日志信息和错误信息。调试JavaScript代码的一种方式是使用日志打印出一些值来帮助确定代码的正确性,常用的就是console.log函数,该函数的输出都可以在控制台中看到。

        代码的调试是每个调试器必须支持的功能,在网页中就是对JavaScript代码的调试功能,包括单步、设置或取消断点、调用栈、变量信息等,这些都在“Sources”标签中得到了支持。图14-11是开发者工具中的JavaScript代码调试器。

                        图14-11 开发者工具的JavaScript调试器

        左侧是当前网页的所有包含JavaScript代码的文件,中间是当前代码和调试的位置,开发者可以单击左侧的行数设置或者取消断点,网页就能够在执行到该行的时候停下来。右侧最上面是控制执行的各种按钮,包括继续执行、单步执行、进入内部、跳出等。下面则是各种信息,包括查看的变量值、调用栈、当前作用域中的变量值、断点信息等。所以,这个调试功能跟其他语言调试器比较类似。

                值得一提的是,其实这个网页的代码都是在一行的,所以看起来非常吃力和不方便,对此现象Chromium提供了一个很方便的功能,能够将这些代码从一行变成可读性非常强的代码,就是图14-11所示的结果(原来所有JavaScript代码都在一行,非常难懂),具体的做法是在开发者工具的最下面找到“{}”按钮,单击即可,非常实用。

2.2 性能调试

        除了修改网页的DOM结构和CSS样式,以及调试JavaScript代码之外,开发者工具还能够帮助网页开发者改善性能和内存等方面的问题。性能方面包括网络资源的加载性能、网页绘制的性能,甚至包括根据网页加载和渲染过程给出一些优化建议。内存方面主要是网页使用的总内存、JavaScript引擎堆栈内存使用情况等方面的信息。

        首先来看性能方面。关于网络资源加载的分析和网页绘制在第4章和第8章中做过一些介绍,其基本功能已经展示出来了。这些功能只是开发者可能需要解决的一部分问题,开发者工具还提供了一种能够收集整个网页工作过程中的一段时间内各个JavaScript代码消耗时间的分布情况。开发者先是选择“Profiles”标签,然后选择“Collect JavaScript CPU profile”按钮,此时开发者工具将收集被调试网页重新加载的整个过程中CPU消耗在各个JavaScript模块的时间分布,如图14-12所示。

                        图14-12 使用开发者工具收集的CPU时间分布图

        其中“(program)”是主网页的HTML文件所消耗的时间,因为HTML文件中内嵌了很多JavaScript代码,所以它占据了绝大部分时间,而其他一些JavaScript文件则只占用了很少的执行时间。

        还有一个非常有用的能力,就是使用开发者工具中的“Audits”功能,图14-13展示了“Audits”分析一个网页所生成的结果,它明确了4个关于网络方面和1个关于网页渲染性能方面的问题可以进行优化,这对改善网站性能来说是一个极大的福音。

图14-13 开发者工具的“Audits”功能

其次来看关于内存性能分析功能。如前所述,开发者工具不仅提供了网页整体使用内存的情况,也提供了分析JavaScript引擎内部堆上的内存使用情况。图14-14是笔者在单击“开始”按钮之后,重新加载网页所收集的内存使用情况,它是按照时间轴来显示的。

图14-14 开发者工具收集网页使用内存情况的示意图

        可以看出,在某个时间点之后内存的使用量突然增大,这是因为在前面一小段时间内,由于还没有开始重新加载网页,所以没有出现内存大幅增长的情况。在单击“开始”按钮和重新加载网页,WebKit在等待网络响应之后才会逐渐增加对内存的需求。当网络下载数据完成时,WebKit使用内存量也在增加。而WebKit完成渲染之后,解释过程中的某些结构不再需要,这些不需要的结构被销毁后内存就会降到一个稳定的过程,图中上半部分的曲线就是反映了这些情况。

        除此之外的JavaScript引擎内部的内存分析工具,也可以按照类似的情况来处理,这里不再做过多的介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据类型(下)

数据类型(下) 1.集合(set)1.1 定义1.2 独有功能1.3 公共功能1.4 转换1.5 其他1.5.1 集合的存储原理1.5.2 元素必须可哈希1.5.3 查找速度特别快1.5.4 对比和嵌套 练习题 强插:None类型2.字典(dict)2.1 定义2…

银行数据仓库体系实践(6)--调度系统

调度系统是数据仓库的重要组成部分,也是每个银行或公司一个基础软件或服务,需要在全行或全公司层面进行规划,在全行层面统一调度工具和规范,由于数据类系统调度作业较多,交易类系统批量优先级高,为不互相影…

基于ssm+vue在线考试系统

摘要 在线考试系统是一种利用现代技术手段实现的教育评估工具,它为学生提供了更灵活、便捷的考试方式,同时为教育机构提供了高效管理和评估学生学业水平的手段。在这个背景下,基于SSM(SpringSpringMVCMyBatis)框架和Vu…

【OCC学习23】使用Draw探索OCC API 【完结】

对于OCC应用开发者来说,OCC的文档虽然不错,但针对具体的需求找到合适的API还是得不断摸索。我发现看Draw的代码是探索OCC API使用的最佳路径。掌握根据Draw命令查找对应代码就能高效找到解决方案。所以这是本系列的最后一篇分享了,个人感觉OC…

重塑网络安全格局:零信任安全架构的崛起与革新

零信任安全架构是一种现代安全模式,其设计原则是“绝不信任,始终验证”。它要求所有设备和用户,无论他们是在组织网络内部还是外部,都必须经过身份验证、授权和定期验证,才能被授予访问权限。简而言之,“零…

Dockerfile里ADD * 保留原来的目录结构

1、问题 给新模块写Dockerfile,很多静态资源分散在各个目录,于是Dockerfile里我直接一句: ADD ./* /dest/镜像出来后,启动容器,进入容器种后发现:文件拷贝成功,但原来的目录结构都不在了&…

【网站项目】基于SSM的251国外摇滚乐队交流和周边售卖系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

用javadoc生成springboot的文档

概述:生成 Spring Boot 项目的 JavaDoc 文档与生成普通的 Java 项目类似。 目录 第一步:创建一个springboot项目 第二步:编写pom文件 第三步:运行 Maven 命令生成 JavaDoc 第四步:查看结果 第一步:创建…

AG32VF407 AGRV2K 串口printf调试输出

视频讲解 [AG32VF407]国产MCUFPGA 串口printf调试输出及演示 原理图 测试代码 新建一个platformio工程,复制如下文件到测试工程目录下 E:\tech\AGM-AG32VF\sdk-release\AgRV_pio\platforms\AgRV\boards\agrv2k_407\board.asf E:\tech\AGM-AG32VF\sdk-release\AgRV_…

RCD负载箱的未来发展趋势和创新技术有哪些?

随着科技的不断发展,RCD负载箱作为电力系统中的重要设备,其未来发展趋势和创新技术也将不断涌现。以下是一些可能的发展趋势和创新技术: 1. 智能化:未来的RCD负载箱将更加智能化,能够实现远程监控、故障诊断和自动调节…

Pyside6在Pycharm下安装和使用

目录 一:安装 二:使用 一:安装 打开Pycharm编辑器,file-setting里Python解释器,点击小号,添加模块,搜索Pyside6,安装 安装报错,可能是默认的库安装超时,用其他的源 p…

Mybatis----分页

1.什么是分页 分页(Pagination)是指将大量数据划分为多个页面进行展示的一种技术手段。在数据量较大的情况下,将所有数据一次性显示在页面上会导致加载时间过长和页面过于庞大,影响用户体验和系统性能。分页技术通过划分数据为多…

为何外贸公司应该采用CRM客户管理软件?

在外贸行业中,客户关系管理尤为关键。在当下的大数据背景下,所有规模的外贸公司都迫切地需要进行数字化改造。无论是大型公司还是小型业务,他们都希望通过深入分析客户数据,为用户提供更优的体验,并据此调整企业战略。…

Scrum框架的自组织团队

飞行在天空中的鸟群一会排成一个“一”字,一会排成一个“人”字,它们自由飞翔,又根据不同的风向排列不同的队形减少阻力,达到最高的飞行效率。人类社会中也如此,没有一种不需要调整的通用方法可以适用于所有的工作场景…

【开源】基于JAVA+Vue+SpringBoot的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

应急响应-Linux-文件痕迹排查

敏感目录 Linux系统铭感目录如下。 /tmp /tmp目录和命令目录/usr/bin /usr/sbin等经常作为恶意软件下载根目录及相关文件被替换的目录。文件名为crloger8的木马下载到/tmp目录下,如图所示 ~/.ssh及/etc/ssh 需要查看是否存在.ssh或者ssh文件 ls -la /home/on…

力扣354. 俄罗斯套娃信封问题

动态规划 思路: 同时控制 w、h 两个维度比较复杂,可以先固定一个维度,来找出另外一个维度的严格单调序列: 对 w 排序,然后再来找 h 维度严格单调递增序列长度;在 w 排序时,会遇到 w(i) w(j) 的…

JWT登录

JWT JSON Web Token(JSON Web令牌) 是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任,因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法…

Spyder安装与使用

Spyder是一个Python的集成开发环境(IDE),由科学家、工程师和数据分析师设计。它提供了强大的编辑、调试和分析功能,以及数据探索和可视化工具,特别适合科学计算和数据分析。 Spyder的主要特点包括: 编辑器…

央视推荐的护眼灯是哪款?护眼灯品牌推荐

可能有些父母没有深入考虑过这样的问题:“台灯这东西只是照明,亮就可以了”、“黄光或者白光都行,孩子能看清书本就行”等类似的声音我也听一些朋友说过。但是科技社会带来的改变是全方位提升,学习台灯自然不例外。 今天就给大家分…