[英]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.