Skip to content

什么是 PWA(渐进式 Web 应用)? ​

PWA,全称 Progressive Web App,是一种结合了 Web 和原生应用优势的前端技术。它通过现代 Web 技术为用户提供类似原生应用的体验,同时保持 Web 的灵活性。

1. PWA 的核心特性 ​

PWA 之所以被称为“渐进式”,是因为它可以逐步增强 Web 应用的能力,以满足不同用户和平台的需求。以下是 PWA 的核心特性:

1.1 渐进式增强 ​

即使浏览器不完全支持 PWA 的所有功能,应用仍能正常工作。支持 PWA 的浏览器则会解锁额外能力。

1.2 可安装 ​

用户可以将 PWA 添加到主屏幕,像使用原生应用一样快速访问,而不需要下载 App。

1.3 离线访问(离线优先) ​

通过 Service Worker 缓存资源,实现断网时的基本功能。

1.4 跨平台兼容 ​

PWA 运行于 Web 平台,适配任何支持现代浏览器的设备。

1.5 响应式 ​

无论是手机、平板还是桌面设备,PWA 都能自适应屏幕尺寸。

2. PWA 的技术核心&&如何构建PWA ​

实现 PWA 需要依赖几个关键技术:

2.1 Service Worker ​

Service Worker 是浏览器和服务器之间的代理,能够拦截网络请求并缓存静态资源,提升加载速度和实现离线访问。

示例:注册 Service Worker ​

javascript
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').then((registration) => {
    console.log('Service Worker 注册成功:', registration);
  }).catch((error) => {
    console.error('Service Worker 注册失败:', error);
  });
}

示例:简单的缓存策略 ​

Service Worker 可以通过监听 install 事件,将必要的静态资源缓存到浏览器中。

在安装阶段,常用的缓存策略是将关键资源加入缓存列表,确保离线状态下这些资源可用。

javascript
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('my-cache').then((cache) => {
      return cache.addAll([
        '/',
        '/index.html',
        '/styles.css',
        '/app.js',
      ]);
    })
  );
});

2.2 Web App Manifest ​

Manifest 文件定义了 PWA 的元数据(如图标、名称、启动 URL 等),使其可以被“安装”到主屏幕。

示例:manifest.json ​

