PWA介绍及快速上手搭建一个PWA应用的方法

yizhihongxing

PWA(Progressive Web App)是一种新型的WEB应用程序模型,它融合了 Web 和 Native 应用的优势。在移动端可更好的解决应用安装、流量消耗、离线访问、消息推送等问题,能够将您的网站变成一个类似于原生移动应用的东西。

本文将介绍PWA的相关知识,并提供快速上手的搭建PWA应用的方法。

PWA介绍

PWA其实是一种思路,而不是某个具体的技术,因此也没有一个严格定义。PWA 可以看做是提供一种能像原生应用那样让 Web 应用具备“可以离线浏览”、“消息推送”以及“添加到桌面”等特性的技术方案。PWA主要由 App Shell、Service Worker和Web App Manifest 组成。

App Shell

App Shell 是指 Web App 应用的骨架部分,是 Web App 的核心架构和内容,相当于是一个很轻量的原生应用。第一次访问应用时,浏览器会下载 App Shell,并将其缓存到本地,以便下次访问时更快地呈现页面。同时,App Shell 负责设置应用的样式,这样应用在第一时间就天然地获得了原生应用般流畅的体验。

Service Worker

Service Worker 是一个完全脱离页面的 JavaScript 运行环境。它可以在后台进行运行,这样就可以监控请求、访问缓存等,从而提供离线访问的能力。

通过 Service Worker 可以将相应的资源缓存下来,以便用户离线浏览时可以被直接调用,从而提高页面的访问速度和离线访问的能力。另外,Service Worker 还可以用来进行消息推送,这样可以在不打开页面的情况下通知用户。

Web App Manifest

Web App Manifest 是一个 JSON 文件,它提供了应用的相关信息,包括应用名称、图标图像、主题颜色等,以及应用在添加到桌面后显示的样式。

快速上手搭建一个PWA应用

接下来,我们将讲解如何手动搭建一个 PWA 应用。 首先,我们需要一个 Web 应用,可用 Visual Studio Code 编写,在本机搭建一个基本的 Web 应用:

  1. 使用npm init命令初始化项目环境;
  2. 使用npm install http-server -g命令安装http-server服务器;
  3. 在项目根目录下,新建一个index.html文件,添加以下代码:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello PWA</title>
    <link rel="manifest" href="./manifest.json">
  </head>
  <body>Hello PWA</body>
</html>
  1. 将以下代码复制到项目根目录下的manifest.json文件中:
{
  "name": "Hello PWA",
  "short_name": "HelloPWA",
  "theme_color": "#1976d2",
  "background_color": "#ffffff",
  "display": "standalone",
  "icons": [
    {
      "src": "/img/icons/256x256.png",
      "sizes": "256x256",
      "type": "image/png"
    }
  ]
}

其中name属性表示应用名称,short_name表示两个或更少的字符应用名称,theme_colorbackground_color分别表示应用的主色调和背景色,display属性可以使用的值有:fullscreen, standalone, minimal-uibrowser

  1. 在项目目录下新建一个img/icons/256x256.png文件,这个文件对应于应用在桌面上的图标。
  2. 在项目目录下,运行http-server命令,开启静态文件服务器,并访问http://localhost:8080。在 Chrome 浏览器下开发者模式中找到“Add to Homescreen”按钮将其加入到桌面。

至此,您已经成功创建了一个 PWA 应用,可以通过离线访问或者在桌面上打开并享受沉浸式、原生应用级别的用户体验了。

示例说明

示例1

为了更好的示例演示,我们以一款新闻类 App 为例,实现一些比较实用的性能和使用效果。

1. 建立 App Shell

首先,建立一个 APP Shell。App Shell 是一个简单的骨架结构,相当于提前用于存放与页面实际内容无关的组件 以及设置通用样式和脚本,可以在首次加载后缓存 Web 应用程序,这样可以更快的响应用户操作。

2. 使用 Service Worker(PWA核心)

通过以上基础结构做好后,我们就要在根目录开启 Service Worker,使我们的程序具备一些 PWA 的特性。

注:Service Worker 在根目录开启,于是在所有页面的请求中生效,就等于我们可以在 SW 服务器中操作所有相关请求。因此,我们有 “拦截” 请求的能力,可以处理请求,打造 PWA App 的离线使用等特性。

3. 添加 Web App Manifest

接着,添加 Web App Manifest。这个清单文件描述了关于 App 的元数据,就是一下脚手架中的 package.json 或者 gruntfile.js 之类。清单指定了应用程序的名称、简短名称、主题色、启动URL、应用程序预期用途或者对浏览器 UI 的影响等。

4. 缓存与离线访问

