性能调优:容易忽视的JavaScript标签属性及其性能影响

这篇具有很好参考价值的文章主要介绍了性能调优:容易忽视的JavaScript标签属性及其性能影响。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在性能优化中,我们都知道,async属性可以让script标签变得不阻塞HTML解析,defer属性也有类似的功能,但实际defer是会阻塞script解析的(用defer的话,多个script会按顺序执行,而async执行是无序的,谁下载的快执行谁),使用async属性理论上讲,是要比defer更快的。

性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

用async属性有什么问题?

感觉不太安全,因为async会让多个script标签执行是无序的

实际测试async,看看是否是危险的

随便用一个脚手架起项目(vuereact都行),build之后,进入dist目录下,用http-server起服务,访问html如下(手动改成async)。

<!doctype html>
<html lang="">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <link rel="icon" href="/favicon.ico">
  <title>hello-world</title>
  <script async src="/js/chunk-vendors.f5ba3c0d.js"></script>
  <script async src="/js/app.382b3f67.js"></script>
  <link href="/css/app.2cf79ad6.css" rel="stylesheet">
</head>
<body>
  <div id="app"></div>
</body>
</html>

用弱网访问,看下的图,很明显 app.382b3f67.js 要先下载完(因为size小)。

性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

确认是否是 app.382b3f67.js 先执行, 手动往2个js里面埋入log代码,结果和预期一样,app.382b3f67.js先执行

性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

确认 chunk-vendors.f5ba3c0d.js 里面的代码是关键依赖,比如是vuereact,理论上讲,应该是要报错的,因为依赖后执行了,但结果并没有报错。

结论

webpack项目内,可以放心对多个script标签使用async属性,webpack已经对产物做好了兼容

webpack是如何实现兼容async的?

分析打包出来的产物,可以探知到webpack是如何实现的

产物1app.382b3f67.js (简化后的,方便理解)。

(function () {
  "use strict";
  var __webpack_modules__ = ({
    4629:
      (function (__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) {}),
    6949:
      (function (module) {})
  });
 
  !function () {
    // ...
    var chunkLoadingGlobal = self["webpackChunkhello_world"] = self["webpackChunkhello_world"] || [];
    chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
    // .push 被改写
    chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
  }();
  var __webpack_exports__ = __webpack_require__.O(undefined, [998], function () {
    return __webpack_require__(4629);
  })
  __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
})();
console.log('app.382b3f67.js')

产物2chunk-vendors.f5ba3c0d.js(简化后的,方便理解)。​​​​​​​

(self["webpackChunkhello_world"] = self["webpackChunkhello_world"] || []).push([[998], {
  // ...
}]);
console.log('chunk-vendors.f5ba3c0d.js')

解释:

  • 1、app.382b3f67.js里面的关键代码(webpack打包时的入口代码index.js),比如new Vue()root.render(),被存放到了__webpack_require__(4629)里面(每次打包数字会变,不一定是4629)

  • 2、4629 没有立即被执行,而是先存放好,等依赖[998]准备好,才执行

那app.382b3f67.js怎么知道依赖998已经准备好了呢?

  • 1、依赖[998]就是chunk-vendors.f5ba3c0d.js,998被 .push 到了 self["webpackChunkhello_world"] 里面,这个push不是Array.push,而是被改写过的(我在上面写了注释,具体是哪一行被改写了)

  • 2、改写的作用是:可以通知到 app.382b3f67.js,998依赖已经准备好了

由此可以得到结论:

  • 依赖未准备好时,webpack打包时的入口代码index.js不会执行。

  • 到这里还没完,由上面的结论可以发现:如果不做特殊处理,我们几乎无法监控到webpack应用的白屏问题。

因为如果某个js资源网络问题丢失了,index.js根本就不会执行,意味着上报代码也不会执行。如果js执行报错,那直接进程退出了,上报代码也不会执行(除非try catch了)。

学习上

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

性能调优:容易忽视的JavaScript标签属性及其性能影响,javascript,开发语言,ecmascript,自动化测试,单元测试,面试,python

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。文章来源地址https://www.toymoban.com/news/detail-832080.html

到了这里,关于性能调优:容易忽视的JavaScript标签属性及其性能影响的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常见的 HTML<meta> 标签的 name 属性及其作用

    HTML中的 meta 标签可以通过 name 属性提供元数据,这些元数据可以用于指定有关文档的信息,以及控制浏览器和搜索引擎的行为。 name 属性通常与其他属性一起使用,如 content 、 charset 、 http-equiv 等,以提供更具体的元数据信息。 以下是一些常见的 meta 标签的 name 属性及其作

    2024年02月11日
    浏览(43)
  • 容易忽视的细节:Log4j 配置导致的零点接口严重超时

    作者:vivo 互联网服务器团队- Jiang Ye 本文详细的记录了一次0点接口严重超时的问题排查经历。本文以作者自身视角极具代入感的描绘了从问题定位到具体的问题排查过程,并通过根因分析并最终解决问题。整个过程需要清晰的问题排查思路和丰富的问题处理经验,也离不开

    2023年04月23日
    浏览(45)
  • Spark(30):Spark性能调优之常规性能调优

    目录 0. 相关文章链接 1. 最优资源配置 2. RDD优化 2.1. RDD复用 2.2. RDD持久化 2.3. RDD尽可能早的 filter 操作 3. 并行度调节 4. 广播大变量 5. Kryo序列化 6. 调节本地化等待时长  Spark文章汇总          Spark 性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增

    2024年02月16日
    浏览(60)
  • ES 性能调优,这可能是全网最详细的 Elasticsearch 性能调优指南

    性能调优是一件大而细的活儿。技术开发没有银弹,也就是本质上是没有所谓可应对任何场景的通用\\\"最优配置\\\"的。如果有,那么出厂何必不直接给出呢?所以理解每一项优化配置的含义很重。在当前情况下为最优配置,但是换一种场景就未必了。 废话不多说,直接上干货!

    2024年02月03日
    浏览(56)
  • 【HTML5】HTML5 多媒体标签 ② ( 视频标签 <video> | 视频标签常见属性 | autoplay 属性 | controls 属性 | poster 属性 | 设置多个格式视频 )

    HTML 5 的 video 视频标签 , 支持 ogg / mpeg 4 ( mp4 ) / webM 三种格式的音频 , 不同的浏览器支持的音频格式不同 ; IE 浏览器 : 9.0 以上版本支持 mp4 格式 ; Firefox 浏览器 : 3.5 以上版本支持 ogg 格式 ; 4.0 以上版本支持 webM 格式 ; Opera 浏览器 : 10.5 以上版本支持 ogg 格式 ; 10.6 以上版本支持

    2024年02月09日
    浏览(76)
  • Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

    本堂课的知识要点有哪些? 1、性能发现工具pprof 2、性能调优案例 1、性能调优简介 性能调优原则: 要依靠数据不是猜测 要 定位最大瓶颈 而不是细枝末节 不要过早优化 不要过度优化 2、性能发现工具pprof 说明: 1、希望知道应用在什么地方耗费了多少CPU、Memory 2、pprof是用于

    2024年02月08日
    浏览(43)
  • openGauss学习笔记-271 openGauss性能调优-TPCC性能调优测试指导-测试MOT-TPCC性能

    本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openEuler操作系统,为了达到最佳TPMC性能所依赖的关键系统级调优。 271.1 TPC-C简介 TPC-C基准是衡量联机事务处理(OLTP)系统性能的行业标准基准。它基于一个复杂的数据库和许多不同的事务类型。这些事务类型在此基准上执

    2024年04月26日
    浏览(42)
  • 【kafka性能测试脚本详解、性能测试、性能分析与性能调优】

    Apache Kafka 官方提供了两个客户端性能测试脚本,它们的存放位置如下: 生产者性能测试脚本:$KAFKA_HOME/bin/kafka-producer-perf-test.sh 消费者性能测试脚本:$KAFKA_HOME/bin/kafka-consumer-perf-test.sh kafka-producer-perf-test.sh 支持测试的性能指标包括:吞吐量(throughput)、最大时延(max-latenc

    2024年02月04日
    浏览(64)
  • SAP ABAP 代码调优检查工具及性能调优

    一:代码检查工具 ABAP 测试仪表盘(ATC) 所有检查工具, 豁免处理, 结果存储的中心 代码检查器 (SCI) 提供给客户,合作伙伴和SAP的做代码相关检查的开放式架构 扩展程序检查(SLIN) 扩展的代码检查,用来分析源代码 SAP NetWeaver 应用服务器,附加组件的代码漏洞分析器 安全漏洞的

    2024年02月10日
    浏览(44)
  • Elasticsearch性能调优

    centos系统默认的是1024个文件句柄。如果文件句柄用完了,这就意味着操作系统会拒绝连接,意味着数据可能丢失,在ElasticSearch大量请求的情况下,1024个文件句柄数量是不够的,可以改成655360。 内存交换到磁盘对服务器性能来说是致命的。 内核参数vm.swappiness控制换出运行时

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包