json
{
  // 应用的全称,显示在启动界面或应用列表中
  "name": "My Progressive Web App",

  // 应用的简短名称,用于主屏幕图标下等空间有限的地方
  "short_name": "MyPWA",

  // 应用启动时加载的 URL,通常是首页或入口点
  "start_url": "/",

  // 定义应用的显示模式
  // 可选值:
  // - "fullscreen":全屏显示,无任何浏览器 UI
  // - "standalone":类似原生应用,隐藏浏览器导航栏
  // - "minimal-ui":显示最少的浏览器 UI(如返回按钮)
  // - "browser":普通网站模式
  "display": "standalone",

  // 启动画面的背景颜色
  "background_color": "#ffffff",

  // 定义 PWA 的主题颜色,影响地址栏或任务栏的颜色
  "theme_color": "#0078d7",

  // 定义应用的图标列表,供主屏幕、启动画面等地方使用
  // 每个图标对象包含以下字段:
  // - "src":图标路径或 URL
  // - "sizes":图标尺寸(如 "192x192")
  // - "type":图标的 MIME 类型(如 "image/png")
  "icons": [
    {
      "src": "/icons/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],

  // 定义应用的屏幕方向
  // 可选值:
  // - "any":允许任何方向
  // - "natural":根据设备自然方向
  // - "portrait":仅允许竖屏方向
  // - "landscape":仅允许横屏方向
  "orientation": "portrait",

  // 应用的简要描述,用于应用商店或其他元数据展示
  "description": "This is a progressive web app example.",

  // 定义应用运行的 URL 范围,超出该范围的 URL 将在浏览器中打开
  "scope": "/app/",

  // 指定应用的默认语言(符合 BCP 47 语言代码)
  "lang": "en-US",

  // 指定文本的书写方向
  // 可选值:
  // - "ltr":从左到右
  // - "rtl":从右到左
  // - "auto":由浏览器自动判断
  "dir": "ltr"
}

vite plugin 处理PWA应用图标插件,除此之外可以用也可以做一个网页利用canvas 自动生成各种格式,各种尺寸的应用图片,看自己的业务需要。

typescript

import sharp, { FormatEnum } from 'sharp';
import fs from 'fs';
import path from 'path';

const enum IMG_FORMAT_ENUM {
    PNG = 'png',
    WEBP = 'webp',
}

interface PwaAutoIconPluginOptions {
    /**
     * PWA Icon 原始尺寸图片地址,建议 512 x 512 尺寸大小,后续向不同尺寸转换,只支持PNG,webP,推荐PNG
     */
    iconPath: string;
    /**
     * PWA Icon 各种尺寸图标的输出目录 默认是icons
     */
    outDir?: string;
    /**
     * icon 输入格式,支持 png, webP
     */
    format?: IMG_FORMAT_ENUM;
    /**
     * 需要输出PWA图标的尺寸
     */
    sizes?: number[];
    /**
     * 是否压缩,默认false  不压缩
     */
    isCompress?: boolean;
    /**
     * PWA Icon 压缩等级 0 - 9, 只有开启压缩才生效 0(最快、最大)到 9(最慢、最小
     */
    compressionLevel?: number;
    /**
     * PWA Icon wep格式的压缩质量
     */
    quality?: number;
    /**
     * PWA icon 命名格式
     */
    customIconFileName?: (size: number, format: IMG_FORMAT_ENUM) => string;
}

const cwd = process.cwd();
const PLUGIN_NAME = 'PwaAutoIconPlugin';
const DEFAULT_OUT_DIR = 'icons';
const DEFAULT_ICON_PATH = `${cwd}/icon.png`;
const DEFAULT_ICON_SIZES = [32, 48, 64, 72, 96, 128, 144, 192, 256, 512];
const DEFAULT_CUSTOM_ICON_FILE_NAME = (size: number, format: IMG_FORMAT_ENUM) => `${size}x${size}.${format}`;

class PwaAutoIconPlugin {
    public readonly name = PLUGIN_NAME;
    static outDir = DEFAULT_OUT_DIR;
    static iconPath = DEFAULT_ICON_PATH;
    static sizes = DEFAULT_ICON_SIZES;
    static isCompress = false;
    static compressionLevel = 9;
    static format = IMG_FORMAT_ENUM.PNG;
    static quality = 100;

    static customIconFileName = DEFAULT_CUSTOM_ICON_FILE_NAME;
    constructor(options: PwaAutoIconPluginOptions) {
        PwaAutoIconPlugin.outDir = options?.outDir || DEFAULT_OUT_DIR;
        PwaAutoIconPlugin.iconPath = options?.iconPath || DEFAULT_ICON_PATH;
        PwaAutoIconPlugin.sizes = options?.sizes?.length ? options?.sizes : DEFAULT_ICON_SIZES;
        PwaAutoIconPlugin.isCompress = options?.isCompress || false;
        PwaAutoIconPlugin.compressionLevel = options?.compressionLevel || 9;
        PwaAutoIconPlugin.format = options?.format || IMG_FORMAT_ENUM.PNG;
        PwaAutoIconPlugin.quality = options?.quality || 100;
        PwaAutoIconPlugin.customIconFileName = options?.customIconFileName || DEFAULT_CUSTOM_ICON_FILE_NAME;
    }

    static _generatePwaIcons() {
        const outDirPath = path.join(cwd, PwaAutoIconPlugin.outDir);

        PwaAutoIconPlugin.sizes.forEach((size) => {
            const fileName = PwaAutoIconPlugin?.customIconFileName(size, PwaAutoIconPlugin.format);
            const outImgPath = path.join(outDirPath, fileName);

            let currentImgSharp = sharp(path.join(cwd, PwaAutoIconPlugin.iconPath))
                .resize({
                    width: size,
                    height: size,
                    fit: sharp.fit.cover,
                })
                .toFormat(PwaAutoIconPlugin.format as keyof FormatEnum);

            if (PwaAutoIconPlugin.isCompress) {
                if (PwaAutoIconPlugin.format === IMG_FORMAT_ENUM.PNG) {
                    currentImgSharp = currentImgSharp.png({
                        compressionLevel: PwaAutoIconPlugin.compressionLevel,
                        quality: PwaAutoIconPlugin.quality,
                    });
                } else if (PwaAutoIconPlugin.format === IMG_FORMAT_ENUM.WEBP) {
                    currentImgSharp = currentImgSharp.webp({
                        quality: PwaAutoIconPlugin.quality,
                        lossless: true,
                    });
                }
            }

            currentImgSharp
                .toFile(outImgPath)
                .then((file) => {
                    console.log(`Saved: ${fileName}`, Number(file.size / 1024).toFixed(2) + 'kb');
                })
                .catch((err) => {
                    console.error('Error processing image:', err);
                });
        });
    }

    buildStart() {
        const outDirPath = path.join(cwd, PwaAutoIconPlugin.outDir);
        if (fs.existsSync(outDirPath)) {
            fs.rmSync(outDirPath, { recursive: true, force: true });
            fs.mkdirSync(outDirPath);
        } else {
            fs.mkdirSync(outDirPath);
        }
        PwaAutoIconPlugin._generatePwaIcons();
    }

    buildEnd() {
        console.log('\x1b[32m%s\x1b[0m', 'PWA Icons generate success!');
    }
}

export default (options: PwaAutoIconPluginOptions) => {
    return new PwaAutoIconPlugin(options);
};

2.3 HTTPS ​

PWA 必须在 HTTPS 环境下运行,以确保安全性(Service Worker 只能在 HTTPS 环境中启用)。

2.4 HTML中引入配置文件 ​

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My PWA App</title>
  
  <!-- 引入 manifest.json -->
  <link rel="manifest" href="/manifest.json">
  
  <!-- 设置主题颜色(通常与 manifest.json 的 theme_color 保持一致) -->
  <meta name="theme-color" content="#0078d7">
  
</head>
<body>
  <h1>Welcome to My PWA</h1>
</body>
</html>

3. PWA 的优势与劣势 ​

PWA 的优势 ​

1. 跨平台兼容性 ​

  • 基于 Web 技术开发,无需针对不同操作系统(如 iOS、Android)单独开发。
  • 只要有现代浏览器,PWA 就可以运行,极大降低了开发成本。

2. 安装简便 ​

  • 用户无需通过应用商店下载,直接通过浏览器访问并选择“添加到主屏幕”即可完成安装。
  • 简化安装流程,减少用户流失。

3. 离线支持 ​

  • 利用 Service Worker 缓存资源,即使在离线状态下也能提供基本功能,如查看最近的页面或内容。
  • 提升用户体验,适合网络不稳定或流量有限的场景。

4. 自动更新 ​

  • 应用更新由服务器控制,用户每次访问都会获取最新版本,无需手动更新。
  • 开发者可以快速部署修复或新功能,减少分发和审批流程。

5. 轻量级 ​

  • 通常比原生应用体积小,占用的存储空间少,加载速度快。
  • 对设备性能要求低,更适合老旧设备或低端设备。

6. SEO 友好 ​

  • PWA 作为 Web 应用,可以被搜索引擎索引,增加内容的曝光率和可发现性。

PWA 的劣势 ​

1. 功能限制 ​

  • 硬件访问受限:相比原生应用,PWA 对某些硬件功能的支持较弱,如蓝牙、NFC、文件系统操作等。
  • 浏览器依赖:功能支持依赖浏览器,比如部分旧版浏览器或特殊环境下,PWA 的表现可能受限。

2. 市场推广受限 ​

  • 缺少应用商店流量:PWA 无法在传统的应用商店(如 Google Play、App Store)中被发现,可能错失一部分潜在用户。
  • 安装方式不够显眼:用户需要通过浏览器手动操作安装,缺乏原生应用那种引导性强的安装体验。

3. iOS 支持不足 ​

  • 虽然 Safari 支持 PWA,但功能有限,比如推送通知、后台同步等关键能力支持不完善。
  • Apple 对 PWA 的政策限制较多,体验相比原生应用有所差距。

4. 性能不足 ​

  • 在高性能需求的场景(如复杂游戏、实时渲染等),PWA 可能无法与原生应用媲美。
  • Web 技术的性能瓶颈可能导致部分应用的体验不够流畅。

5. 安全依赖 ​

  • PWA 必须运行在 HTTPS 环境下,开发者需要为其配置安全证书。对小型团队或个人开发者来说,这可能增加部署复杂度。

总结 ​

PWA 通过结合 Web 与原生应用的优势,为用户提供便捷的使用体验,但在硬件访问、性能以及推广方面存在一定局限性。适用于内容驱动型应用、离线需求强的场景,但对于高度依赖硬件或需要高性能计算的应用,可能仍需考虑原生开发。

4. PWA 的使用场景 ​

PWA(渐进式 Web 应用)结合了 Web 应用和原生应用的优点,适用于多种场景。以下是一些典型的 PWA 使用场景:

1. 离线和低网络环境下的应用 ​

适用场景: ​

  • 新闻类应用:用户可以在没有网络的情况下查看离线缓存的新闻内容。
  • 天气类应用:用户可以在离线时查看缓存的天气数据。
  • 地图应用:当用户进入没有网络信号的区域时,PWA 可以缓存地图数据并允许离线浏览。

优势: ​

  • 利用 Service Worker 缓存策略,PWA 可以在离线状态下继续工作,提供基本的功能和内容。
  • 用户在网络不稳定或无网络环境下依然能够访问应用。

2. 轻量级移动应用 ​

适用场景: ​

  • 电商平台:用户可以通过 PWA 快速浏览商品、查看订单并进行购买,即使在网络环境差的情况下,也能提供基本的购物体验。
  • 社交媒体平台:提供类似原生社交应用的体验,如实时消息推送、朋友圈更新等。

优势: ​

  • 相比原生应用,PWA 具有更轻的体积,下载和安装速度更快,适用于网络带宽较低的场景。
  • 不需要通过应用商店进行安装,用户可以通过浏览器直接访问并“添加到主屏幕”。

3. 需要频繁更新的应用 ​

适用场景: ​

  • 博客或内容发布平台:博客平台、新闻站点等,需要频繁更新内容,用户无需手动更新应用,系统会自动拉取最新版本。
  • 金融服务应用:提供实时数据更新的金融平台,如股票价格和汇率。

优势: ​

  • 通过 Service Worker 和缓存策略,PWA 可以无缝更新,而不需要用户手动干预。
  • 用户每次打开应用时,都会获取最新的数据和功能,保证内容始终是最新的。

4. 支持后台同步的应用 ​

适用场景: ​

  • 任务管理工具:用户可以在没有网络时管理任务,等网络恢复时自动同步数据。
  • 消息和通知类应用:例如即时通讯工具,当用户离线时,消息会保存在本地,网络恢复后自动发送。
  • 表单提交应用:例如在线调查工具,用户可以在没有网络时填写表单,提交时会在网络恢复后同步。

优势: ​

  • 利用后台同步功能,PWA 能够在用户设备处于离线状态时继续工作,并在网络恢复后自动同步数据,无需手动操作。

5. 需要简化安装和用户引导的应用 ​

适用场景: ​

  • 小型应用或工具:如计算器、便签、单位换算工具等,用户不需要下载和安装庞大的原生应用,直接通过浏览器访问即可。
  • 活动和促销页面:例如限时促销、短期活动页面,可以直接通过浏览器访问并快速添加到主屏幕,无需复杂的安装过程。

优势: ​

  • 无需经过应用商店审核和下载,用户通过浏览器即可快速访问并安装应用。
  • 可以轻松通过二维码、社交媒体等方式分发,降低用户流失。

6. 多设备支持和跨平台需求 ​

适用场景: ​

  • 企业内部应用:如员工管理系统、项目管理工具等,PWA 使得员工无需安装额外的原生应用,即可在不同设备上访问相同的功能。
  • 客户关系管理(CRM):企业可以通过 PWA 提供一个跨平台的 CRM 工具,员工可以在不同的设备(如桌面、手机、平板)上访问。

优势: ​

  • PWA 可以在多种设备上运行,不同操作系统(如 Windows、Android、iOS)上都可以保持一致的体验,减少开发和维护成本。
  • 支持跨平台体验,用户可以在任何设备上访问相同的应用,提升了用户的使用便捷性。

7. 推送通知和用户参与度提升 ​

适用场景: ​

  • 电商应用:推送促销信息、限时优惠、购物车提醒等。
  • 新闻应用:推送最新新闻、头条、紧急事件等。
  • 社交平台:实时推送好友请求、私信、评论等通知。

优势: ​

  • PWA 支持推送通知,能够有效提升用户的活跃度和参与度。即使用户不在应用内,也可以通过通知提醒用户最新的动态。
  • 推送通知是提升用户留存和转化的有效手段,PWA 可以帮助开发者实现这一功能。

总结 ​

PWA 适用于需要快速、轻量、跨平台的应用场景,尤其是对于内容更新频繁、需要离线支持或安装简便的应用,PWA 提供了强大的支持。通过利用 Service Worker、离线缓存、推送通知等技术,PWA 可以在很多场景中提供比传统 Web 应用和原生应用更优的用户体验。

5. PWA 周边生态 ​

随着 PWA(渐进式 Web 应用)的兴起,围绕其生态系统也逐渐形成了许多工具、库、框架和服务。以下是一些主要的 PWA 周边生态,帮助开发者更高效地构建、部署和维护 PWA 应用。

1. 框架与工具支持 ​

1.1 React, Vue, Angular ​

这些现代前端框架都支持构建 PWA 应用,提供了与 PWA 的集成支持,例如:

  • React:React 与 create-react-app 一起支持 PWA 配置,通过服务工作者和缓存等功能,可以轻松创建 PWA 应用。
  • Vue:Vue CLI 提供了一个 PWA 插件,使得 Vue 应用能够轻松成为 PWA。
  • Angular:Angular 通过其 @angular/service-worker 包支持 PWA 功能,帮助构建缓存策略、离线支持等。

1.2 Vite ​

Vite 是一个现代化的构建工具,它通过插件支持 PWA,使得开发过程更加高效,且配置简单。vite-plugin-pwa 插件为 Vite 提供了 PWA 支持,包括服务工作者的注册和缓存管理。


2. PWA 支持的工具和库 ​

2.1 Workbox ​

Workbox 是 Google 提供的一个 JavaScript 库,它帮助开发者轻松创建服务工作者、管理缓存和离线体验。Workbox 提供了多种缓存策略和自动化工具,让 PWA 开发者能够集中精力处理业务逻辑,而不需要重复造轮子。

主要功能: ​
  • 自动化缓存管理:包括静态资源、动态请求等内容的缓存。
  • 精准的缓存策略:提供了如 NetworkFirst, CacheFirst, StaleWhileRevalidate 等多种缓存策略。
  • 离线支持:可以确保应用即使在离线状态下也能继续使用。

2.2 Lighthouse ​

Lighthouse 是 Google 开发的一个自动化工具,用于评估 Web 应用的性能、可访问性和 PWA 功能。Lighthouse 提供了详细的报告,帮助开发者优化 Web 应用,提升 PWA 用户体验。

主要功能: ​
  • PWA 评分:对 Web 应用进行 PWA 性能评估,检查应用是否符合 PWA 的标准。
  • 性能分析:检测页面加载速度、响应时间等关键指标。
  • SEO 和可访问性检测:确保 Web 应用符合搜索引擎和无障碍访问要求。

3. PWA 插件与扩展 ​

3.1 Workbox Webpack Plugin ​

Workbox Webpack Plugin 集成了 Workbox 到 Webpack 构建中,自动生成服务工作者并配置缓存策略。这使得构建和维护 PWA 变得更加简单。

3.2 PWA Builder ​

PWA Builder 是一个在线工具,帮助开发者从现有的网站快速生成 PWA 文件。它会自动生成 manifest.json、服务工作者等文件,并指导开发者如何部署 PWA。

主要功能: ​
  • 自动生成 PWA 配置:可以一键生成 manifest.json 和服务工作者。
  • 跨平台支持:支持创建适用于 Android、iOS 和 Windows 的 PWA。
  • 部署指导:提供了多种部署方案,包括 GitHub Pages、Netlify 等。

4. PWA 推送通知服务 ​

4.1 OneSignal ​

OneSignal 是一款非常流行的推送通知服务,它支持 Web 推送、移动推送和电子邮件推送等多种通知方式。OneSignal 提供简单的集成方式,让 PWA 开发者可以轻松地加入推送通知功能。

主要功能: ​
  • 跨平台推送通知:支持 Web、Android 和 iOS 平台。
  • 细粒度用户群体管理:支持按兴趣、用户行为等进行推送。
  • 实时通知分析:实时查看推送通知的送达率、点击率等数据。

4.2 Firebase Cloud Messaging (FCM) ​

Firebase Cloud Messaging(FCM)是 Google 提供的推送通知服务,支持 Web、Android 和 iOS 平台。它与 Firebase 生态系统深度集成,可以帮助开发者快速构建推送通知功能。

主要功能: ​
  • 多平台支持:支持 Web、Android 和 iOS 的推送通知。
  • 高级推送功能:支持定时通知、定向推送、消息优先级等。
  • 与 Firebase 集成:与 Firebase Analytics、Crashlytics 等服务无缝结合。

5. PWA 部署与托管平台 ​

5.1 Netlify ​

Netlify 是一个流行的静态网站托管平台,它原生支持 PWA,提供自动化部署、HTTPS 支持和即时更新功能。通过 Netlify,PWA 应用的部署和发布变得更加简单和高效。

主要功能: ​
  • 自动化部署:与 GitHub 等代码托管平台集成,支持自动化部署。
  • HTTPS 支持:为所有网站自动启用 HTTPS,确保 PWA 的安全性。
  • 即时更新:PWA 的更新会自动推送给用户,减少手动更新的需求。

5.2 Vercel ​

Vercel 是一个主要用于托管前端应用的平台,特别适合用于部署 React、Vue、Next.js 等现代框架的 PWA。它支持自动化构建和部署,提供全球 CDN 加速。

主要功能: ​
  • 自动化部署:支持 GitHub、GitLab 等代码托管平台自动部署。
  • 全球 CDN 加速:为 PWA 提供快速的内容分发,提升加载速度。
  • 无缝更新:通过 Git 提交自动触发部署,确保 PWA 始终保持最新版本。

6. PWA 应用市场与分发 ​

6.1 Microsoft Store ​

PWA 支持被打包并发布到 Microsoft Store,这意味着 Windows 用户可以直接从商店下载和安装 PWA 应用。

6.2 Google Play Store ​

Google Play Store 支持将 PWA 转化为 Android 应用并发布,使得用户可以通过应用商店进行安装和更新。


总结 ​

PWA 生态系统已经非常成熟,从开发工具到推送通知服务、从部署平台到分发渠道,许多周边工具和服务都在不断发展,帮助开发者更便捷地构建、优化和发布 PWA 应用。通过这些生态工具,PWA 的开发和维护变得更加高效、简便,使得 PWA 成为现代 Web 开发中一个强大的解决方案。

6.PWA 应用案例 ​

PWA(渐进式 Web 应用)已被许多领先的公司和组织采用,它们利用 PWA 提供的离线支持、性能优化和跨平台能力来增强用户体验。以下是一些成功的 PWA 应用案例,它们展示了 PWA 在各个领域的强大功能和实际效果。

1. Twitter Lite ​

背景: ​

Twitter Lite 是 Twitter 推出的轻量级版本,它是一个基于 PWA 的应用,旨在为用户提供更快的加载速度和更低的带宽消耗,特别适合网络不稳定或数据受限的地区。

实现: ​

  • 离线支持:用户可以浏览已经加载的内容,即使在网络断开时也能继续访问。
  • 推送通知:用户能够接收推送通知,包括新的推文和消息提醒。
  • 性能优化:Twitter Lite 通过压缩资源和使用 Service Worker 技术实现快速加载和高效的缓存管理。

成效: ​

  • 用户增长:Twitter Lite 的推出帮助 Twitter 在一些发展中国家的市场取得了显著增长,用户参与度和活跃度都有了明显提升。
  • 降低流量消耗:相比传统的 Twitter 应用,Twitter Lite 在数据消耗上节省了更多,使得用户在数据有限的环境中更愿意使用。

2. Pinterest ​

背景: ​

Pinterest 作为一个视觉发现和社交平台,其 PWA 目标是提升移动端用户体验,特别是在低网速和无网络的环境下。

实现: ​

  • 快速加载:Pinterest PWA 能够大幅度提升页面加载速度,让用户可以更加快速地浏览内容。
  • 离线功能:通过缓存功能,用户可以在没有网络时继续查看之前浏览过的图像和板块。
  • 推送通知:Pinterest 使用 PWA 推送通知来提升用户的参与度,确保用户能够及时获得个性化的更新。

成效: ​

  • 提升了性能:Pinterest PWA 相比传统的移动应用在加载速度上提升了40%。
  • 提高了用户参与度:通过 PWA,Pinterest 实现了大幅提升的用户参与度,尤其是在没有稳定网络连接的地区。
  • 增加了用户留存率:用户能够轻松返回应用,获取个性化推荐,即使在离线的情况下,PWA 的缓存和离线功能有效减少了流失率。

3. AliExpress ​

背景: ​

AliExpress 是全球知名的电商平台,面对大量的全球用户,AliExpress 需要一种跨平台的解决方案来提升用户的购物体验,特别是针对移动设备和低网络环境的优化。

实现: ​

  • 离线支持:用户能够在没有网络连接的情况下浏览商品、查看已添加到购物车的物品,并能够在连接恢复后同步数据。
  • 性能优化:通过减少不必要的资源加载和使用 Service Worker 进行内容缓存,AliExpress 提升了移动端的加载速度。
  • 推送通知:AliExpress 使用推送通知来提醒用户关于商品的优惠、订单状态更新和个性化推荐。

成效: ​

  • 提升了性能:AliExpress 在推出 PWA 后,页面加载时间减少了70%,大幅度提升了移动端用户体验。
  • 提高了转化率:PWA 在转化率上也取得了显著提升,特别是在发展中国家的移动用户中,购物频次和购买转化率都有了较大提高。

4. Starbucks ​

背景: ​

Starbucks 是全球著名的咖啡品牌,它推出了 PWA 版本的应用,旨在让用户在低网络环境下也能方便快捷地浏览菜单、下单和管理账户。

实现: ​

  • 离线支持:Starbucks 的 PWA 使得用户即使在没有网络连接的情况下也能够查看菜单、商品信息以及之前的订单记录。
  • 快速加载:PWA 应用的快速响应使得用户能在进入应用时迅速看到页面内容,减少等待时间。
  • 无缝体验:用户可以在桌面和移动端之间无缝切换,使用相同的账户登录,在不同设备上访问相同的数据和功能。

成效: ​

  • 增加了用户参与度:Starbucks 的 PWA 提供了一个快速响应的购物体验,提升了用户在应用中的互动和参与度。
  • 改进了用户体验:通过减少对网络的依赖,Starbucks 的 PWA 能够为用户提供更加顺畅的点单和浏览体验,尤其在连网不稳定的地方表现突出。

5. Trivago ​

背景: ​

Trivago 是一个在线旅游搜索引擎,帮助用户比较全球各地的酒店价格。Trivago 推出了 PWA 版本,专门针对移动端用户的需求进行优化。

实现: ​

  • 快速加载:Trivago 的 PWA 页面加载速度比传统移动应用快,提升了用户体验。
  • 离线支持:Trivago 的 PWA 让用户能够在离线或低网络情况下浏览已经加载的酒店信息。
  • 推送通知:通过推送通知,Trivago 能够提醒用户特价信息、酒店预订和优惠活动。

成效: ​

  • 提升了转化率:Trivago 的 PWA 帮助公司增加了更多的用户预定和查询,提升了转化率。
  • 提高了加载速度:Trivago 在推出 PWA 后,页面加载速度提升了 67%,大幅提升了用户体验和使用粘性。

6. L'Oréal ​

背景: ​

L'Oréal 是全球领先的化妆品公司,面对全球范围内的客户,L'Oréal 需要一个高效的数字化平台来支持用户购物,特别是在移动端的体验上。

实现: ​

  • 跨设备支持:L'Oréal 的 PWA 让用户能够在多个设备上(手机、平板、桌面)享受一致的购物体验。
  • 快速加载:L'Oréal 通过 PWA 实现了应用加载速度的大幅提升,即使在网络不稳定的情况下也能提供流畅的浏览体验。
  • 离线功能:通过缓存,L'Oréal 的 PWA 可以让用户在离线时浏览以前浏览过的产品和页面。

成效: ​

  • 增加了销售量:通过 PWA,L'Oréal 提升了移动端的用户转化率,特别是在没有网络连接的情况下,仍能保持用户的购买兴趣。
  • 提升了全球用户体验:无论用户身处何地,L'Oréal 的 PWA 都能够提供一致、快速的购物体验,降低了在不同设备上的使用难度。

总结 ​

PWA 已经在多个行业中得到了成功应用,特别是在需要跨平台支持、提升性能和优化用户体验的场景下。无论是社交平台、电子商务、旅游应用还是内容发布平台,PWA 都能为用户提供更高效、更流畅的体验。同时,PWA 也帮助企业减少了开发成本和维护工作,提升了用户留存率和转化率。

Updated at:

Released under the MIT License.