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

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日

相关文章

  • JavaScript attributes对象

    JavaScript attributes对象是用于获取或设置HTML元素属性的一个对象。它包含了属性的名称和值组成的键值对。通过attributes对象,我们可以获取或设置元素的属性。 让我们看看以下代码示例: <!DOCTYPE html> <html> <head> <title>JavaScript A…

    Web开发基础 2023年3月30日
    00
  • JavaScript 模拟用户单击事件

    JavaScript 模拟用户单击事件的具体攻略可以分为以下几个步骤: 步骤一:了解单击事件 单击事件是指用户在网页上单击鼠标时触发的事件,我们需要先了解一下如何绑定和触发单击事件。在JavaScript中,可以通过addEventListener方法来绑定事件,如下所示: var button = document.getElementById(‘myBu…

    JavaScript 2023年6月11日
    00
  • JavaScript ES6中的简写语法总结与使用技巧

    JavaScript ES6中的简写语法总结与使用技巧 ES6是JavaScript中的一个重大升级版本,它增加了不少新特性,其中包括一些语法的简写,可以减少开发者的代码输入量,并提高代码的可读性。下面就来总结一下JavaScript ES6中的简写语法及其使用技巧。 1. 变量声明 ES6引入了let和const来替代原来的var。同时还加入了一些新的变量…

    JavaScript 2023年5月19日
    00
  • 分享几个JavaScript运算符的使用技巧

    让我来详细讲解一下“分享几个JavaScript运算符的使用技巧”的攻略。 标题 分享几个JavaScript运算符的使用技巧 代码块 在 JavaScript 中,有很多运算符可以帮助我们进行数据处理和逻辑运算。下面我就来分享几个常用的运算符,并介绍一些使用技巧。 一、 空值合并运算符 空值合并运算符 ?? 用于确定变量或表达式是否为未定义或空值(null…

    JavaScript 2023年5月27日
    00
  • 微信小程序 自己制作小组件实例详解

    下面是关于“微信小程序自己制作小组件实例详解”的攻略: 什么是小组件 小组件是一种自由组合,具备特定功能的组合、封装后的组件库。作为组件库的一部分,一个好的小组件应该能够在各种应用场景下有良好的兼容和复用性。 制作小组件 1.创建小组件 使用命令行创建小组件(假设小组件名字为 my-component): # 使用命令行创建自定义组件 $ miniprogr…

    JavaScript 2023年6月11日
    00
  • 使用bootstrap validator的remote验证代码经验分享(推荐)

    这里是使用Bootstrap Validator的Remote验证代码经验分享攻略。 什么是Remote验证 Bootstrap Validator提供了Remote验证来检查输入是否已经存在于数据库中,而不是使用静态的规则来验证。 在其最基本的形式中,Remote验证使用AJAX请求来检查输入是否已经存在于数据库中,并根据结果来反馈验证的状态。 开始使用R…

    JavaScript 2023年6月10日
    00
  • Javascript Math floor() 方法

    JavaScript中的Math.floor()方法用于将一个数向下取整,返回小于或等于给定数字的最大整数。以下是关于Math.floor()方法的完整攻略,包括两个示例。 JavaScript Math对象的floor()方法 JavaScript Math对象中的floor()方法用于将一个数向下取整,返回小于或等于给定数字的最大整数。 下面是floor…

    JavaScript 2023年5月11日
    00
  • JavaScript立即执行函数用法解析

    JavaScript中的立即执行函数是指在定义后立即执行的函数。它的语法是使用函数表达式或函数声明的方式定义一个函数,然后紧接着使用括号将其包起来,并在后面添加括号,如下: // 函数表达式方式 (function() { // 立即执行的代码 })(); // 函数声明方式 (function foo() { // 立即执行的代码 })(); 这种立即执行…

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