workers

AMD: require(["geoscene/core/workers"], (workers) => { /* code goes here */ });
ESM: import * as workers from "@geoscene/core/core/workers";
类: geoscene/core/workers
起始版本:GeoScene Maps SDK for JavaScript 4.2

此模块是一个实用框架,它简化了 Web Workers 在 GeoScene Maps SDK for JavaScript 中的使用。

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

已知限制

方法概述

名称 返回值类值 描述 对象
Promise<Connection>

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

更多详情
workers

方法详细说明

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

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

参数
规范
modulePath String

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

options Object
optional

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

规范
client Object
optional

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

strategy String
optional
默认值: distributed

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

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

可能值"distributed"|"dedicated"|"local"

optional

AbortSignal 允许取消异步作业。如果取消,则承诺将被拒绝,并返回一个名为 AbortError 的错误。另请参见 AbortController

返回
类型 描述
Promise<Connection> 解析为 Connection 的实例。
另请参阅
示例
// Set the path for the worker's AMD loader configuration
// to a folder called workersFolder.
geosceneConfig.workers.loaderConfig = {
 paths: {
   myWorkers: new URL("./workersFolder", document.baseURI).href
 }
};

// load myWorkers/Calculator.js in the workers framework
// and invoke its "getMaxNumber" method
workers.open(this, "myWorkers/Calculator")
  .then((connection) => {
    return connection.invoke("getMaxNumber", [0, 1, 2, 3, 4]);
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// module: workerFolder/Calculator.js
//*********************************************************
define([], () => {
  return {
    // this function can be invoked from the main thread
    getMaxNumber: function (number) {
      return Math.max.apply(null, numbers);
    }
  };
});
// Load workerScripts/TimeOfTheDay.js in the workers framework
// We define an API accessible from the module
workers.open("workerScripts/TimeOfTheDay", {
  client: {
    getCurrentTime: function() {
      return Date.now();
    }
  }
})
  .then((connection) => {
    return connection.invoke("timeOfTheDay");
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// module: workerScripts/TimeOfTheDay.js
//*********************************************************

define([], () => {

  return {
    timeOfTheDay: function(noArgs, remoteClient) {
      // call back the main thread to get the current time over there.
      return remoteClient.invoke("getCurrentTime")
        .then((time) => {
          return "The time is " + time;
        });
    }
  };
});

您的浏览器不再受支持。请升级您的浏览器以获得最佳体验。请参阅浏览器弃用帖子以获取更多信息