从零搭建一个PWA应用需要了解哪些知识

news2024/11/15 13:48:53

在国内由于小程序的风生水起,PWA 应用在国内的状况一直都不是很好,PWA 和小程序有很多的相似性,但是 PWA 是由谷歌发起的技术,小程序是微信发起的技术,所以小程序在国内得到了大力的扶持,很快就在国内技术界开花结果。

在这里插入图片描述

这里想讨论下在去创建自己的第一个 PWA 应用前,什么是 PWA 应用,有哪些核心的技术?

先搞清楚 PWA

PWA 全称渐进式 Web 应用(Progressive Web App)是一个使用 web 平台技术构建的应用程序,但它提供的用户体验就像一个特定平台的应用程序。

它像网站一样,PWA 可以通过一个代码库在多个平台和设备上运行。它也像一个特定平台的应用程序一样,可以安装在设备上,可以离线和在后台运行,并且可以与设备和其他已安装的应用程序集成。

对于用户来说,PWA 应用最大的变化在于,改变了以往需要下载安装包、等待安装的过程,这类应用很好地体现了「用完即走」的理念,与传统安装应用相比,PWA 应用具备的优势是:无需安装、更轻量、不占用大量空间,只需要一款支持 PWA 应用的浏览器,就可以轻松添加 PWA 应用,具备了跨平台使用的特性。

如果想要更为直接的体验,可以直接访问下谷歌官方上线的 PWA 体验 demo:squoosh.app ,算是 PWA 技术实际应用的典范,整个页面的大小都只有41K。

在这里插入图片描述

PWA 的技术核心

PWA 的技术核心可以分为四个部分:

  • 桌面图标 Web App Manifest :将网站添加到桌面,让 PWA 应用的访问使用更类似 native 的体验。
  • 离线访问 Service Worker :指定一些静态资源进行离线缓存。
  • 消息推送 Push Api & Notification Api :让 PWA 应用可以进行消息的推送和通知。
  • 应用壳及应用结构 App Shell & App Skeleton:应用的基本结构。

1、桌面图标 Web App Manifest

Manifest File 是一个配置 JSON 文件,里面包含 PWA 的信息,例如安装到主屏幕上显示的图标、Web 应用的名称和背景色。
如果 Manifest File 存在的话,Chrome 等浏览器会自动激活用于引导用户安装 PWA 应用的提示“添加到主屏幕”。
在这里插入图片描述

如果用户同意,图标就会添加到主屏幕并安装 PWA。

关于如何创建 Manifest File 这里放一个示例:

