元数据

JavaScript高级程序设计(第4版)

  •  JavaScript高级程序设计(第4版)|200
  • 书名: JavaScript高级程序设计(第4版)
  • 作者: 马特·弗里斯比
  • 简介:
  • 出版时间
  • ISBN:
  • 分类:
  • 出版社: 人民邮电出版社

高亮划线

27.1 工作者线程简介

  • 📌 工作者线程能够使用SharedArrayBuffer在多个环境间共享内容。 ^CB-1sAEnCEnXFhu6aE6YE-193-1908-1945

    • ⏱ 2022-07-26 02:30:33
  • 📌 工作者线程是以实际线程实现的。 ^CB-1sAEnCEnXFhu6aE6YE-193-1100-1317

    • ⏱ 2022-07-26 02:31:02
  • 📌 工作者线程不一定在同一个进程里。 ^CB-1sAEnCEnXFhu6aE6YE-193-2464-2695

    • ⏱ 2022-07-26 02:31:08
  • 📌 工作者线程有自己独立的事件循环、全局对象、事件处理程序和其他JavaScript环境必需的特性。 ^CB-1sAEnCEnXFhu6aE6YE-193-3056-3104

    • ⏱ 2022-07-26 02:31:54
  • 📌 三种主要的工作者线程:专用工作者线程、共享工作者线程和服务工作者线程。 ^CB-1sAEnCEnXFhu6aE6YE-193-3495-3907

    • ⏱ 2022-07-26 02:32:55
  • 📌 专用工作者线程,顾名思义,只能被创建它的页面使用。 ^CB-1sAEnCEnXFhu6aE6YE-193-4229-4254

    • ⏱ 2022-07-26 02:33:54
  • 📌 拦截、重定向和修改页面发出的请求 ^CB-1sAEnCEnXFhu6aE6YE-193-4581-4597

    • ⏱ 2022-07-26 02:36:06

27.2 专用工作者线程

  • 📌 可以把专用工作者线程称为后台脚本(background script)。 ^CB-1sAEnCEnXFhu6aE6YE-194-1239-1366

    • ⏱ 2022-08-06 01:25:43
  • 📌 只能从与父页面相同的源加载 ^CB-1sAEnCEnXFhu6aE6YE-194-2870-2883

    • ⏱ 2022-08-06 01:27:29
  • 📌 创建之后,专用工作者线程就会伴随页面的整个生命期而存在,除非自我终止(self.close())或通过外部终止(worker.terminate())。即使线程脚本已运行完成,线程的环境仍会存在。 ^CB-1sAEnCEnXFhu6aE6YE-194-9416-9514

    • ⏱ 2022-08-06 11:01:34
  • 📌 初始化时,虽然工作者线程脚本尚未执行,但可以先把要发送给工作者线程的消息加入队列。这些消息会等待工作者线程的状态变为活动,再把消息添加到它的消息队列。 ^CB-1sAEnCEnXFhu6aE6YE-194-8756-8831

    • ⏱ 2022-08-06 11:02:53
  • 📌 工作者线程不需要执行同步停止,因此在父上下文的事件循环中处理的”bar”仍会打印出来。 ^CB-1sAEnCEnXFhu6aE6YE-194-10182-10277

    • ⏱ 2022-08-06 11:04:50
  • 📌 在整个生命周期中,一个专用工作者线程只会关联一个网页 ^CB-1sAEnCEnXFhu6aE6YE-194-11145-11171

    • ⏱ 2022-08-06 11:09:13
  • 📌 MessageChannel实例有两个端口,分别代表两个通信端点。 ^CB-1sAEnCEnXFhu6aE6YE-194-20670-20703

    • ⏱ 2022-08-07 18:26:20
  • 📌 结构化克隆算法可用于在两个独立上下文间共享数据。该算法由浏览器在后台实现,不能直接调用。在通过postMessage()传递对象时,浏览器会遍历该对象,并在目标上下文中生成它的一个副本。 ^CB-1sAEnCEnXFhu6aE6YE-194-26275-26508

    • ⏱ 2022-08-07 18:40:42
  • 📌 使用可转移对象(transferable objects)可以把所有权从一个上下文转移到另一个上下文。 ^CB-1sAEnCEnXFhu6aE6YE-194-28122-28277

    • ⏱ 2022-08-07 18:41:58
  • 📌 只有如下几种对象是可转移对象:❑ ArrayBuffer❑ MessagePort❑ ImageBitmap❑ OffscreenCanvaspostMessage()方法的第二个可选参数是数组,它指定应该将哪些对象转移到目标上下文。 ^CB-1sAEnCEnXFhu6aE6YE-194-28307-28638

    • ⏱ 2022-08-07 18:43:41
  • 📌 worker.postMessage(arrayBuffer, [arrayBuffer]); ^CB-1sAEnCEnXFhu6aE6YE-194-29738-29813

    • ⏱ 2022-08-07 18:46:50
  • 📌 worker.postMessage(arrayBuffer); ^CB-1sAEnCEnXFhu6aE6YE-194-29057-29091

    • ⏱ 2022-08-07 18:46:59
  • 📌 SharedArrayBuffer作为ArrayBuffer能够在不同浏览器上下文间共享。在把SharedArrayBuffer传给postMessage()时,浏览器只会传递原始缓冲区的引用。结果是,两个不同的JavaScript上下文会分别维护对同一个内存块的引用。 ^CB-1sAEnCEnXFhu6aE6YE-194-31169-31304

    • ⏱ 2022-08-07 18:50:37
  • 📌 为解决该问题,可以使用 ^CB-1sAEnCEnXFhu6aE6YE-194-34212-34223

    • ⏱ 2022-08-07 18:52:59
  • 📌 Atomics.add() ^CB-1sAEnCEnXFhu6aE6YE-194-34296-34309

    • ⏱ 2022-08-07 18:53:10

