概述

如果您是Web开发人员,您可能已经了解渐进式Web应用程序(PWA)或已经实现了自己的应用程序。 如果您不熟悉,本文将深入概述渐进式Web应用程序的实现原理,以及它们在现代Web开发中的重要程度。

渐进式Web应用程序自推出就被定义为响应式、可独立连接、APP般轻盈、安全、模块化、高度自定义、免安装、打开即用的Web体验。这是一个冗长的描述,如果用一句话简要的概括:我认为PWA只是一个具有良好用户体验的Web应用程序,仅此而已。

为了更清晰地理解这个定义,让我们来一探其核心原则。在此之前,你可能已经熟悉了其中的一些,但我保证,你并非全部了解。

渐进式 Web 应用的原则

Responsive(响应式)

对于Web开发人员,这意味着应用程序中显示的元素在不同的屏幕大小上可自行缩放,以便适应屏幕尺寸。对于设计人员,这意味着更高的性能,比如应用程序是否快速响应用户交互、事件、页面加载等。构建高性能的应用程序是产品最核心的竞争力,渐进式Web应用程序自然也同样遵循这一法则,尤其是针对 Web开发人员方面。响应式 Web 应用程序在任何设备上都具备同样良好的适应能力,无论屏幕是宽、窄、短,甚至是曲面,应用程序布局都会自适应,满足用户的最佳使用体验。

Connectivity-independent (独立连接)

由于我们讨论的是Web应用程序,因此在应用程序生命周期的某个时刻一定需要网络连接,特别是首次访问应用程序时。当网络不可用或速度太慢时,应用程序应做到不影响用户体验,即不应向用户显示空白页面或400错误,这在PWA出现以前难以做到,但PWA利用浏览器的存储机制使这成为可能。

App-like(app的样式)

我认为“原生app-like”是描述这一原则的最好方式,即本地化应用程序的外观和感觉就像是用于使用外部设备,某些应用程序专门针对iOS或Android等平台构建,然而之前的Web应用程序则无法提供相同的体验,尤其是在移动设备上。 PWA则不同,渐进式Web应用程序旨在提供所有设备类似的使用体验,用户可以从手机切换到笔记本电脑,在类似的UI下,轻松完成相同的任务。

Fresh (不断更新)

我想把它称为A.F.A.P - 应用程序中的数据应尽可能保持最新。如果新数据可用且与客户端相关,则需要使用最新数据更新应用程序。管理网络请求和浏览器存储对于提供出色的用户体验和在客户端上保持最新内容至关重要。

Safe (安全第一)

安全第一!如果应用程序不能保证数据的安全性,应用程序有什么用处?市场大多数 Web 应用程序中都包含了只应为通信方所知的客户敏感信息。因此,保护应用程序中的隐私数据是必要的。PWA采取了简单而有效的方式:使用HTTPS协议为网络流量添加一层安全防护。

Discoverable (可发现)

应用程序应该很容易在网上/应用商店中找到,这就是应用程序的可发现性。如果搜索引擎找不到应用程序,将怎样发掘潜在用户?应用程序搜索清单可以提供帮助。它在识别浏览器的应用程序方面起着重要作用,包含了有关应用程序的信息,即名称、作者和说明。应用程序搜索清单同样有助于识别安装在其设备上的PWA。

Re-engageable (可重用)

可重复使用的应用程序可以发送推送通知来拉回用户。目的是让用户知道应用程序推出了一些他们可能感兴趣的更新点。我们习惯于智能手机和原生移动应用程序,但浏览器也通过Push和Notification API支持这一特点。

Installable (可安装)

渐进式Web应用程序可以直接安装到移动设备的主屏幕上。这主要是移动浏览器功能,使用Chrome,您也可以在桌面上执行此操作。 iOS Safari也支持此功能,因此如果你有iPhone,你可以加入PWA阵营。 安装Web应用程序真的很酷,您无需通过App Store或Google Play Store等市场下载应用程序。只需访问该网站,点击“添加到主屏幕”选项,该应用程序将立即显示在您的主屏幕上。

