Print

PWA 面试题总结


作者: 文章来源:

本文原地址:https://www.mimiwuqi.com/webqianduan/195938.html

目录文章目录
  1. 1. 什么是 PWA?
  2. 2. PWA 有那些优点?
  3. 3. PWA 有什么缺点?
  4. 4. 如何让一个 web 应用成为 PWA?
  5. 5. 为什么我们在 PWA 中需要 Web manifest?
  6. 6. PWA 有哪些原生 app 不具备的特性?
  7. 7. Service Workers 是什么?
  8. 8. PWA 与 Hybrid 之间有什么不同?
  9. 9. 什么是 fetch 事件?
  10. 10. 对网站进行 PWA 安装有哪些要求?
  11. 11. 什么是 IndexedDB 以及如何在 PWA 中使用它?
  12. 12. 什么是 CacheStorage?
  13. 13. 说说 Service Worker 生命周期,并画出其大概流程?
  14. 14. 如何更新 Service Worker?
  15. 15. 阐述你所知道的 Service Worker 缓存策略?
  16. 16. 什么是 App Shell?
  17. 17. 一个 App Shell 应该具有什么特性?
  18. 18. 苹果设备对于 PWA 支持怎样?
  19. 19. Service Workers 是否能够同时存在多个?
  20. 20. 有哪些 Service Worker 能做但是 web worker 不能的?
  21. 21. 使用 Service Worker 线程的 App Shell 架构有哪些优势?
  22. 22. 有可能在 PWA 中拥有真正的持久存储吗?为什么需要这样的存储?
  23. 结语

最近有朋友内推部门是做 PWA 的,为了不要被问了一脸懵,所以我整理了这篇文章🤣。

PWA 应用程序像普通网页一样加载,但提供脱机工作、推送通知和设备硬件访问的功能(懂吗?这就是不用安装的 App 啊,我就不信你没见过)

废话不多说,接下来我们来看 22 个可能会询问到的 PWA 面试题,不然我写干嘛🤣。

1. 什么是 PWA?

渐进式网络应用(PWA)是谷歌在 2015 年底提出的概念。基本上算是 web 应用程序,但在外观和感觉上与原生 app类似。支持PWA的网站可以提供脱机工作、推送通知和设备硬件访问等功能。

2. PWA 有那些优点?

3. PWA 有什么缺点?

4. 如何让一个 web 应用成为 PWA?

一个web 应用要成为PWA,有需要一些关键原则需要遵守,如下:

5. 为什么我们在 PWA 中需要 Web manifest?

Web manifest以JSON格式列出关于网站的所有信息。这个文件是使网站可安装的要求之一。

它通常驻留在一个 web 程序的根文件夹。其中包含一些有用的信息,如应用程序的标题,路径不同大小的图标,可以用来表示移动操作系统上的应用程序(例如,主屏幕图标),和一个背景颜色用于加载或闪屏。浏览器需要这些信息才能在安装和主屏幕上正确显示 web 程序。

6. PWA 有哪些原生 app 不具备的特性?

7. Service Workers 是什么?

Service Worker是浏览器在后台独立于网页运行的脚本,它打开了通向不需要网页或用户交互的功能的大门。 现在,它们已包括如推送通知和后台同步等功能。 将来,Service Worker将会支持如定期同步或地理围栏等其他功能。 本教程讨论的核心功能是拦截和处理网络请求,包括通过程序来管理缓存中的响应。

这个API之所以令人兴奋,是因为它可以支持离线体验,让开发者能够全面控制这一体验。

在Service Worker出现前,存在能够在网络上为用户提供离线体验的另一个API,称为 AppCache。AppCache API 存在的许多相关问题,在设计Service Worker时已予以避免。

8. PWA 与 Hybrid 之间有什么不同?

Hybrid通常是指使用 web 和原生技术(native technology)的组合构建的应用程序,这些程序通过应用商店发布。要经过苹果、谷歌、微软等公司的应用程序商店审查程序。

PWA是使用在浏览器中运行的 Web 技术构建的应用程序,可以添加到主屏幕(就是固定到桌面🐷)。它们不需要通过本地应用程序商店发布,但可以包含在其中,Microsoft 自 2018 年起在其 Microsoft Store 中包含了PWA,并且TWA(Trusted Web Activities,是谷歌最新提供的一种将 web 页面移植到Android APP的方法)使向Google Play Store提交PWA变得更加容易。

一些Hybrid平台包括PhoneGap(又名 Cordova),Appcelerator Titanium和Ionic。您不需要一个平台来创建一个Hybrid,但它们对你很有帮助,因为它们已经在本地 API和JavaScript API之间建立了桥梁。(也就是众所周知的JSbridge🐷)

PWAs只需在浏览器中运行,因此可以使用基本的HTML,CSS和JavaScript进行构建。(前端福音,嘿嘿😂)

9. 什么是 fetch 事件?

在安装Service Worker且用户转至其他页面或刷新当前页面后,Service Worker将开始接收fetch事件

示例:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request)
      .then(function(response) {
        // Cache hit - return response
        if (response) {
          return response;
        }
        return fetch(event.request);
      }
    )
  );
});

这里我们定义了fetch事件,并且在 event.respondWith() 中,我们传入来自caches.match()的一个promise。 此方法检视该请求,并从服务工作线程所创建的任何缓存中查找缓存的结果。

