PWA 应用如何处理后台运行的问题

前言

随着智能手机的普及,人们对移动应用体验的要求越来越高。传统的移动应用需要用户主动打开并使用,而在这个过程中,一旦用户离开应用,应用程序也就停止工作。这种使用方式对于一些应用来说并不友好,比如社交、聊天等需要实时获取信息的应用程序。为了提高应用程序的用户体验,PWA(Progressive Web App) 应运而生。

PWA 应用是一种结合 Web 和 Native 应用的优点,能让用户像使用 Native 应用一样使用 Web 应用,甚至比 Native 应用更好。其中一个关键特性是,当用户离开应用(比如锁屏、最小化)时,应用能够在后台运行,继续处理数据。

本篇文章将着重介绍 PWA 应用如何处理后台运行的问题,从技术实现、实用性等角度展开探讨。

为什么需要后台运行?

对于一些需要实时获取数据或推送消息的应用,后台运行是必不可少的特性。比如实时聊天、即时通讯、社交信息流、在线游戏等等,都需要在用户离开应用时继续工作。

PWA 应用能够做到在后台运行,不仅可以提高用户的使用体验,还能保证用户能及时收到相关的消息和通知,增强用户的活跃程度和黏性。

PWA 应用如何实现后台运行?

PWA 应用要想实现后台运行,需要用到 Web Workers APIService Workers APIPush API

Web Workers API

Web Workers API 允许我们在 Web 应用中使用多线程,将复杂的任务放在后台线程中处理。与主线程相比,后台线程不会阻塞主线程,避免了应用的卡顿和崩溃。

Web Workers 分为两种:Dedicated Workers 和 Shared Workers。前者是一种专用线程,只能被创建它的脚本使用,后者可以被多个脚本共用。

我们可以通过如下代码创建 Dedicated Worker。

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

当代码执行到这里的时候,浏览器将开启一个新的线程,并将 worker.js 文件加载到该线程中。Worker 中的代码将在后台运行,与主线程互不干扰。

Service Workers API

Service Workers API 是 PWA 应用的核心。它是一个独立的 JavaScript 线程,可以被用来控制 Web 里面核心的请求和响应。在这个意义上来说,它像是一个代理服务器,允许我们缓存请求和响应,甚至可以在离线时使用缓存。

Service Worker 一般会拦截网络请求,并能够缓存响应数据。当用户离开应用时,Service Worker 依然可以在后台处理网络请求,并将处理结果缓存下来,以供用户下次使用。这种方式可以大幅度提高应用的响应速度,并且使得应用离线使用成为可能。

下面是 Service Worker 的注册代码,我们可以在 index.html 文件的 script 标签中添加如下代码:

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

当我们运行 PWA 应用时,浏览器会尝试注册 Service Worker,在注册完成后,Service Worker 就可以控制页面与网络的请求和响应了。

Push API

Push API 允许服务端向客户端推送消息,即 Web Push Notification。在 PWA 应用中,Push API 和 Service Worker 配合使用,可以实现应用在后台运行时,仍然能够接收到推送消息。

获取用户许可 Push Notification 需要用户授权,我们可以使用 Notification API 弹出一个提示框,请求用户授权。

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

用户授权后,我们需要将用户的订阅信息发送到服务端,并利用推送服务发送消息给客户端。推送服务一般有两种实现方式:WebSocket 和 HTTP。

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

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

当服务端有新的消息时,服务端会发送消息到客户端,客户端通过 Service Worker 接收消息,并显示推送通知。

总结

本文重点介绍了 PWA 应用如何处理后台运行的问题。PWA 应用通过 Web Workers API、Service Workers API 和 Push API 实现了在后台运行时,仍然能够处理和响应客户端的请求和推送消息。PWA 应用的后台运行特性为一些需要实时获取数据和推送消息的应用提供了更好的用户体验。

PWA 应用的技术实现较为复杂,需要良好的编程技能和较深的 Web 开发经验。但是,它为移动应用程序的快速开发和迭代提供了非常好的途径。我们相信,未来在移动应用开发领域,PWA 应用会有越来越广泛的应用。

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