PWA 最强大的地方是离线访问。在上面的示例中,我们已经实现了根据缓存判断是否需要重新拉取,如果缓存已过期,则触发从服务器重新拉取数据,缓存到 Cache 中再响应请求的流程。

5. 添加离线消息推送(Service Work Tips)

在网络上有一种原生 app 所具有的能力,就是推送通知,使应用更具可用性 或提高用户忠诚度。在 WebPack Service Worker 中同样提供了这样一个机制。

示例2

为了进一步说明 PWA 的强大之处,我们可以在 Service Worker 中加载像 Jacklsiting 开发的库如 Workbox,以在 Service Worker 使用 Workbox 模块,大大降低开发学习门槛,让我们通过类似于页面路由的方式约定不同的内容缓存策略,进一步优化我们的 PWA App。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PWA介绍及快速上手搭建一个PWA应用的方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • jQuery使用ajax跨域请求获取数据

    下面详细讲解“jQuery使用ajax跨域请求获取数据”的完整攻略。 1. 什么是跨域请求? 跨域请求指的是向一个不同域名(或者协议、端口)的服务器发起请求,这种请求是不被允许的。比如我们的web页面在访问http://www.example.com的时候,去请求http://www.baidu.com就属于跨域请求。 2. jQuery ajax 跨域请求…

    JavaScript 2023年6月11日
    00
  • JS日历 推荐

    作为网站的作者,我非常乐意为大家介绍“JS日历 推荐”这个主题的完整攻略。在本文中,我将详细讲述该主题的使用方式、配置参数以及常见问题解决方案,并且提供两条示例说明,帮助大家更好地理解和掌握该主题的应用方法。 一、 使用方式 下载并引入日历组件库 <script src="https://cdn.jsdelivr.net/npm/pikada…

    JavaScript 2023年5月27日
    00
  • JS数据类型分类及常用判断方法

    JS数据类型分类及常用判断方法 数据类型分类 JavaScript有7种数据类型,分别为: 原始类型(primitive): undefined null boolean number string symbol(ES6新增) 引用类型(object): Object Array Function Date RegExp Error Math JSON 常用…

    JavaScript 2023年6月10日
    00
  • js实现下载(文件流式)方法详解与完整实例源码

    首先,需要明确一点,下载文件大多数情况下需要后端接口进行配合,前端只需要向后端发起下载请求即可。本文介绍的js实现文件下载,是通过向后端接口发起请求获取文件流,再通过js实现文件的下载。 如何下载文件 实现文件下载的方式有很多,其中一种较为简单的方式是使用a标签进行下载。例如: <a href="http://example.com/file…

    JavaScript 2023年5月27日
    00
  • Javascript删除指定元素节点的方法

    删除指定元素节点的方法在Javascript中有多种实现方式,下面给出其中两种示例说明。 方法一:使用removeChild()方法删除节点 通过使用removeChild()方法可以删除指定的元素节点。具体实现步骤如下: 获取要删除的节点; 获取要删除节点的父节点; 调用父节点的removeChild()方法,删除指定的子节点。 示例代码如下: // 获取…

    JavaScript 2023年6月10日
    00
  • JavaScript常见鼠标事件与用法分析

    下面是完整的“JavaScript常见鼠标事件与用法分析”的攻略,内容包括:鼠标事件介绍、事件类型、事件对象、示例说明、注意事项等。 鼠标事件介绍 在Web页面中,鼠标事件是非常常见和重要的一种事件类型。网页开发人员可根据鼠标事件来实现各种交互效果,如单击链接跳转、鼠标悬停弹出提示、拖拽等效果。在 JavaScript 中,使用鼠标事件可以在用户与页面交互的…

    JavaScript 2023年6月10日
    00
  • javascript实现无缝上下滚动特效

    下面是详细的Javascript实现无缝上下滚动特效的攻略: 1. 准备工作 在HTML中先定义一个滚动区域的div,指定其宽度和高度,并将其设置为相对定位。在滚动区域内部创建一个ul列表,用于存放滚动项。需要注意的是,ul列表的高度应该设置成比滚动区域高出至少一倍以上,以便可以无缝滚动。 2. 实现滚动 使用Javascript中的setInterval方…

    JavaScript 2023年6月11日
    00
  • JavaScript中的运算符讲解

    JavaScript中的运算符讲解 JavaScript中的运算符用来执行各种算术和逻辑操作。JavaScript支持多种运算符,包括算术、比较、逻辑、条件、位运算符等。本篇文档将介绍JavaScript中的各种运算符,并通过示例说明其使用方法和效果。 算术运算符 算术运算符用于执行算术操作,如加、减、乘、除等。JavaScript中的算术运算符包括加法运算…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部