PWA 性能优化:预加载和懒加载的区别和应用

前言

随着移动互联网和 Web 技术的发展,PWA(Progressive Web App)逐渐成为了一种前端开发的趋势。PWA 通过将 Web 应用转换为类似原生应用的形式,具有更加流畅的用户体验和高效的工作流程。而其中最为重要的一点就是性能优化,其中包括预加载和懒加载两种技术手段。

什么是预加载和懒加载?

预加载和懒加载是两种不同的资源处理方式。预加载指的是在 Web 应用加载页面时,提前加载未来可能使用到的一些资源,以优化之后的流畅度。懒加载则是在 Web 应用运行时,按需加载资源,以优化页面性能。

预加载

为什么需要预加载?

一般来说,Web 应用是在实际使用前,对静态资源进行加载的。静态资源包括 HTML 页面、CSS 样式、JavaScript 脚本等等,而这些资源的加载也是 Web 应用性能的优化关键之一。

预加载是通过提前加载接下来需要使用的资源,以优化页面的流畅度和速度。例如,在 Web 应用中,当用户浏览某个页面时,页面中某些资源可能需要从远程服务器上获取才能访问。在这种情况下,未经过预加载的页面可能会遇到加载延迟的情况,导致用户体验上的不佳。

如何预加载?

预加载可以通过 Web 应用资源列表中标记的方式来实现。一般来说,Web 应用资源需要被放在单独的 JavaScript 文件或 JSON 格式的文档中。例如:

-
  ---------------
  -------------
  ------------------
  -------------------
-

接下来,在 HTML 页面中,可以通过以下方式在页面加载之前,预加载这份资源列表:

----- ------------- --------------------- -----------

此时,Web 浏览器将会在页面加载相关资源之前,提前获取到资源清单。并在需要时进行加载。

需要注意的是,预加载必须谨慎使用,因为过度加载可能会导致性能下降。必须仔细考虑其中包含的内容和使用场景。

懒加载

什么是懒加载?

懒加载是指在 Web 应用运行时,动态加载资源。这样做可以帮助优化 Web 应用的启动时间和响应时间。例如,在 Web 应用中,图片一般会占用大量的资源,当所加载的页面容器并没有展示整个页面时,图片显然是不需要一次性全部加载的。这种情况下,可以使用懒加载技术,只在需要时才进行加载。

懒加载可以帮助 Web 应用实现更快的响应时间,因为不必将所有资源在启动时全部加载。

如何实现懒加载?

本文使用 Lazysizes 懒加载工具来实现图片懒加载。Lazysizes 是一款小型、高性能的懒加载库,可以延迟图片和背景图片的加载、响应性资源选择处理,并可以延迟非生命线 (Infinite Scroll)、动画或视频等等。

Lazysizes 可以通过 CDN 或 npm 安装:

------- ---------------------------------------------------------------------------------------

或者:

--- ------- ---------

在 HTML 页面中需要延迟加载的图片上添加 data-src 属性,并将实际的图片路径设置为 data-src,如下所示:

---- ---------------- -------------------- --------- -------

<img> 元素的 class 属性应该包含 lazyload。这样,当页面渲染时,会加载 Lazysizes 库,并自动将这些 <img> 元素升级为懒加载器。

总结

预加载和懒加载是优化应用性能的两种不同方式。预加载的主要目的在于提高 Web 应用启动时间和响应速度,懒加载则可以帮助你升级应用体验,减少应用加载时间。在实际开发时,可以根据具体场景选择使用预加载或懒加载技术。

对于预加载,无论是在下载资源的数量上还是在减少页面加载时间上,都含有优势。懒加载则可以避免在应用启动时预加载所有资源,从而在一定程度上优化了应用响应速度和流畅度。

代码示例:

--------- -----
----- ----------
  ------
    ----- ----------------
    ------------------
    ----- ------------- ----- ------------------ ------------------- --
    ----- ---------------- ---------------------------------------------------------------
    ------- ---------------------------------------------------------------------------- 
  -------
  ------
    ------- ------------
    ------- ------- --- --- ------- --- ---- -----
    ----
    --------- ------- ------------
    ---- ------------------------
      ---- ---------------------- ----- -------------- ----- -------------- ----- ------------------ ------ ------
  ----------- ------ ------
  ----------- ------ ------
  -------
      ---- ------- ---
      ----- ------------- --------------------- -----------
      ----------
        ---- -------------------- ------------
      -----------   
    ------
    --------- ---- ---- ------------
    ---- -------------------------
      ---- --------------------
        ---- ------ ------- - ---------- -- ---
        ---- ---------------- ------------------------- ----------------------- ------------
      ------
    ------
  -------
-------

在 JavaScript 中,可以使用以下代码来初始化 Lazysizes:

-- --- ---------
------------- - ---------- -
  -----------------
-

引用

  1. lazysizes与延迟加载
  2. Optimizing Performance with Resource Hints
  3. Preload, Prefetch, and Other Progressive Loading Techniques
  4. Lazy loading vs. eager loading for website performance
  5. High Performance Browser Networking

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65b89eb5add4f0e0ff131cde