Linkable (可链接)

可链接的Web应用程序是可共享的,因此托管在专用域上的应用程序不适用。 您只需要一个URL即可。

创建渐进式Web应用程序

上述原则在实践中如何实现?与标准Web应用程序相比,创建PWA只需要三个基本要求:

  1. 通过HTTPS提供Web应用程序

  2. 添加应用程序清单文件

  3. 使用服务器

HTTPS是现代Web应用程序的基本协议,渐进式Web应用程序也不例外。

应用程序清单是一个JSON文件,其中包含有关应用程序的元数据。它只提供基本信息。在Android应用程序中,清单文件要复杂得多,可能需要在整个应用程序开发过程中进行更改。 Web应用程序清单涉及较少,并且在创建后不需要经常更新,因为它们不包含配置参数或依赖项。

创建渐进式Web应用程序的最后一步是添加服务器。奇迹发生的地方是它启用了离线功能。对于PWA来说,服务器只是另一个JavaScript文件 - 一个非常强大的JavaScript文件。它实际上在浏览器中的一个单独的线程上运行,因此服务工作线程上的执行不会中断主应用程序线程。这使开发人员可以灵活地通过并发性创建更好的用户体验。服务器可以处理网络请求/响应和缓存。从主线程中删除此工作将应用程序逻辑与数据管理和网络相关的操作分开。

如您所见,这里的大多数渐进式应用都涉及服务器实现。但在实现之前,必须考虑应用程序的体系结构。

PWA应用程序结构

应用程序shell是描述应用程序基础结构的概念。它包含您的应用程序需要运行的所有静态文件。在Web开发的上下文中,这将包括HTML,CSS,JavaScript和图像文件。

内容是可以在应用程序的整个生命周期中更改的数据。它被排除在应用程序shell之外,因为它是动态的,并且在加载应用程序时可能会过时。它通常通过API服务公开,易于查询。需要在应用程序中管理此内容,以确保根据请求提供最新鲜的内容。 服务器承担此责任。

在首次加载应用程序时,应缓存应用程序shell文件,以便应用程序可以在没有网络连接的情况下工作。

一个好的PWA将避免显示此屏幕出现:

当页面未加载时,用户将完全脱离应用程序。显然,与网络相关的问题会影响用户体验,但不应该让用户远离应用程序。这个想法类似于原生体验,即使应用程序中显示空白屏幕,PWA也可以让用户参与应用程序。为了在网络较慢时让用户保持参与,您可以使用动画或提供具备视觉反馈的客户端交互,就像带有小拼图或3D交互模型的刷新按钮一样简单。要有创意!

使用应用程序shell模型的一个缺点是其性能。它确实减慢了初始加载时间;但是,这可以改善。要减少加载应用程序shell文件所需的时间,您可以尝试缩小代码(以减小文件大小)、捆绑文件(以最小化网络请求的数量)、删除未使用的代码。您可以在需要时将此删除的代码发送给客户端。这将根据要求而有所不同。

这里描述的架构非常常见。如果您已经开发了其他平台的应用程序,您可能会认识到类似的设计结构。例如,需要访问网络的移动应用程序遵循类似的方法与服务器进行通信。通常有一些Factory类处理网络请求和响应。 Factory类提供了一个抽象层,如果异步生成,则效果最佳。应用程序逻辑不必等待请求。它可以允许用户继续并在请求完成时通知他们,可以通过分离数据访问实用程序和UI逻辑来简化测试。

使用App Shell模型是一个很好的起点,但它不是渐进式Web应用程序的要求。如果您有现有的应用程序,则可以评估应用程序的哪些部分使用最多,并优化初始加载。如果95%的用户群仅使用25%的应用程序,那么仅下载和缓存25%的应用程序(最常用的应用程序)可能最有意义。用户可以根据需要,选择下载和缓存其他部分,这完全取决于用户与您应用程序的交互方式。

