PWA 技术介绍及优缺点分析

什么是 PWA

PWA(Progressive Web Apps)是 Web 应用程序的一种新的类型。与传统的 Web 应用程序(仅仅是网页应用程序的改进版本)不同,PWA 是一种具备类似于原生应用的功能和体验的 Web 应用程序。这意味着用户可以像使用原生应用一样,无需下载安装,即可使用 PWA。它们由 App Shell 和 Service Workers 两个重要组成部分组成。

App Shell

App Shell 是在首次加载应用时加载的 shell(壳)。它包含应用程序的基本外观和页面结构,通常包括 应用程序的头、脚,以及菜单等,这使得用户在离线情况下即使没有数据加载也可以看到应用程序的骨架。

Service Worker

Service Worker 是一种独立的 JavaScript 线程,由浏览器运行在后台。它是一种事件驱动的程序,它可以拦截网络请求,并采取相应的动作。一旦 Service Worker 安装好了,用户访问您的网站或应用程序时,Service Worker 将自动运行,并且被能够侦听来自服务器的请求,以及可以在回调事件发生时响应:

  • 它可以缓存所有应用程序/网站需要的资源,并自动拦截应用程序中的所有 HTTP 请求

  • 它可以允许在后台处理一些工作,以便应用程序在用户关闭它时仍可以运行。

PWA 的优缺点分析

优点

1. 可离线工作

PWA 所搭载的 Service Worker 技术使应用程序可以在缺失网络连接时作为非网络独立应用程序的工作,这是传统 Web 应用程序所不能做的。Service Worker 还可以在在线时缓存资源和数据,在离线时使用缓存并为用户提供所需要的信息。

2. 安装简单

传统应用程序需要从应用商店下载安装,并且占用设备内存。而 PWA 可以像网站一样被用户访问,用户可以将其添加到设备的主屏幕,直接启动,省去了下载和安装的步骤。

3. 与平台无关

PWA 运行在 Web 技术栈上,不依赖于特定的设备或平台,甚至在不同的操作系统或设备上都可以维持相同的用户体验。这使得应用程序可以使用多个平台上的 Web API,使得应用程序可用性更加优越。

4. 更快的加载速度

PWA 使用 Service Worker 技术进行了预先缓存,并启动了像 App Shell 这样的壳体,可以在首次访问后快速启动应用程序和页面。这使得用户不用等待漫长的加载时间,并且可以通过 Push API 接收实时通知而无需重新加载应用程序。

缺点

1. 功能需求有限

由于 PWA 是基于 Web 技术栈运行的,所以它的功能和性能总是有限的。这对某些复杂的应用程序可能会产生限制。一些原生应用程序在特定场景下可以提供的复杂功能,可能需要特殊处理才能在 PWA 中实现。

2. 兼容性问题

PWA 目前主要由谷歌开发,所以它仍然存在兼容性问题。新应用程序必须使用 Service Worker 一类的新 API,而旧的平台则需要单独的版本或代码下降。这可能会增加开发工作量并带来额外的技术难题。

3. 安全限制

PWA 由于采用的是 Web 技术,存在跨域安全问题。PWA 的应用程序必须满足 HTTPS 协议才能生效。这意味着除非网站具有合适的安全证书,否则即使用户想要启用 PWA,它也无法启动。

PWA 的示例代码

Service Worker

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

App Shell

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

总结

PWA 技术在 Web 应用程序中的增长和发展是值得注意的。它提供了一种跨设备和平台的用户体验,同时增加了离线工作、快速加载速度和安装简易化等优点,但由于它的使用限制,如果需要复杂的功能,可能需要在原生应用程序上进行更改或考虑其他解决方案。

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


