决定为哪个平台构建应用一直是个挑战。开发人员应该把时间和金钱花在原生实现上,还是完全专注于Web,或者是某种组合?新增加的Angular移动工具集(AMT)使用新的Web平台API让Web应用有了更多原生的感觉,希望可以为做这种决定的人减轻一点压力。
在ng-conf 2016大会上,Jeff Cross和Alex Rickabaugh花时间介绍了AMT以及它如何帮助开发人员让Web应用的行为更像原生应用。Cross做了总结:
“Progressive Web Apps”是以一些已经在某些Web浏览器中实现了的新兴Web标准为基础的最佳实践和技术。对于一些普通的Web应用,你使用新的平台API添加新的功能,让它们更加强大。它们可以在任何平台上工作,但最好是工作在它们可以更多地利用新的技术和API的平台上。
这些技术的主要目标是让应用可以立即加载、离线工作、可安装,并提供通知功能。通常,原生应用默认就具备这些特性,但在Web上实现这些特性并不容易。在这四个特性中,Cross和Rickabaugh重点介绍了前三个以及对应每一个特性的技术:
- App Shell(立即加载)
- Service Worker(离线)
- Web App Manifest(可安装)
Cross说,App Shell是指“包含动态内容的静态UI,通常由一个工具栏和某种导航……供所有应用程序视图使用的东西。”在离线编译过程中,AMT部分地依赖Angular Universal生成静态内容。
原生应用的其中一个好处是,一旦安装,即使没有网络,也总是可以保证最低限度的使用。AMT依赖Service Worker在后台下载应用代码,因此,应用可以脱机工作。一个意外的结果是,在后续加载时,应用的启动速度更快,因为它已经有了代码,省去了网络和下载调用。
使用App Shell和Service Worker可以将首次同示例应用交互的时间从2356毫秒减少到128毫秒。
最后,Rickabaugh说,Web App Manifest是“一个标准,允许你指定应用程序的元数据。”其用途是允许将Web应用“安装”在设备上。运行这些应用中的任何一个,其外观和感觉都跟原生应用一样,因为浏览器边框可以隐藏。
最大的问题是有关progressive web apps的这三项技术中有两项在Safari或Edge浏览器中无效。
App Shell之所以有效是因为它在应用加载前会渲染成HTML传给客户端。Service Worker是一项尚处于发展中的Web平台开发技术,随着时间推移,会有更多的浏览器支持。Web App Manifest只在Android上有效。iOS目前有自己的方式让应用出现在用户的主界面上,而不需要浏览器边框。
感兴趣的读者可以在YouTube上观看完整视频。
查看英文原文:Angular Mobile Toolkit Tries to Make Web Apps Feel Native