aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/progressive_web_apps/introduction/index.html
blob: f455dddb099328202532ed5e3e1e5b150c50d729 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
title: 渐进式 web 应用介绍
slug: Web/Progressive_web_apps/Introduction
translation_of: Web/Progressive_web_apps/Introduction
---
<div>{{NextMenu("Web/Apps/Progressive/App_structure", "Web/Apps/Progressive")}}</div>

<p class="summary">这篇文章将会为你介绍渐进式web应用(PWA),讨论一下它们到底是什么,相比于常规的web应用,它又带来了哪些优势。</p>

<h2 id="什么是渐进式web应用?">什么是渐进式web应用?</h2>

<p>PWA应用是指那些使用指定技术和标准模式来开发的web应用,这将同时赋予它们web应用和原生应用的特性。</p>

<p>例如,web应用更加易于发现——相比于安装应用,访问一个网站显然更加容易和迅速,并且你可以通过一个链接来分享web应用。</p>

<p>在另一方面,原生应用与操作系统可以更加完美的整合,也因此为用户提供了无缝的用户体验。你可以通过安装应用使得它在离线的状态下也可以运行,并且相较于使用浏览器访问,用户也更喜欢通过点击主页上的图标来访问它们喜爱的应用。</p>

<p>PWA赋予了我们创建同时拥有以上两种优势的应用的能力。</p>

<p>这并不是一个新概念——这样的想法在过去已经在web平台上通过许多方法出现了多次。渐进式增强和响应式设计已经可以让我们构建对移动端友好的网站。在多年以前的Firefox OS的生态系统中离线运行和安装web应用已经成为了可能。</p>

<p>PWAs, 不但如此,更是提供了所有的甚至是更多的特性,来让web更加优秀。</p>

<h2 id="什么使应用成为PWA">什么使应用成为PWA?</h2>

<p>正如前文所述,PWA不是使用一种技术创建的。它们代表了构建Web应用程序的新理念,涉及一些特定的模式,API和其他功能。如果一个Web App从一开始就是PWA,那就不那么明显了。当应用程序满足某些要求时,可以将其视为PWA,或者实现一组给定的功能:离线工作,可安装,易于同步,可以发送推送通知等。</p>

<p>此外,还有一些工具可以按百分比衡量应用的完整性。(<a href="https://developers.google.com/web/tools/lighthouse/">Lighthouse</a>目前是最受欢迎的工具)通过实施各种技术优势,我们可以使应用程序更加渐进式,从而最终获得更高的Lighthouse 得分。但这只是一个粗略的指标。</p>

<p>这里有一些关键的原则来辨别一个web应用是否是一个PWA应用。它应该具有以下特点:</p>

<ul>
 <li><a href="/en-US/Apps/Progressive/Advantages#Discoverable">Discoverable</a>, 内容可以通过搜索引擎发现。</li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Installable">Installable</a>, 可以出现在设备的主屏幕。</li>
 <li><a href="/Apps/Progressive/Advantages#Linkable">Linkable</a>, 你可以简单地通过一个URL来分享它。 </li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Network_independent">Network independent</a>, 它可以在离线状态或者是在网速很差的情况下运行。</li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Progressive">Progressive</a>, 它在老版本的浏览器仍旧可以使用,在新版本的浏览器上可以使用全部功能。</li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Re-engageable">Re-engageable</a>, 无论何时有新的内容它都可以发送通知。</li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Responsive">Responsive</a>, 它在任何具有屏幕和浏览器的设备上可以正常使用——包括手机,平板电脑,笔记本,电视,冰箱,等。</li>
 <li><a href="/en-US/Apps/Progressive/Advantages#Safe">Safe</a>, 在你和应用之间的连接是安全的,可以阻止第三方访问你的敏感数据。</li>
</ul>

<h3 id="这么做值得吗?">这么做值得吗?</h3>

<p>当然值得!只需要相对较小的代价就可以实现PWA的核心特性,这样的优势是巨大的。例如:</p>

<ul>
 <li>减少应用安装后的加载时间, 多亏了 <a href="/en-US/docs/Web/API/Service_Worker_API">Service Workers</a>来进行缓存, 以此来节省带宽和时间。</li>
 <li>当应用有可用的更新时,可以仅仅去更新发生改变的那部分内容。与之相反,对于一个原生应用而言,即便是最微小的改动也需要强制用户去再次下载整个应用。</li>
 <li>外观和使用感受与原生平台更加融为一体——应用图标被放置在主屏幕上,应用可以全屏运行,等。</li>
 <li>凭借系统通知和推送消息与用户保持连接,对用户产生更多的吸引力,并且提高转换效率。</li>
</ul>

<p>有许多知名的成功企业正在尝试PWA的方式,选择一个增强的网站体验而不是一个原生应用。事实上它们也确实从中获得了显而易见的益处。  <a href="https://www.pwastats.com/">PWA Stats</a> 这个网站上分享了许多案例研究,这都证明了以上这些优势。</p>

<p>最著名的案例可能是<a href="https://stories.flipkart.com/flipkart-lite/">Flipkart Lite</a>--印度最大的电子商务网站,在2015年重建为渐进式网络应用程序,转化率提高了70%。<a href="https://m.aliexpress.com/">AliExpress</a> PWA也看到了比web app或native app更好的结果,新用户的转换率提高了104%。鉴于其利润增长以及转换为PWA所需的工作量相对较少,优势显而易见。</p>

