在15分钟内开发无进展Web应用程序

Google Play拥有一个由Chilango Lab开发的应用程序,该应用程序的下载量超过一百万,并且评分很高。 它被称为Nothing ,可以翻译为“ Nothing”,它的奇妙之处在于它什么都不做。 的确,其中隐藏了令人愉悦的复活节彩蛋,但这并没有改变问题。 如果您分析此应用程序,结果发现它的大小为14 MB,在安装过程中需要19.24 MB。


该材料的作者(我们今天将其翻译发表)说,看着这个应用程序,他想知道是否可以重写它,以便占用更少的空间。

他成功了。 即,他使用HTML,CSS和JavaScript重新创建了Nothing的功能,使其成为了一个渐进式Web应用程序( PWA ,渐进式Web App)。 它可以在没有Internet连接的情况下工作,您可以像在常规屏幕上一样从主屏幕中调用它。 常规Android应用程序与其PWA副本之间的主要区别在于大小。 第一次调用时,在设备上占用了19.24 MB。 第二个-205 Kb。


正常应用和PWA

一无所有创建图标


在我告诉您代码之前,为PWA Nothing创建一个图标。 为了解决这个问题,我使用了出色的开源工具Launcher Icon Generator


启动器图标生成器

使用启动器图标生成器,我能够立即为Nothing选项创建一个图标。 该程序会自动生成各种大小的图标。

普瓦康帕特


图标完成后,我需要创建一个Web应用程序清单 。 多亏了它,当PWA启动时,用于Android的Chrome浏览器将显示启动屏幕。 是否可以使这样的屏幕出现在其他浏览器中? 是的,这是可能的,为此,我们需要PWACompat库,该库使我们能够准确实现所需的内容。 它和清单一起足以连接到PWA代码中:

<link rel="manifest" href="manifest.json" /> <script async src="https://cdn.jsdelivr.net/npm/pwacompat@2.0.6/pwacompat.min.js"    integrity="sha384-GOaSLecPIMCJksN83HLuYf9FToOiQ2Df0+0ntv7ey8zjUHESXhthwvq9hXAZTifA"    crossorigin="anonymous"></script> 

这是Safari(iOS)中的初始屏幕。


Safari初始画面

但这不限于PWACompat的功能。 尤其是,该库允许您为各种浏览器创建描述PWA如何打开的元标记,还可以基于Web应用程序的清单设置主题颜色。

将应用程序添加到主屏幕


我最喜欢的PWA功能之一是A2HS(添加到主屏幕),由于它,您可以在主屏幕上添加一个图标来启动该应用程序。 但是,从Android上的Chrome 68开始,现在显示的是带有适当建议的小信息面板 ,而不是大型的A2HS标语。


再见A2HS标语(Chrome 67及更低版本)

无论如何,一旦从Chrome中删除此功能,仪表板就是一个中间解决方案。 因此,我需要为PWA Nothing创建一个更好的A2HS接口。


安装按钮(左),安装按钮和A2HS面板(中间),添加到主屏幕对话框(右)

在这种情况下,如果浏览器支持将应用程序添加到主屏幕的功能,它将在页面顶部显示“安装”按钮。 当用户单击此按钮时,将调出“添加到主屏幕”对话框。

这是相关的代码。

 var installPromptEvent; var btnInstall = document.querySelector('#install'); window.addEventListener('beforeinstallprompt', function (event) {   event.preventDefault();   installPromptEvent = event;   btnInstall.removeAttribute('disabled'); }); btnInstall.addEventListener('click', function () {   btnInstall.setAttribute('disabled', '');   installPromptEvent.prompt();   installPromptEvent.userChoice.then((choice) => {       if (choice.outcome === 'accepted') {           console.log('User accepted the A2HS prompt');       } else {           console.log('User dismissed the A2HS prompt');       }       installPromptEvent = null;   }); }); 

如果站点符合A2HS标准,则浏览器将引发beforeinstallprompt事件。

复活节彩蛋


注意,会有剧透!


严格来说,PWA Nothing Easter Egg是Konami代码和YouTube上10小时视频


复活节彩蛋呼叫(向上,向上,向下,向下,向左,向右,向左,向右和两次触摸)

用户完成编码后,PWA将打开此视频

为了向我的应用程序添加Konami代码支持,我使用了Konami-JS库。 它体积小,易于使用,并且尤其支持移动设备。 这是我的PWA与原始Android应用程序之间的唯一区别。 特别是我在输入代码时需要进行两次触摸的地方,在原始应用程序中,您需要使用带有按钮的面板。

拉动时关闭页面刷新


在处理应用程序的过程中,我遇到了一个小问题。 当用户尝试在移动设备上向下拉伸页面时,这将导致页面刷新(拉动刷新)。 我不需要


不需要的页面刷新

幸运的是,处理此问题很容易。 您只需要一行CSS代码

 overscroll-behavior-y: contain 

代管


Netlify被选为PWA Nothing的主持人。 这是现代Web项目的通用平台。 我之所以决定将应用程序托管在Netlify上,是因为在这里可以轻松配置所有内容。 此外,所有这些都是免费的。


Netlify控制面板

要在Netlify上部署项目,可以使用以下三种方法之一。 我们正在谈论命令行工具,手动部署以及持续部署。

▍Netlify命令行工具


这是部署Web项目的经典方法。 为了使用它,您需要安装Netlify CLI,登录到您的帐户,初始化项目并部署它。 看起来像这样:

 > brew tap netlify/netlifyctl > brew install netlifyctl > netlifyctl login > netlifyctl init > netlifyctl deploy 

▍手动部署


此方法可能是最简单的方法,只需几次鼠标移动即可执行应用程序部署。


手动部署

我非常喜欢此功能,因此我希望这样的东西出现在Firebase中。 实际上,项目的部署归结为将其文件夹拖放到网页上。

▍持续部署


现在,我使用此特定方法。 将我的GitHub存储库链接到Netlify之后,当我向其中发送代码时,Netlify会自动构建并部署该项目。 魔术,并非如此。

▍HTTPS


由于必须通过HTTPS从安全来源为PWA提供服务,因此我需要确保在我的站点上启用了HTTPS。 的确,由于Netlify为所有域(包括其自己的用户域)提供了免费的HTTPS,因此我在这方面无需付出很多努力。


Https

此外,从Netlify控制面板,您可以启用到HTTPS( HSTS )的强制转换。 这将为站点提供持续的保护。

灯塔项目分析


Lighthouse是用于提高网页质量的开源自动化工具。 借助其帮助,您可以分析任何页面-公共页面或需要身份验证的页面。 它尤其使您能够分析页面的性能和可访问性,探索渐进式Web应用程序。


灯塔

我的应用程序在性能方面获得了97分,在其他指标上获得了100分。 这是完整的报告

总结


如您所见,一个无所事事的渐进式Web应用程序比具有相同功能的Android应用程序小得多。 在这里,您将不会体验PWA。 在这里您可以找到其源代码。

亲爱的读者们! 您认为您想以PWA形式重新创建什么Android应用程序?

Source: https://habr.com/ru/post/zh-CN421349/


All Articles