如果发现匹配的响应,则返回缓存的值,否则,将调用fetch以发出网络请求,并将从网络检索到的任何数据作为结果返回。 这是一个简单的例子,它使用了在安装步骤中缓存的所有资产。

10. 对网站进行 PWA 安装有哪些要求?

要使网站可安装,它需要具备以下条件:

11. 什么是 IndexedDB 以及如何在 PWA 中使用它?

IndexedDB是大型NoSQL存储系统。它允许您在用户浏览器中存储任何内容。除了通常的search、get和put操作之外,IndexedDB还支持事务。

IndexedDB是用于客户端存储大量结构化数据(包括文件/blob)的低级 API。该API使用索引来对数据的高性能搜索。虽然DOM 存储对于存储较小数量的数据很有用,但对于存储较大数量的结构化数据则不太有用,所以说,IndexedDB提供了一个解决方案。

在PWA中,一般建议离线存储数据:

12. 什么是 CacheStorage?

CacheStorage是浏览器中的一种存储机制,用于存储和检索网络请求和响应。它以Request 为key,Response为value去存储请求和响应对象。

CacheStorage不是Service Worker API,但它使 SW 能够缓存网络响应,以便在用户断开与网络的连接时提供脱机功能。

Caches 对象(CacheStorage的一个实例)被用来访问CacheStorage,检索,存储和删除对象。

13. 说说 Service Worker 生命周期,并画出其大概流程?

Service Worker的生命周期完全独立于网页。

要为网站安装服务工作线程,您需要先在页面的JavaScript中注册。 注册服务工作线程将会导致浏览器在后台启动服务工作线程安装步骤。

在安装过程中,您通常需要缓存某些静态资产。 如果所有文件均已成功缓存,那么Service Worker就安装完毕。 如果任何文件下载失败或缓存失败,那么安装步骤将会失败,Service Worker就无法激活(也就是说,不会安装)。 如果发生这种情况,不必担心,它下次会再试一次。 但这意味着,如果安装完成,您可以知道您已在缓存中获得那些静态资产。

安装之后,接下来就是激活步骤,这是管理旧缓存的绝佳机会。

激活之后,Service Worker将会对其作用域内的所有页面实施控制,不过,首次注册该Service Worker 的页面需要再次加载才会受其控制。 服务工作线程实施控制后,它将处于以下两种状态之一:服务工作线程终止以节省内存,或处理获取和消息事件,从页面发出网络请求或消息后将会出现后一种状态。

以下是Service Worker初始安装时的简化生命周期:

PWA 面试题总结 1

16. 什么是 App Shell?

App Shell架构是构建PWA的一种方式,这种应用能可靠且即时地加载到您的用户屏幕上,与原生 app 相似。

App Shell是支持用户界面所需的最小的HTML、CSS和JavaScript,如果离线缓存,可确保在用户重复访问时提供即时、可靠的良好性能。这意味着并不是每次用户访问时都要从网络加载App Shell。 只需要从网络中加载必要的内容。

App Shell架构对具有相对不变的导航以及一直变化的内容的应用和网站意义重大。

17. 一个 App Shell 应该具有什么特性?

App Shell应能完美地执行以下操作:

18. 苹果设备对于 PWA 支持怎样?

Safari 11.1中提供了Service Worker,该产品于2018 年 3 月 29 日与iOS 11.3和macOS 10.13.4一起发布。

下面是补充注意点:

19. Service Workers 是否能够同时存在多个?

有两点要注意:

20. 有哪些 Service Worker 能做但是 web worker 不能的?

Web Workers——为 Web 内容提供在后台线程中运行脚本的简单方法。工作线程可以在不干扰用户界面的情况下执行任务。此外,它们还可以使用XMLHttpRequest执行I/O(尽管responseXML和channel属性始终为空)。创建后,工作人员可以通过将消息发布到该代码指定的事件处理程序中来向创建该代码的JavaScript 代码发送消息(反之亦然)。

Service Worker——本质上是充当位于Web app与浏览器和网络(如果可用)之间的代理服务器。它们旨在(除其他外)创建有效的脱机体验,拦截网络请求并根据网络是否可用以及服务器上是否存在更新的资产(assets)来采取适当的操作。它们还允许访问推送通知和后台同步 API。

Web Workers Service Workers
实例(Instances) 每个(Many per tab) 一对所有(One for all tabs)
存活时间(Lifespan) 与 tab 一致(Same as tab) 独立(Independent)
用途(Intended use) 并行(Parallelism) 离线支持(Offline support)

Web Worker可以方便地运行高耗能的脚本(expensive scripts,我也是看英文的,不知道翻译对不对🤣),而不会造成页面阻塞,而Service Worker有助于修改网络请求的响应(例如,构建离线 App 时😂)。

21. 使用 Service Worker 线程的 App Shell 架构有哪些优势?

22. 有可能在 PWA 中拥有真正的持久存储吗?为什么需要这样的存储?

答案是否定的。用户可以删除PWA(如果安装在Android上)并清除浏览器缓存中的所有PWA。 Cache API是临时的,当用户清除浏览器缓存时,IndexedDB数据可以被擦除。 所以要在 PWA 安装中持久化应用程序的数据,您应该通过一些API使用云存储。

结语

以上就是今天为大家整理的 PWA 相关的面试题,不管面试官会不会问,多学学也是有好处的,长长见识,说不定那天面试官就会问一下下,即使面试不问,兄弟们吹牛也可以啊😂

更多 建站教程 请访问 https://www.mimiwuqi.com/webqianduan/