【问题标题】:Service worker's architectureService Worker 的架构
【发布时间】:2017-10-20 08:06:15
【问题描述】:

我在 service worker MDN 文档中遇到了以下几行。 https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API 在 Service Worker 使用下。

是什么导致 Service Worker 内部无法访问本地存储

它被设计成完全异步的;因此,不能在 service worker 内部使用诸如同步 XHR 和 localStorage 之类的 API。

【问题讨论】:

  • localStorage 和 sessionStorage 在 webworker 进程中未定义。看这里stackoverflow.com/a/6179599/1741671
  • 是的,它们是未定义的,因为 webworker 在 DedicatedWorkerGlobalScope(即上下文)中运行,与我们的常规上下文窗口不同。这可能是原因。
  • 但是文档,“它被设计为完全异步”的原因让我想知道,异步在不允许在 ServiceWorkerGlobalScope 中使用 localStorage 中扮演什么角色

标签: local-storage web-worker service-worker


【解决方案1】:

访问文件系统(或网络)的同步 API 可能会在不确定的时间段内阻塞 Service Worker 的线程。这可能会阻止服务工作者在等待同步操作完成时执行有用的工作,例如响应其他事件。

如果您查看 LocalStorage API 的 documentation,您会发现它的所有方法(setItem、getItem 等)都是同步的。如果它们是异步的,那么它们要么接受回调,如 IndexedDB API,要么返回一个 Promise,如 Cache Storage API。

Service Worker 中提供 IndexedDB 和缓存存储 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2016-09-17
    相关资源
    最近更新 更多