27.3 共享工作者线程

  • 📌 共享工作者线程与专用工作者线程的一个重要区别在于,虽然Worker()构造函数始终会创建新实例,而SharedWorker()则只会在相同的标识不存在的情况下才创建新实例。 ^CB-1sAEnCEnXFhu6aE6YE-195-2279-2365

    • ⏱ 2022-08-07 21:13:38
  • 📌 共享工作者线程标识源自解析后的脚本URL、工作者线程名称和文档源。 ^CB-1sAEnCEnXFhu6aE6YE-195-2510-2543

    • ⏱ 2022-08-07 21:13:54
  • 📌 专用工作者线程只跟一个页面绑定,而共享工作者线程只要还有一个上下文连接就会持续存在。 ^CB-1sAEnCEnXFhu6aE6YE-195-6547-6589

    • ⏱ 2022-08-07 21:18:35

27.4 服务工作者线程

  • 📌 服务工作者线程(service worker)是一种类似浏览器中代理服务器的线程,可以拦截外出请求和缓存响应。 ^CB-1sAEnCEnXFhu6aE6YE-196-396-549

    • ⏱ 2022-08-07 21:22:05
  • 📌 来自一个域的多个页面共享一个服务工作者线程。 ^CB-1sAEnCEnXFhu6aE6YE-196-732-754

    • ⏱ 2022-08-07 21:23:17
  • 📌 服务工作者线程在两个主要任务上最有用:充当网络请求的缓存层和启用推送通知。 ^CB-1sAEnCEnXFhu6aE6YE-196-867-904

    • ⏱ 2022-08-07 21:24:10
  • 📌 (Ctrl+Shift+R)。强制刷新会强制浏览器忽略所有网络缓存,而服务工作者线程对大多数主流浏览器而言就是网络缓存。 ^CB-1sAEnCEnXFhu6aE6YE-196-1537-1597

    • ⏱ 2022-08-07 21:26:05
  • 📌 navigator.serviceWorker.register(‘./emptyServiceWorker.js’); ^CB-1sAEnCEnXFhu6aE6YE-196-2525-2624

    • ⏱ 2022-08-07 21:28:33
  • 📌 服务工作者线程API只能在安全上下文(HTTPS)下使用。 ^CB-1sAEnCEnXFhu6aE6YE-196-11324-11353

    • ⏱ 2022-08-07 21:32:59
  • 📌 CacheStorage通过字符串映射到Cache对象。Cache对象跟CacheStorage一样,类似于异步的Map。Cache键可以是URL字符串,也可以是Request对象。这些键会映射到Response对象。 ^CB-1sAEnCEnXFhu6aE6YE-196-24135-24244

    • ⏱ 2022-08-07 21:43:18
  • 📌 已激活状态表示服务工作者线程正在控制一个或多个客户端。在这个状态,服务工作者线程会捕获其作用域中的fetch()事件、通知和推送事件。 ^CB-1sAEnCEnXFhu6aE6YE-196-46650-46763

    • ⏱ 2022-08-07 21:51:23
  • 📌 服务工作者线程是无状态的 ^CB-1sAEnCEnXFhu6aE6YE-196-50914-50926

    • ⏱ 2022-08-07 21:54:10
  • 📌 如果浏览器检测到某个服务工作者线程空闲了,就可以终止它并在需要时再重新启动。这意味着可以依赖服务工作者线程在激活后处理事件,但不能依赖它们的持久化全局状态。 ^CB-1sAEnCEnXFhu6aE6YE-196-51265-51343

    • ⏱ 2022-08-07 21:54:47

读书笔记

本书评论