workers

AMD: require(["geoscene/core/workers"], (workers) => { /* 代码 */ });
ESM: import * as workers from "@geoscene/core/core/workers";
对象: geoscene/core/workers
起始版本: GeoScene API for JavaScript 4.22

workers 框架利用多核 CPU 在后台线程中执行计算成本高昂的任务,而不会干扰用户界面。此框架加载一个脚本,并使用 Connection 类在主线程中提供调用函数。然后,可以使用连接将作业从主线程异步卸载到 workers。一旦作业完成,workers 框架将返回 Promise

已知限制

方法列表

名称 返回值类型 描述 对象
Promise<Connection>更多信息

打开与 workers 的连接,并使用 workers 框架加载脚本。

更多信息workers

方法详细说明

open(modulePath, options){Promise<Connection>}static

打开与 workers 的连接,并使用 workers 框架加载脚本。

参数:
规范:
modulePath String

要使用 works 框架执行的脚本的完全限定 URL。

options Object
optional

Worker 选项。有关对象规范,请参阅下面的属性。

规范:
client Object
可选

定义可从模块访问的 API 的对象。

strategy String
可选
默认值: distributed

指示如何加载模块。有关可能值的列表,请参阅下表。

可能值 描述
distributed 该模块加载在每个可用的 worker 中。对 Connection 的每个调用都将针对一个可用的 worker。如果模块不维护调用之间的信息(无状态),请使用此策略。
dedicated 该模块加载在一个 worker 中。对 Connection 的每个调用都将针对同一 worker。如果模块维护来自先前调用的信息,或者主线程和 worker 线程之间的通信需要有状态,请使用此策略。
local 模块加载到主线程中。在禁用 workers 同时在使用 worker 框架 API 时使用此策略。

可选值:"distributed"|"dedicated"|"local"

signal AbortSignal
optional

AbortSignal 允许取消异步作业。 如果取消, promise 将被拒绝,并出现一个名为 AbortError 的错误。另参阅 AbortController

返回值:
类型 描述
Promise<Connection> 解析为 Connection 的实例。
另参阅:
示例代码:
// 将 worker 的 AMD 加载器配置的路径设置为名为 workersFolder 的文件夹。
geosceneConfig.workers.loaderConfig = {
 paths: {
   myWorkers: new URL("./workersFolder", document.baseURI).href
 }
};

// 在 worker 框架中加载 myWorkers/Calculator.js 并调用它的 “getMaxNumber” 方法
workers.open(this, "myWorkers/Calculator")
  .then((connection) => {
    return connection.invoke("getMaxNumber", [0, 1, 2, 3, 4]);
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// 模块: workerFolder/Calculator.js
//*********************************************************
define([], () => {
  return {
    // 该函数可以从主线程调用
    getMaxNumber: function (number) {
      return Math.max.apply(null, numbers);
    }
  };
});
// 在 workers 框架中加载 workerScripts/TimeOfTheDay.js 我们定义了一个可以从模块访问的 API
workers.open("workerScripts/TimeOfTheDay", {
  client: {
    getCurrentTime: function() {
      return Date.now();
    }
  }
})
  .then((connection) => {
    return connection.invoke("timeOfTheDay");
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// 模块: workerScripts/TimeOfTheDay.js
//*********************************************************

define([], () => {

  return {
    timeOfTheDay: function(noArgs, remoteClient) {
      // 调回主线程获取那里的当前时间。
return remoteClient.invoke("getCurrentTime") .then((time) => { return "The time is " + time; }); } }; });

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.