繁体   English   中英

如何将繁重的地理编码转移到网络工作者?

[英]how to move heavy geocoding to a web-worker?

我有大量的地理位置要转换为与Geocoder协调的地理位置,我认为最好的方法是将任务移至网络工作者,否则Firefox超时并且永远不会加载页面。

// the main html file:
var myWorker = new Worker('datapointscollection.js');
  myWorker.onmessage = function(e) {
      document.getElementById('loadingStatus').innerHTML = count + " elements from " + all + "are ready.";
      if (count == all) {
        myWorker.terminate();
        myWorker = undefined;
      }
  };

   myWorker.postMessage([geocodingParams]);

// the worker js file:
self.importScripts("http://js.api.here.com/v3/3.0/mapsjs-core.js");
self.importScripts("http://js.api.here.com/v3/3.0/mapsjs-service.js");
self.importScripts("http://js.api.here.com/v3/3.0/mapsjs-ui.js");
self.importScripts("http://js.api.here.com/v3/3.0/mapsjs-mapevents.js");
self.addEventListener(
'message', 
function(e) {
  var count = 0;
  var all = 0;

  // Initialize the platform object:
  var platform = new H.service.Platform({
  'app_id': 'myappID',
  'app_code': 'myappCODE'
  });

  var geocoder = platform.getGeocodingService();

  var onResult = function(result) {};

  var findLocations = function(geocodingParams) {
    var i=0;
    all = geocodingParams.length;
    for (i=0; i<geocodingParams.length; i++) {
      geocoder.geocode(
        geocodingParams[i], 
        onResult, 
        function(e){
            alert(e);
        } );
      count = i;
      self.postMessage(count, all);
    }
  };

  findLocations(e.data[0]);
}, 
false);

我尝试了不同的方法,但是执行工作脚本失败并出现不同的错误。 最后一个问题是ReferenceError:mapsjs-core.js:158:623中未定义文档。 不久后又出现另一个错误:NetworkError:发生网络错误。 来自datapointscollection.js:1

对于大量的地理编码,您应该考虑批量地理编码。 在developer.here.com上查看开发人员指南。

看来您要导入到工作器中的文件取决于现有的DOM。 您的Web工作者没有DOM,因此您将必须使用不需要DOM的依赖项(如果它可以在节点中工作,则无需DOM就可以工作)。 检查文档以了解您的依赖项,以查看是否存在可以在节点中使用或不需要DOM的版本,并在Web Worker中使用该版本。 (它可能只是mapsjs-service.js文件。请看您是否可以解决这个问题)。

另请参阅Web Workers API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM