当前位置: 首页 > news >正文

JavaScript 延迟加载的方法( 7种 )

JavaScript脚本的延迟加载(也称为懒加载)是指在网页的主要内容已经加载并显示给用户之后,再加载或执行额外的JavaScript代码。这样做可以加快页面的初始加载速度,改善用户体验,并减少服务器的压力。

在这里插入图片描述

以下是几种常见的延迟加载JavaScript的方法:

  1. defer 属性

    • 使用 <script> 标签的 defer 属性可以让浏览器在解析文档的同时下载脚本文件,但会在整个文档解析完成后再执行这些脚本。
    • 语法:<script src="example.js" defer></script>
  2. async 属性

    • async 属性告诉浏览器立即开始下载脚本,并且在下载完成后尽快执行它,而不需要等待HTML文档解析完成。这适用于与页面内容无关的脚本,因为它不会阻塞DOM构建。
    • 语法:<script src="example.js" async></script>
  3. 动态创建 <script> 元素

    • 通过JavaScript动态地创建 <script> 元素并添加到文档中,可以在特定事件发生时(如窗口加载完成、用户滚动到某个位置等)才加载脚本。
    • 示例代码:
      var script = document.createElement('script');
      script.src = 'example.js';
      document.body.appendChild(script);
      
  4. 使用 Intersection Observer API

    • 对于按需加载的内容(例如,当用户滚动到页面的某一部分时),可以使用 Intersection Observer API 来监听元素是否进入视口,并在该时刻加载相应的脚本。
    • 示例代码:
      let observer = new IntersectionObserver((entries) => {entries.forEach(entry => {if (entry.isIntersecting) {// 加载脚本let script = document.createElement('script');script.src = 'example.js';document.body.appendChild(script);observer.unobserve(entry.target); // 取消观察}});
      });
      observer.observe(document.querySelector('.lazy-load-script'));
      
  5. 模块化和代码分割

    • 在现代JavaScript开发中,可以使用模块化工具(如 Webpack)进行代码分割。根据路由或者组件的需求来加载必要的JavaScript代码,这样可以确保只有需要的代码被加载,提高性能。
  6. preloadprefetch

    • preload 提示浏览器尽早开始加载资源,但并不立即执行;prefetch 则是提示浏览器在空闲时间预取可能会在未来使用的资源。它们都可以帮助优化加载策略,但不是严格意义上的延迟加载。
    • 语法:<link rel="preload" href="example.js" as="script"><link rel="prefetch" href="example.js">
  7. 服务端渲染 (SSR) 和客户端水合作用 (hydration)

    • 对于使用框架如React, Vue, Angular的应用程序,可以通过服务端渲染生成静态HTML,并在客户端进行水合作用(即应用JavaScript行为)。这种方式可以让用户更快看到页面内容,同时保证交互性。

选择哪种方法取决于具体的场景和需求。对于大多数情况,deferasync 是最简单且有效的解决方案。而对于更复杂的场景,可能需要结合多种技术来实现最佳的性能。

http://www.lryc.cn/news/520199.html

相关文章:

  • python+pymysql
  • 基于 Selenium 实现上海大学校园网自动登录
  • 啥!GitHub Copilot也免费使用了
  • Spring配置文件中:密码明文改为密文处理方式(通用方法)
  • Linux下ext2文件系统
  • BUUCTF:web刷题记录(1)
  • 【微服务】面试题 6、分布式事务
  • 【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)
  • Spring Data Elasticsearch简介
  • GESP202312 四级【小杨的字典】题解(AC)
  • 键盘过滤驱动
  • dolphinscheduler2.0.9升级3.1.9版本问题记录
  • 【权限管理】Apache Shiro学习教程
  • 9.4 visualStudio 2022 配置 cuda 和 torch (c++)
  • python特殊参数
  • Ubuntu系统Qt的下载、安装及入门使用,图文详细,内容全面
  • elasticsearch集群部署
  • 初学stm32 --- DAC模数转换器工作原理
  • 保证Mysql数据库到ES的数据一致性的解决方案
  • Flutter Xcode 16+ iOS 18.1 使用image_pickers无法弹出选择图片的视图问题
  • socket网络编程-TC/IP方式
  • 《分布式光纤测温:解锁楼宇安全的 “高精度密码”》
  • C语言基本知识复习浓缩版:数组
  • Python贪心
  • rk3568 内核态OOM内存泄漏kmemleak使用
  • ASP.NET Core - 日志记录系统(二)
  • 阿里云直播互动Web
  • 解锁无证身份核验:开启便捷安全新征程
  • [DO374] Ansible 配置文件
  • 【杂谈】-50+个生成式人工智能面试问题(四)