<p><a href="https://www.couponmoto.com/"> couponmoto</a> 这样的早期新兴创业公司也开始使用渐进式网络应用来推动更多的消费者参与,这表明渐进式网络应用可以帮助小公司和大公司更有效地(重新)吸引用户。</p>

<p>您可以查看 <a href="https://pwa.rocks/">pwa.rocks</a> 上的列表以获取更多示例。 特别值得一提的是<a href="https://hnpwa.com/">hnpwa.com</a>,它列出了 Hacker News 网站的示例实现(而不是通常的 TodoMVC 应用程序),您可以在其中看到各种前端框架的使用。</p>

<p>您甚至可以使用<a href="https://www.pwabuilder.com/"> PWABuilder</a> 网站在线生成 PWA。</p>

<p>对于 service worker 和推送特定信息,请务必查看 <a href="https://serviceworke.rs/">Service Worker 手册</a>,一个在现代站点中使用 service worker 的方法集合。</p>

<p>PWA是非常值得尝试的,您可以自己查看它是否适用于您的应用程序。</p>

<h2 id="浏览器支持">浏览器支持</h2>

<p>如前所述,PWA 不依赖于单个 API ,而是使用各种技术来实现提供最佳 Web 体验的目标。</p>

<p><span class="tlid-translation translation" lang="zh-CN"><span title="">PWA 所需的关键要素是 </span></span><a href="/en-US/docs/Web/API/Service_Worker_API">service worker</a><span class="tlid-translation translation" lang="zh-CN"><span title=""> 支持。</span> <span title="">值得庆幸的是,桌面和移动设备上的</span></span><a href="https://jakearchibald.github.io/isserviceworkerready/">所有主流浏览器都支持</a> service worker<span class="tlid-translation translation" lang="zh-CN"><span title=""></span></span></p>

<p><span class="tlid-translation translation" lang="zh-CN"><span title="">其他功能,如</span></span> <a href="/en-US/docs/Web/Manifest">Web App Manifest</a><span class="tlid-translation translation" lang="zh-CN"><span title=""></span></span><a href="/en-US/docs/Web/API/Push_API">Push</a><span class="tlid-translation translation" lang="zh-CN"><span title=""></span></span><a href="/en-US/docs/Web/API/Notifications_API">Notifications</a><span class="tlid-translation translation" lang="zh-CN"><span title=""></span></span> <a href="/en-US/docs/Web/Apps/Progressive/Add_to_home_screen">Add to Home Screen</a> <span class="tlid-translation translation" lang="zh-CN"><span title="">功能也得到了广泛的支持。</span> <span title="">目前,Safari 对 </span></span><a href="/en-US/docs/Web/Manifest">Web App Manifest</a><span class="tlid-translation translation" lang="zh-CN"><span title=""> </span></span><span class="tlid-translation translation" lang="zh-CN"><span title=""></span></span> <a href="/en-US/docs/Web/Apps/Progressive/Add_to_home_screen">Add to Home Screen </a><span class="tlid-translation translation" lang="zh-CN"><span title="">的支持有限,并且不支持 Web 推送通知。</span> <span title="">但是,其他主流浏览器支持所有这些功能。</span></span></p>

<p><span class="tlid-translation translation" lang="zh-CN"><span title="">其中一些 API 是实验性的,文档仍在草稿中,但是看到像 Flipkart 和 AliExpress 这样的成功案例应该说服您尝试在 Web 应用程序中实现一些 PWA 功能。</span></span></p>

<p><span class="tlid-translation translation" lang="zh-CN"><span title="">最重要的是,您应该遵循渐进增强规则 - 仅在支持它们的情况下使用提供此类增强功能的技术,但如果不支持,则仍然提供应用程序的基本功能。</span> <span title="">这样每个人都可以使用它,但那些使用现代浏览器的人将更多地受益于 PWA 功能。</span></span></p>

<h2 id="一个示例应用程序">一个示例应用程序</h2>

<p><span class="tlid-translation translation" lang="zh-CN"><span title="">在本系列文章中,我们将研究一个超级简单网站的源代码,该网站列出了 </span></span> <a href="http://2017.js13kgames.com/">js13kGames 2017</a> <span class="tlid-translation translation" lang="zh-CN"><span title="">竞赛中提交给 </span></span><a href="http://js13kgames.com/aframe">A-Frame category</a> <span class="tlid-translation translation" lang="zh-CN"><span title="">的游戏的相关信息。</span> <span title="">您不必考虑网站上的实际内容 - 主要是学习如何在您自己的项目中使用PWA功能。</span></span></p>

<p>您可以在 <a href="https://mdn.github.io/pwa-examples/js13kpwa/">mdn.github.io/pwa-examples/js13kpwa</a> 找到在线版本(另请<a href="https://github.com/mdn/pwa-examples/tree/master/js13kpwa">参阅源代码</a>),我们将在接下来的几篇文章中对其进行详细解释。</p>

<p>现在,让我们转到本系列的第二部分,我们将看看我们的示例应用程序的结构。</p>

<p>{{NextMenu("Web/Apps/Progressive/App_structure", "Web/Apps/Progressive")}}</p>

<div>{{QuickLinksWithSubpages("/en-US/docs/Web/Apps/Progressive/")}}</div>