猜你喜欢

  • Babel 插件开发:AST 递归遍历技巧

    前言 对于前端开发者来说,Babel 可谓是一项非常重要的工具。它可以将 ECMAScript 6+ 代码转换成向下兼容的 JavaScript 代码,使得我们能够使用最新的语法特性,同时又不必担心浏...

    1 年前
  • Redis 如何实现分布式投票系统?

    前言 随着互联网的发展和社交网络的流行,投票系统越来越受到人们的关注和使用。传统的投票系统通常是基于数据库的,但随着用户量的增加和访问量的提高,数据库可能会成为瓶颈,导致系统性能下降甚至崩溃。

    1 年前
  • ESLint 规则中的 no-use-before-define 详解

    随着前端开发团队越来越大,代码的统一与规范就变得越来越重要了。目前,前端代码最流行的规范工具是 ESLint。其中,规则“no-use-before-define”可能会让一些开发者感到挑战,本文就来...

    1 年前
  • 使用 Strapi 和 Gatsby 创建 Headless CMS 网站

    随着互联网的发展,越来越多的网站需要提供高质量的内容,因此 Content Management System (CMS) 已经成为了现代网站的重要组成部分。然而,传统的 CMS 服务通常会让网站性能...

    1 年前
  • Vue.js 中实现评论组件的方法详解

    在现代 Web 开发中,评论组件是一个非常重要的功能,“评论”不仅可以提高用户留存率和粘性,同时也可以帮助网站和产品优化和改进。在此,我们介绍 Vue.js 中实现评论组件的方法,以便为您的 Web ...

    1 年前
  • Enzyme:React 组件测试的技巧

    随着前端技术的迅速发展,越来越需要对 React 组件进行测试,以确保代码的质量和稳定性。而 Enzyme 是一个非常优秀的 React 组件测试工具,它可以帮助我们进行组件的快速、精确、可靠的测试。

    1 年前
  • Fastify 的性能调优技巧 - 如何提高性能

    Fastify 是一个快速、高效、低开销的 Node.js Web 框架,它的路由处理能力、中间件效率和错误处理机制都十分出色,因此受到了广泛的欢迎和应用。不过,在高并发和复杂场景下,我们需要进一步优...

    1 年前
  • Deno 中使用 Redis Pub/Sub 进行消息推送

    Redis是一个高性能的key-value存储系统,被广泛应用于分布式缓存、消息系统、移动应用等场景。本文将介绍如何在Deno中使用Redis Pub/Sub实现消息推送。

    1 年前
  • 使用 SSE(Server-Sent Events)实现服务端推送

    什么是 SSE(Server-Sent Events)? SSE(Server-Sent Events)是一种基于 HTTP 协议的服务端推送技术,它采用纯文本格式传输数据,主要用于前端实时通讯和信息...

    1 年前
  • PWA 技术实现桌面端应用访问

    随着移动设备和桌面设备的不断发展,越来越多的应用程序需要支持多种设备访问,这就需要一种跨平台的技术来实现多设备访问。PWA技术正是一种优秀的跨平台技术,可以实现Web应用的访问,可以用于移动应用,也可...

    1 年前
  • Mongoose 中文文档查询方法解析

    Mongoose 是一个优秀的 MongoDB 驱动程序,它通过提供更优雅的 API 和更强大的功能来简化 MongoDB 的操作。在 Mongoose 中,查询是其中一个重要的功能,它可以让我们从 ...

    1 年前
  • 在 ES10 中实现更安全、更快速的对象解构

    在 ES10 中实现更安全、更快速的对象解构 在 JavaScript 中,对象解构可以帮助我们快速地从对象中提取出需要的值,极大的提高了开发的效率。在 ES10 中,新加入了一些功能,使得对象解构更...

    1 年前
  • 改善用户体验:Material Design 和动效设计

    在 Web 开发中,提升用户体验一直是前端开发者所追寻的目标。而 Material Design 以及动效设计的运用可以帮助我们实现这一目标。本文将分别介绍 Material Design 和动效设计...

    1 年前
  • LESS 源码分析:如何实现变量和 mixin 的继承?

    LESS 是一种 CSS 预处理器,它能够通过引入变量、mixin 和函数等功能,让 CSS 的编写更加高效和便捷。其中,变量和 mixin 的继承是 LESS 中非常重要的特性,本文将深入分析 LE...

    1 年前
  • 使用 Chai 和 Karma 实现自动化测试的技巧

    前端自动化测试是开发过程中不可或缺的一部分,它可以有效地发现和解决潜在问题,提高代码的质量和可靠性。在前端自动化测试中,Chai 和 Karma 是两个重要的工具,它们可以帮助我们编写测试用例,并进行...

    1 年前
  • 如何正确使用 Bootstrap 中的 SASS 源码?

    在前端开发中,使用 Bootstrap 已经成为了开发者们非常流行的选择。Bootstrap 不仅提供了一系列的预设样式,还可以通过自定义主题来满足不同的需求。然而,在进行 Bootstrap 主题开...

    1 年前
  • Promise 并发控制及超时处理策略

    在前端开发中,经常会涉及到并发请求的场景,例如批量处理数据、分页加载数据等。而 Promise 是处理异步请求的一种优秀方式。然而,如果并发请求数量过多,可能会导致服务器压力过大,甚至造成应用崩溃。

    1 年前
  • Custom Elements 中错误处理及调试技巧

    Custom Elements 中错误处理及调试技巧 在前端开发中,Custom Elements 提供了一种创建高度可定制和可重复使用组件的方法。然而,在实际开发中,可能会遇到一些错误和调试问题。

    1 年前
  • Redux 教程:Redux 的原始工作原理

    什么是 Redux? Redux 是 JavaScript 应用程序的可预测状态容器。它是 React 生态系统的一部分,被广泛用于构建复杂的前端应用。它的主要功能是集中管理应用程序的状态并使其易于维...

    1 年前
  • 使用 Mocha 和 SinonJS 进行 Node.js 测试

    前言 随着前端开发的发展,对于产品的质量要求也越来越高。针对 Node.js 的测试框架 Mocha 和模拟框架 SinonJS 的使用将在下文中详细介绍。同时,还会详细说明如何结合两个框架进行 No...

    1 年前

相关推荐

    暂无文章