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日

相关文章

  • JS中如何比较两个Json对象是否相等实例代码

    在JS中比较两个JSON对象是否相等,可以使用深度比较(deep comparison)算法。这是一种递归地比较对象的方式,直到找到两个属性的值不同为止。 以下是比较两个JSON对象的完整攻略: 步骤1:编写比较函数 以下是一个比较两个JSON对象的函数: function compareJSON(obj1, obj2) { // Check if both…

    JavaScript 2023年5月27日
    00
  • JavaScript 时分秒时间代码(自动补零)

    关于JavaScript时分秒时间代码的自动补零,我们可以采用以下两种方式实现: 1. 使用自带方法 padStart() 该方法可以在字符串前添加指定数量的字符,从而实现自动补零。具体参考以下示例代码: // 获取当前时间 const now = new Date(); // 获取时分秒 const hour = now.getHours(); const…

    JavaScript 2023年5月27日
    00
  • 浅谈JavaScript 代码简洁之道

    下面是“浅谈JavaScript代码简洁之道”的完整攻略。 浅谈JavaScript代码简洁之道 前言 JavaScript是前端开发中最重要的一门语言之一,同时也是最常用的一门语言之一。JavaScript代码的简洁性能够极大地提高代码的可读性和可维护性,因此在开发过程中,我们应该注重代码的简洁性。下面是一些关于如何让JavaScript代码更加简洁的建议…

    JavaScript 2023年5月18日
    00
  • vue2模拟vue-element-admin手写角色权限的实现

    Vue2模拟Vue-element-admin手写角色权限的实现,可以通过以下步骤完成: 1. 安装依赖 首先需要安装以下依赖:Vue-Router(用于控制路由)、Axios(用于发送http请求),可使用如下命令: npm install vue-router axios 2. 构建基本页面布局 在Vue项目中创建相应的组件并进行基本页面布局,如Head…

    JavaScript 2023年6月11日
    00
  • javascript实现花样轮播效果

    JavaScript实现花样轮播效果攻略 轮播效果是Web开发中经常使用的交互元素,下面我们将介绍如何使用JavaScript实现花样轮播效果。 实现思路 实现花样轮播效果的主要思路是:动态的改变轮播项的位置,实现轮播效果。该实现思路可以通过列表型轮播和可视区域轮播两种方式实现。 列表型轮播 列表型轮播是将所有轮播项放在一个容器中,通过改变容器的宽度和定位属…

    JavaScript 2023年6月10日
    00
  • js脚本中执行java后台代码方法解析

    首先,需要明确一点,JavaScript脚本是运行在浏览器上的,而Java后台代码则是运行在服务器上的,两者在执行上并不直接相关。但是,我们可以通过Ajax技术来实现JavaScript与后台Java代码的通信,从而实现执行后台代码的功能。 具体步骤如下: 1.创建后台Java代码,使用Web框架(如Spring、Struts2等)来提供接口。这些接口应该能…

    JavaScript 2023年5月27日
    00
  • 一个即时表单验证的javascript代码

    下面就为您详细讲解如何编写一个即时表单验证的 JavaScript 代码。 编写 JavaScript 表单验证代码的基本步骤 获取表单的各个输入项,如输入框、单选框、多选框等,并对每个输入项都定义一个监听事件(如 onblur、onkeyup 等),监听输入内容的改变。 在监听事件中编写检验函数,该函数应当返回布尔值来表示输入项是否符合要求。可以根据不同的…

    JavaScript 2023年6月10日
    00
  • JS数字千分位格式化实现方法总结

    接下来我将为大家详细讲解“JS数字千分位格式化实现方法总结”的完整攻略。 JS数字千分位格式化实现方法总结 在开发过程中,经常会遇到需要对数字进行千分位格式化的要求。下面是两种实现方法的总结。 方法一:正则表达式实现 正则表达式是一种能够匹配字符串的强有力的工具,我们可以通过正则表达式实现数字千分位格式化。下面是示例代码: /** * 将数字格式化为千分位格…

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