猜你喜欢

  • ES7 新特性之 Object.entries() 方法

    JavaScript 已经成为前端开发的必备语言,而 ECMAScript 是 JavaScript 的标准化版本,它会定期发布新版本,本文将介绍 ES7 中新加入的 Object.entries()...

    9 个月前
  • 解决 Mongoose 中的负数存储问题

    在使用 Mongoose 进行数据存储时,我们可能会遇到一个问题:负数在存储时会变成正数,这会导致错误的计算结果和数据不一致。本文将介绍负数存储问题的原因、解决方法以及示例代码,帮助前端开发者更好地使...

    9 个月前
  • Airbnb React/JSX Style Guide 与 ESLint 规则实战指南

    React 是当前最流行的前端 UI 框架之一,其高效的虚拟 DOM 和声明式的编程风格让开发者可以更快速地构建复杂的用户界面。然而,由于 React 的灵活性,很多开发者在编写代码时容易出现一些不规...

    9 个月前
  • 如何在 Jest 中使用 ES6 语法

    Jest 是一个流行的 JavaScript 测试框架,它支持 JavaScript 和 TypeScript,被广泛用于前端和后端的单元测试和集成测试。在使用 Jest 进行测试时,我们经常需要使用...

    9 个月前
  • 在 Express.js 中使用 Nodemailer 发送电子邮件

    作为 Web 开发者,我们经常需要发送电子邮件。在 Node.js 生态系统中,Nodemailer 是一款常用的电子邮件发送库。它支持各种邮箱服务,并提供了灵活的配置选项。

    9 个月前
  • Server-sent Events 实现的投票实时统计系统

    前言 在 Web 开发过程中,实现实时统计功能是一项比较常见的需求。常规的做法是使用 Websocket 技术,但是由于 Websocket 不太好兼容老的浏览器,因此我们可以使用 Server-Se...

    9 个月前
  • ECMAScript 2020 (ES11):如何使用 globalThis 变量

    ECMAScript 2020 (ES11):如何使用 globalThis 变量 在 ES11 中,JavaScript 引入了 globalThis 变量,作为访问全局对象的标准化方式。

    9 个月前
  • 解决 ES9 中的模块调用问题

    随着前端技术的不断发展,前端项目越来越大,为了代码复用、可维护性方面的考虑,模块化已经成为了前端开发的一种标配。ES6 的模块化方案为我们提供了很多便利,但是在 ES9 中,模块调用时出现了一些问题,...

    9 个月前
  • 解决 CSS Reset 导致字体样式错乱的问题

    问题描述 在进行前端开发时,我们经常会使用 CSS Reset 来重置 HTML 元素的默认样式,以解决不同浏览器对元素样式的兼容性问题。然而,有时候使用 CSS Reset 后,网页上的字体样式会出...

    9 个月前
  • 响应式设计中如何处理 ie 下布局问题

    随着移动设备的普及,响应式设计已经成为了前端开发的标配。而在开发过程中,我们经常会遇到 IE 浏览器下的布局问题。本文将探讨响应式设计中如何处理 IE 下布局问题,并提供实用的解决方案。

    9 个月前
  • TypeScript2.2:一个 C# 程序向 TypeScript 的迁移指南

    在前端开发过程中,JavaScript 一度被广泛使用,但随着项目复杂度的增加和需要维护的代码量的增加,JavaScript 的弱类型和灵活性也让其变得难以维护和扩展。

    9 个月前
  • 使用 Web Components 实现高复用性、轻量级的 Webpack 插件

    前言 使用 Webpack 进行前端构建已经成为了现代前端开发的标配,而 Web Components 则是 Web 开发的趋势之一。那么如何在使用 Webpack 的同时,利用 Web Compon...

    9 个月前
  • 如何在前端中集成 Deno

    随着前端技术的不断发展,前端工程师们需要不断地学习新的技术和工具,以便更好地完成工作任务。Deno 是一个新的 JavaScript/TypeScript 运行时,它提供了一种基于安全的、面向 Web...

    9 个月前
  • 如何使用 ES10 中的 catch() 方法快速处理 Promise 错误

    如何使用 ES10 中的 catch() 方法快速处理 Promise 错误 在前端开发过程中,我们经常会使用 Promise 对象来处理异步任务,因为它们提供了一种非常方便的方式来管理异步代码。

    9 个月前
  • Serverless 框架中 Lambda 函数无法访问私有 VPC 的解决方法

    在现代云计算中,Serverless 框架成为了一种非常热门的技术,它不仅可以让我们快速部署应用程序,还可以实现快速自动化部署,更加高效地使用资源。 对于使用 Serverless 框架的开发者来说,...

    9 个月前
  • PM2+WebSocket 构建实时聊天应用程序

    在现代互联网应用程序中,实时聊天应用程序已经变得越来越普遍。WebSockets 技术已成为最流行的技术之一,用于构建实时聊天应用程序。PM2 是最流行的 Node.js 进程管理器之一,可以帮助将操...

    9 个月前
  • ES7:async 函数

    在 JavaScript 中,我们经常会遇到需要进行异步操作的场景。传统的解决方案是使用回调函数或者 promise,但是这两种方法都存在一些不便之处。ES7 中引入了 async 函数,为我们解决了...

    9 个月前
  • Angular 中使用 Polymer 的 Custom Elements

    在现代的 Web 应用开发中,前端框架的选择非常重要。Angular 和 Polymer 都是非常受欢迎的框架,二者在不同的技术领域拥有各自的优势。Angular 作为一个大而全的框架,提供了一整套完...

    9 个月前
  • 示例:在 React 和 Redux 中创建完全可重用的跨平台 UI 库

    简介 对于前端工程师来说,组件开发是很重要的一环。为了提高效率和降低维护难度,我们需要将一些常见的 UI 组件打包成库并重复使用。本文将介绍如何在 React 和 Redux 中创建一个高度可重用的跨...

    9 个月前
  • Kubernetes 调度器原理分析与扩展

    Kubernetes 是目前最流行的容器编排工具之一,它提供了一个高度可扩展的平台来部署和管理容器应用程序。Kubernetes 的调度器是它的核心组件之一,它负责将容器调度到合适的节点上。

    9 个月前

相关推荐

    暂无文章