簡體   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