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.