猜你喜欢

  • 实现在线聊天室之基于 Websocket 和 Socket.IO 的方案

    在今天互联网快速发展的时代,实时聊天功能成为了很多应用必不可少的一部分。而在线聊天室就是这样一种应用,它可以实现用户之间的实时聊天功能,同时也具有广泛的应用场景,如社交网站、在线游戏、客服系统等。

    1 年前
  • Hapi 框架的自动化测试工具 ——CodeceptJS 使用说明

    前言 在开发 Web 应用程序时,自动化测试是一个必不可少的步骤。它确保了软件质量和减少了手工测试的繁琐工作。在 Hapi 框架中,CodeceptJS 是一个强大的自动化测试工具,它可以帮助你轻松地...

    1 年前
  • Nginx 使 server-sent-events 更具容错性

    Nginx 使 server-sent-events 更具容错性 在现代 web 应用中,server-sent-events(SSE)是一种通信协议,它允许服务器向客户端推送数据,无需客户端请求。

    1 年前
  • 理解 JavaScript Promise 中的 Deferred

    在 JavaScript Promise 中,Deferred 是一个很重要的概念。本文将会对 Deferred 进行详细的解释,并给出代码示例作为参考。 什么是 Deferred Deferred ...

    1 年前
  • 如何调试 Node.js 应用程序

    Node.js 已成为 web 开发中广泛使用的一种技术,然而在开发和调试过程中经常会遇到一些问题,本文将详细介绍如何使用 VS Code 调试 Node.js 应用程序,并提供实用的示例代码,以帮助...

    1 年前
  • Fastify ORM 整合指南

    Fastify ORM 是一个快速、轻量级的对象关系映射库,用于 Node.js 的面向对象编程。它提供了一组方便的 API,使得开发者能够更加轻松地操作数据库,并且还能够提高代码的可读性和可维护性。

    1 年前
  • Web Components 对前端架构设计的思考

    随着 Web 技术的不断发展,前端开发也在不断地向更加复杂、高级的方向发展。而 Web Components 技术的出现,为前端架构设计带来了更多的可能性和优化空间,本文将会着重介绍 Web Comp...

    1 年前
  • Flexbox 实现三列等分布局的终极方案

    引言 在前端开发中,我们经常会面临布局问题,其中最为常见的问题就是如何实现三列等分布局。在以往的开发中,我们可能需要使用 float 或者 inline-block 单独设置每个元素的宽度来完成这种布...

    1 年前
  • React 父组件传递 props 给子组件不更新问题解决方法

    问题描述 在 React 组件中,父组件通过 props 把数据传递给子组件,但是当父组件的 state 改变时,子组件不会自动更新,依然显示原来的数据。这是一个常见的问题,如果不处理,会给应用带来很...

    1 年前
  • Koa.js 中如何使用 JSON Web Token 处理 Token 鉴权

    在 Web 开发中,用户认证和授权是非常重要的安全措施之一。在过去,通常使用 Cookie 或 Session 进行用户认证和授权,但是随着 Web 应用的变得越来越复杂和分布式化,引入 Token ...

    1 年前
  • ESLint 无法校验 ES6 中类的语法

    ESLint 无法校验 ES6 中类的语法 在前端开发中,我们经常使用ESLint来约束代码规范和代码质量。但是,当我们使用ES6中的类语法时,我们可能会发现ESLint无法对其进行校验。

    1 年前
  • 解决 Mocha 测试套件在 Windows 系统下报错的问题

    前言 Mocha 是一个非常流行的 JavaScript 测试框架,它可以帮助开发者编写可靠的单元测试和集成测试。然而,在 Windows 系统下使用 Mocha 时,可能会遇到一些奇怪的问题和错误。

    1 年前
  • 如何在 Angular 中使用 Tailwind CSS

    在前端开发中,使用 CSS 框架可以帮助我们快速构建页面,提高开发效率。Tailwind CSS 是一款目前增长迅速的 CSS 框架,它提供了一系列实用的 UI 组件和 CSS 类,可以轻松实现自定义...

    1 年前
  • ES11 (2020) 升级指南:如何迁移旧代码并应用新特性?

    ES11是ECMAScript的最新版本,也称为ES2020。在ES11中新增了很多语言特性,包括BigInt、Promise.allSettled、String.prototype.matchAll...

    1 年前
  • Webpack4.x 与 Babel7.x 如何配合使用

    前言 前端开发中,我们经常需要编写 ES6+ 语法的代码,但是不同的浏览器对于 ES6+ 的支持不一致,因此需要将 ES6+ 代码通过 Babel 转译为 ES5 代码来保证兼容性。

    1 年前
  • 解决 RxJS 对内存的泄漏问题

    RxJS 是前端开发中广泛使用的响应式编程库。但是在实际的应用过程中,RxJS 可能存在内存泄漏的问题。这篇文章将介绍如何检测和解决 RxJS 的内存泄漏问题。 内存泄漏的定义 内存泄漏通常是指程序中...

    1 年前
  • SASS 中媒体查询 @ content 规则的使用方法

    SASS 中媒体查询 @ content 规则的使用方法 SASS 是一种流行的 CSS 预处理器,它的主要目的是简化 CSS 的编写。SASS 中媒体查询 @ content 规则是一种非常有用的技...

    1 年前
  • 使用 PM2 启动 Node.js 应用程序遇到 "node: not found" 错误的解决方案

    PM2 是一个流行的 Node.js 进程管理器,可以用来启动、监控和管理 Node.js 应用程序,但是有时候在使用 PM2 启动 Node.js 应用程序时会遇到 "node: not found...

    1 年前
  • Jest 测试中使用 API Mock 的最佳实践

    在前端开发中,API 是不可或缺的一部分。API Mock 是一种常见的测试方式,通过模拟 API 响应数据,可以帮助我们减少对后端 API 的依赖,加快测试速度和降低测试成本。

    1 年前
  • ES10 中 Array.flatMap() 方法的理解与区别

    背景 随着前端技术的不断发展,JavaScript 在 ES6、ES7、ES8 等版本中也不断推出新的 API 以适应新的应用场景。在 ES10 中,Array 就新增了一个方法:flatMap(),...

    1 年前

相关推荐

    暂无文章