服务请求

服务请求的实现因应用程序而异,但在应用程序中开始使用它们时应该了解一些事项。之前,我提到服务请求在浏览器中的不同线程上运行。这意味着它具有管理生命周期的能力,就像您的应用程序一样。

以下是主要的服务器生命周期事件:

1.注册

当应用程序第一次加载到浏览器中时,将发生这一请求。 这不是真正的Service Worker事件,因为此时服务不存在于浏览器上下文中,但这是重要的一步。 应用程序的主JavaScript文件应检查浏览器是否支持ServiceWorker API,如果是,请注册服务请求。注册成功后,将下载服务文件,然后开始安装。

if ('serviceWorker' in navigator) {

navigator.serviceWorker.register('./service-worker.js');

}

此代码在浏览器中注册服务请求(如果支持)。 下一个事件将在服务工作文件中处理。

2.安装

Install事件是服务器可以自己处理的第一个事件。它在注册/下载后立即启动。 完成安装后,最好开始缓存静态资源,因为安装事件只发生一次。

self.addEventListener('install', function(e) {

e.waitUntil( // waitUntil() from ExtendableEvent

caches.open(cacheName).then(function(cache) {

console.log('[ServiceWorker] Caching app shell');

return cache.addAll(filesToCache);

})

);

});

waitUntil()方法将在安装事件完成后开始执行promise。

3.激活

activate事件表示已安装服务器。 激活完成后,服务器将获得对主应用程序的控制权。 当服务变为“活动”时,它还将检查缓存的资源,并在数据过期时更新数据。 这可能需要进行额外的网络请求以进行对比,但这应该不是问题,因为应用程序不会受到请求执行的影响。 服务器还能够在处于活动状态时对Fetch,Push和Message等功能事件执行操作。

注意:注册并安装服务请求后,它将存在于浏览器中,直到用户将其删除。 当用户关闭应用程序时,不会自动删除该文件,浏览器将每24小时下载一次配置文件,以避免错误/陈旧的代码。

4.抓取

只要调用来自主应用程序的网络请求,就会触发Fetch事件。 发生这种情况时,服务器将对该请求负责。 如果请求的信息已被缓存,则服务器可以返回该信息并完全绕过网络。 或者它仍然可以发送请求,将响应与缓存的信息进行对比,并在必要时进行更新。最后,选择最适合用户的策略。

Push和Message事件也是服务器在活动时侦听的事件。 它们可用于实现推送通知和同步发送的数据。

正如您所看到的,服务器是完成大部分工作的核心,也是使Web应用程序不断发展的重要组成部分。 它为您的应用程序提供网络代理和存储管理服务,是改善Web应用程序用户体验的绝佳工具。

构建渐进式Web应用程序

尝试构建PWA。如果您已经拥有Web应用程序,那么很容易上手。我们目前正在撰写一篇描述如何使用前端开发工具包WijmoJS构建PWA的文章。同时,这也是如何将现有应用程序迁移到渐进式标准的最佳示例。

关于葡萄城:

赋能开发者!葡萄城公司成立于 1980 年,是全球领先的集开发工具、商业智能解决方案、管理系统设计工具于一身的软件和服务提供商。西安葡萄城是其在中国的分支机构,面向全球市场提供软件研发服务,并为中国企业的信息化提供国际先进的开发工具、软件和研发咨询服务。葡萄城的控件和软件产品在国内外屡获殊荣,在全球被数十万家企业、学校和政府机构广泛应用。