{
  "name": "Progressive Selfies",
  "short_name": "PWA Selfies",
  "icons": [
    {
      "src": "/src/images/icons/app-icon-192x192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "/src/images/icons/app-icon-512x512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": "/index.html",
  "scope": ".",
  "display": "standalone",
  "background_color": "#fff",
  "theme_color": "#3f51b5"
 }

然后需要给浏览器传递关于图标的信息,加一个连接的 tag 到 index.html。

<link rel=”manifest” href=”/manifest.json”>

2、离线访问 Service Worker

Service Worker 是一段 JavaScript,主要用于浏览器和网络之间的代理。Service Worker 支持推送通知、后台同步、缓存等。

在这里插入图片描述

这里主要讨论的核心功能是允许 PWA 拦截和处理网络请求。另外一个让人觉得靠谱的原因是,允许通过利用缓存来支持离线访问,这样能够使开发人员能够控制用户的体验。

3、消息推送 Push Api & Notification Api

消息推送 API 和通知 API 是两个独立的 API,但他们两个可以很好地协同工作,消息推送用于将新内容从服务器传递到应用,这个时候是无需客户端干预的。

官方文档 demo:

self.addEventListener("push", (event) => {
  if (!(self.Notification && self.Notification.permission === "granted")) {
    return;
  }

  const data = event.data?.json() ?? {};
  const title = data.title || "Something Has Happened";
  const message =
    data.message || "Here's something you might want to check out.";
  const icon = "images/new-notification.png";

  const notification = new self.Notification(title, {
    body: message,
    tag: "simple-push-demo-notification",
    icon,
  });

  notification.addEventListener("click", () => {
    clients.openWindow(
      "https://example.blog.com/2015/03/04/something-new.html",
    );
  });
});

写到最后

PWA 在国内不少国民 App 中都有应用,例如淘宝、豆瓣等,如果应用合理也有非常丝滑的体验,其实推荐有一些创新业务的企业或者对于小程序技术不感兴趣的开发同学都可以尝试起来。

而小程序则更适合在微信、支付宝等生态中构建社交、生活服务和商业应用,利用平台的社交传播和原生能力。

但是现在小程序的这种限制逐渐得到突破,借助小程序容器技术能够做到小程序脱离微信、支付宝等平台运行在自己的 App 中,例如集成 FinClip SDK 或 mPaaS 即可让自己的 App 获得像微信一样的小程序运行能力,实现一端开发多端的运行。

当然相信经过持续的技术发展,还会有更多的技术创新生长在 PWA、小程序之上,我们的开发及用户的使用还会得到持续的改进。

PWA 和小程序都是推动现代应用开发模式发展的重要里程碑,推动了移动应用的创新。你会怎样进行选择?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker制作java项目镜像

docker制作java项目镜像 环境步骤Dockerfile 运行容器 环境 当前使用win10安装的docker win10安装Docker参考文章 步骤 将Dockerfile文件和jar包放在同一个目录下 编写Dockerfile文件 Dockerfile #设置镜像基础: jdk8-jre , 比jdk内存小 FROM java:8-jre #维护人员信息 MA…

众和策略可靠吗?dde大单净量可信吗?

可靠 DDE大单净量是指股票成交中的单笔生意量较大且净买入或净卖出的数量。这个方针在股票商场中被广泛运用&#xff0c;尤其是在技术剖析中。但是&#xff0c;有时候人们会怀疑DDE大单净量的可信度&#xff0c;下面我们从几个角度进行剖析。 首要&#xff0c;有些人以为DDE大…

持续性输出,继续推荐5款好用的软件

​ 分享是一种神奇的东西&#xff0c;它使快乐增大&#xff0c;它使悲伤减小&#xff0c;坚持分享一些好用的软件给大家&#xff0c;今天继续为大家带来五款好用的小软件。 1.文件解锁工具——Unlocker ​ Unlocker是一款解决Windows文件被占用无法删除或重命名的问题的小工具…

mysql数据库迁移达梦

迁移前准备&#xff1a; 授权给要迁移的数据库的用户&#xff0c;例如此时是 mysql迁移到达梦里面&#xff0c;所以得把你连接这个mysql数据库的这个用户root授权&#xff0c; CREATE USER root IDENTIFIED BY1123456;GRANT ALL privileges ON *.* TO rootroot WITH GRANT OPTI…

微信小程序菜单导航选中自动居中

菜单导航选中自动居中 示例库 代码片段

Qt之自定义事件QEvent

在Qt中,自定义事件的步骤大概如下: 1.创建自定义事件,自定义事件需要继承QEvent 2.使用QEvent::registerEventType()注册自定义事件类型,事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前是预留给系统的事件 3.使用sendEvent() 和 postEv…

迅为RK3399开发板Android 系统--打印级别设置(printk日志等级设置)

在内核源码 include/linux/kern_levels.h 文件中预定义了内核 log 等级&#xff0c;一共有八个等级&#xff0c;从 0 到 7&#xff0c;优先级依次降低&#xff0c;如下所示&#xff1a; // include/linux/kern_levels.h #define KERN_SOH "\001" /* ASCII Start Of…

Khronos: 面向万亿规模时间线的性能监控引擎建设实践

作者&#xff1a;余文清 阿里巴巴智能引擎事业部自研的 Khronos 系统是阿里内部接入规模最大的性能数据存储引擎。Khronos 支持动态生命周期的存储计算分离架构&#xff0c;采用 schemaless 的 data model 设计&#xff0c;在万亿数据规模下为业务提供易用、高效、经济的服务&a…

自媒体创业秘籍:视频号视频下载助你打造热门账号

​自媒体创业者们都知道&#xff0c;视频号已经成为拓展影响力和吸引更多用户的热门平台之一。然而&#xff0c;要想在这个竞争激烈的市场中脱颖而出&#xff0c;并打造一个热门账号&#xff0c;你需要掌握一些技巧和秘籍。在本文中&#xff0c;我将分享关于视频号视频下载的方…

ModelSim【紫光】

这软件是查看波形的。 如果ModelSim频繁弹窗&#xff0c;关闭电脑杀毒软件和电脑管家。 尤其是荣耀管家

Python学习8

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

UMMKD

方法 对于“Y”形模型&#xff0c;绿线之前的层是分开的&#xff0c;绿线之后的层在模态之间共享。对于“X”形模型&#xff0c;第一条蓝线之前和第二条蓝线之后的层是分开的&#xff0c;蓝线之间的层在模态之间共享 作者未提供数据

shell脚本中循环语句(极其粗糙版)

分界点&#xff1a;以下内容需要更改&#xff0c;正常放假更改 循环语句&#xff1a; 循环&#xff1a;重复执行一段代码的结构&#xff0c;通过循环&#xff0c;可以在满足一定的条件情况下&#xff0c;多次的执行相同的代码 循环包括&#xff1a;循环体以及循环条件&#…

第二证券:macd指标如何使用?

MACD方针是一种用于技术分析的方针&#xff0c;被广泛应用于股票、期货和外汇市场。本文将从什么是MACD&#xff0c;MACD的原理&#xff0c;怎样运用MACD和MACD的优缺点四个方面分析MACD方针怎样运用。 一、什么是MACD MACD是Moving Average Convergence Divergence的缩写&…

第二证券:股指预计维持蓄势震荡格局 关注证券、计算机设备等板块

第二证券指出&#xff0c;增发1万亿国债、自2000年以来首度年内调整预算传递财务积极发力的信号&#xff0c;估量会对四季度及明年GDP将产生显著带动作用&#xff0c;有利于股市整体情绪的提振。对于债市而言&#xff0c;在支撑信贷增加和实体经济批改的目标下&#xff0c;我们…

在线客服系统源码 客服系统源码

在线客服系统源码 客服系统源码 框架&#xff1a;Thinkphp5workerman&#xff0c;环境&#xff1a;nginxphp7.3mysql5.6 多商户客服、不限坐席、独立系统--数据存储自己服务器上&#xff0c;支持开启SSL、支持离线对话。 新款在线客服系统全开源无加密&#xff1a;多商户、国…

IN动态|小达智能科技领导一行莅临英码科技调研,携手打造时代特色的AI教学平台

近日&#xff0c;小达智能科技CEO何方明领导一行莅临英码科技进行走访调研&#xff0c;我司业务中心总监刘力搏及电商运营经理潘怡霏等一同热情接待&#xff0c;并展开深入的座谈交流。 01 广州小达智能科技有限公司 广州小达智能科技有限公司是于2023年融合砺锋信息科技有限公…

探索 VChart 图表库:简单、易用、强大、高性能、炫酷的可视化利器

声明&#xff1a; 本文标题由ChatGpt 生成 导读 VChart不只是开箱即用的多端图表库&#xff0c;更是生动灵活的数据故事讲述者。 VChart是字节跳动开源可视化解决方案 VisActor 的核心图表组件库。它基于可视化语法库VGrammar和渲染引擎VRender进行封装&#xff0c;在满足数据…

android 如何判断已配对的蓝牙是否打开了互联网访问开关

最近遇到一个需求&#xff0c;要判断已配对的蓝牙是否打开了互联网访问的开关。 经查看源码&#xff0c;得出以下方法。 1. 首先要判断蓝牙是否打开 2. 已打开的蓝牙是否已配对 3. 验证是否真正打开 /*** 是否打开蓝牙互联网访问*/SuppressLint("MissingPermission&quo…