workers

此模块是‎‎实用‎‎框架,简化了 JavaScript ‎‎ArcGIS‎‎ API 中 Web 工作人员的使用。‎

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

方法概述

  • open():‎打开与工作人员的连接,并加载与工作负荷框架的脚本。

方法详情

  • open(modulePath, options):打开与工作人员的连接,并加载与工作负荷框架的脚本。参数
    • modulePath:‎一个完全限定的脚本 URL,用于使用工作程序框架执行
    • options:辅助角色选项。有关对象规范,请参阅下面的属性
      • client :‎定义可从模块访问的 API 的对象。
      • strategy :默认值是distributed。指示如何加载模块。有关可能值的列表。"distributed"|"dedicated"|"local"
      • signal :AbortSignal‎‎‎允许可取消的异步作业。如果取消,Promise将会被拒绝并且生成一个错误。
可选值 描述
distributed ‎模块加载到每个可用工作线程中。每次启动连接都将针对可用的工作人员。如果模块不在调用(无状态)之间维护信息,请使用此策略。‎
dedicated ‎模块加载在一个工作程序中。每次启动连接‎都将针对同一个工作人员。如果模块维护来自以前调用的信息,或者主线程和工作线程之间的通信需要有状态,请使用此策略。
local 模块加载到主线程中。如果在禁用辅助角色使用时使用辅助角色框架 API,请使用此策略。‎

// 设置工人的AMD装载机配置设置
到workersFolder文件夹的路径。
esriConfig.workers.loaderConfig = {
 paths: {
   myWorkers: window.location.href.replace(/\/[^/]+$/, "/workersFolder"),
   dojo: "https://ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojo/"
 }
};

// 在workers框架中加载myWorkers/Calculator.js
并调用其“max”方法
workers.open("myWorkers/Calculator")
  .then(function(connection) {
    return connection.invoke("max", {
      numbers: [0, 1, 2, 3, 4]
    });
  })
  .then(function(result) {
    console.log(result);
  });

// 模块:workersFolder / Calculator.js
define(["esri/core/promiseUtils"], function(promiseUtils) {
  // 当加载时,workers框架将创建新的“Calculator”
  var Calculator = function Calculator() {};
  // “Calculator”模块上的任何方法都可以被调用
从主线程
  Calculator.prototype.max = function(data) {
    return Math.max.apply(null, data.numbers)
  }
  return Calculator;
});

// 在workers框架中加载workerScripts/TimeOfTheDay.js
我们定义了一个可从模块访问的API
workers.open("workerScripts/TimeOfTheDay", {
  client: {
    getCurrentTime: function() {
      return Date.now();
    }
  }
})
  .then(function(connection) {
    return connection.invoke("timeOfTheDay");
  })
  .then(function(result) {
    console.log(result);
  });


// 模块:workerScripts / TimeOfTheDay.js

define(["esri/core/promiseUtils"], function(promiseUtils) {

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

版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/workers/1178/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>