渐进式Web应用程序的深入概述相关推荐

  1. web应用调试工具_如何使用浏览器开发人员工具调试渐进式Web应用程序

    web应用调试工具 Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在jshan ...

  2. 渐进式web应用程序_渐进式Web应用程序简介

    渐进式web应用程序 Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在jsha ...

  3. (转)PWA(Progressive Web App)渐进式Web应用程序

    PWA 编辑 讨论 PWA(Progressive Web App)是一种理念,使用多种技术来增强web app的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送.在移动端利用标准化 ...

  4. flutter制作具有自定义导航栏的渐进式 Web 应用程序

    本文主要介绍具有自定义导航栏的渐进式 Web 应用程序 gitee github 哔哩哔哩 第一节 第二节 第三节 让我们准备我们的 - "Main.dart" 我们将整个页面分成 ...

  5. 7 个让您需要渐进式 Web 应用程序做项目开发的理由

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 自从渐进式Web应用程序(PWA)诞生以来,许多公司已开始利用这个新平台来增强用户体验并扩展新的用户群.其中 ...

  6. SAP Spartacus - Progressive Web Applications,渐进式 Web 应用程序

    原文 Spartacus 是一种基于 Angular 的 JavaScript 解决方案,主要在浏览器中运行.它是渐进式 Web 应用程序 (PWA) 之一,反过来又代表了响应式网站和应用程序的共生关 ...

  7. gwt格式_GWT的渐进式Web应用程序配方

    gwt格式 渐进或不渐进- 如果您已经设计或开发Web应用程序已有一段时间,那么您可能会遇到无数次"渐进式Web应用程序"一词,并且可能会在未来几年内使用. 您可能想知道PWA的确 ...

  8. portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

    portlet 介绍 由于世界仍在Java的掌控之中,因此我们经常定义所谓的基于组件的平台 . 我在2000年拥有OpenUSS(开放大学支持系统)的经验. 当时我有一个想法,就是开发一个可以使用组件 ...

  9. GWT的渐进式Web应用程序配方

    渐进或不渐进- 如果您一段时间以来一直在设计或开发Web应用程序,那么您可能会遇到无数次"渐进式Web应用程序"一词,并且在未来几年内可能会这样做. 您可能想知道PWA的确切定义是 ...

最新文章

  1. 世界顶级摄影作品,构图的最高境界!
  2. 低秩矩阵的应用--背景建模
  3. 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
  4. python数据分析实战:数据可视化的一些基本操作
  5. apache+php+mysql的配置(转载)
  6. 认识JSON补丁:JSON-P 1.1概述系列
  7. 一个简单的parser
  8. CompletableFuture详解~thenAcceptBoth
  9. 权限组件(6):权限分配的角色管理
  10. Spark 性能相关参数配置详解-Storage篇
  11. camera ---(6)双摄成像原理
  12. IIS故障问题(Connections_Refused)分析及处理
  13. 1.2 矩阵与线性方程组-向量空间、内积空间与线性映射
  14. jQuery应用实例4:下拉列表
  15. 记录:创建Django项目,在vscode中运行django项目
  16. 信息安全软考—— 第五章 物理与环境安全技术 学习笔记
  17. html中选择器是什么意思,css中的选择器是什么意思?
  18. 大疆自动驾驶,首次官宣即交货
  19. Python+Vue计算机毕业设计牙无忧6ayy4(源码+程序+LW+部署)
  20. 大数据、云计算、区块链、人工智能!你选择哪个?

热门文章

  1. oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)
  2. tcpdf 设置pdf尺寸_AutoCAD中施工图审查PDF、DWF批量输出并自动命名
  3. 公司--页面调用日期控件 WdatePicker日历控件使用方法
  4. html中看到php代码_如何在HTML中嵌入PHP代码
  5. 野火linux核心板原理图,野火_f429挑战者_核心板_原理图_v2 1.pdf
  6. 直播预告 | STC单车拉力组专题培训
  7. 山东赛区国赛答辩成绩公示
  8. python3.6for循环_使用parser_args值输入for循环(python3.6)
  9. c语言移数有n个整数使其,有N个整数,使其前面各数顺序向后移动M个位置,最后M个数变成前面的...
  10. python csv库,Python 中导入csv数据的三种方法