diff --git a/html/early.js b/html/early.js
index 6e9b490..f7cec98 100644
--- a/html/early.js
+++ b/html/early.js
@@ -583,16 +583,54 @@ function get_history() {
}
historyQueued.resolve();
}
+function handleJsonWorker(e) {
+ const url = e.data.url;
+ //console.log("url finished: " + url);
+ const defer = g.jwr[url];
+ delete g.jwr[url];
+
+ defer.resolve(e.data.json);
+};
+
+function jsonGetWorker(url) {
+ const defer = jQuery.Deferred();
+ g.jwr[url] = defer;
+ const wid = g.jsonGetId++ % g.jsonWorker.length;
+ //console.log(`using worker ${wid}`);
+ g.jsonWorker[wid].postMessage(url);
+
+ return defer;
+}
+
+g.jWorkers = 0;
+if (g.jWorkers) {
+ g.jwr = {};
+
+ g.jsonWorker = [];
+ g.jsonGetId = 0;
+
+ for (let i = 0; i < g.jWorkers; i++) {
+ const worker = new Worker("jsonWorker.js");
+ g.jsonWorker.push(worker);
+ worker.onmessage = handleJsonWorker;
+ }
+
+}
function get_history_item(i) {
let request;
if (HistoryChunks) {
- let filename = chunkNames[i];
- request = jQuery.ajax({ url: 'chunks/' + filename,
- timeout: historyTimeout * 1000,
- dataType: 'json'
- });
+ const url = 'chunks/' + chunkNames[i];
+
+ if (g.jWorkers) {
+ request = jsonGetWorker(url);
+ } else {
+ request = jQuery.ajax({ url: url,
+ timeout: historyTimeout * 1000,
+ dataType: 'json'
+ });
+ }
} else {
request = jQuery.ajax({ url: 'data/history_' + i + '.json',
@@ -608,6 +646,7 @@ function get_history_item(i) {
.fail(function(jqxhr, status, error) {
jQuery("#loader_progress").attr('value',++HistoryItemsLoaded);
});
+
deferHistory.push(request);
}
diff --git a/html/jsonWorker.js b/html/jsonWorker.js
new file mode 100644
index 0000000..9209adc
--- /dev/null
+++ b/html/jsonWorker.js
@@ -0,0 +1,15 @@
+
+onmessage = (e) => {
+ const url = e.data;
+ fetch(new Request(url))
+ .then((response) => {
+ if (!response.ok) {
+ throw new Error(`HTTP error! Status: ${response.status} ${response.url}`);
+ }
+ return response.json();
+ })
+ .then((data) => {
+ //console.log("worker posting data with url: " + url);
+ postMessage({ url: url, json: data });
+ })
+};
diff --git a/html/layers.js b/html/layers.js
index 26deeee..42570b5 100644
--- a/html/layers.js
+++ b/html/layers.js
@@ -22,7 +22,7 @@ function createBaseLayers() {
let us = new ol.Collection();
let europe = new ol.Collection();
- const tileTransition = onMobile ? 0 : 150;
+ const tileTransition = onMobile ? 0 : 0;
if (loStore['customTiles'] != undefined) {
custom_layers.push(new ol.layer.Tile({
diff --git a/html/script.js b/html/script.js
index 56266c0..b8c5308 100644
--- a/html/script.js
+++ b/html/script.js
@@ -508,7 +508,7 @@ function afterFirstFetch() {
}
console.timeEnd('afterFirstFetch()');
- }, 150);
+ }, 50);
}
let debugFetch = false;
@@ -720,29 +720,32 @@ function initialize() {
processQueryToggles();
- jQuery.when(historyQueued).done(push_history);
-
- if (nHistoryItems) {
- jQuery.when(historyLoaded).done(afterHistoryLoad);
- } else {
- afterHistoryLoad();
- }
+ tryStartPage();
});
}
-function afterHistoryLoad() {
- if (!heatmap)
- jQuery("#loader").hide();
- if (!zstdDecode) {
+function doHistory() {
+
+ jQuery.when(historyQueued).done(push_history);
+
+ if (nHistoryItems) {
+ jQuery.when(historyLoaded).done(startPage);
+ } else {
startPage();
+ }
+}
+
+function tryStartPage() {
+ if (!zstdDecode) {
+ doHistory();
} else {
try {
zstddec.promise.then(function() {
- startPage();
+ doHistory();
});
} catch (e) {
webAssemblyFail(e);
- startPage();
+ doHistory();
}
}
}
@@ -1670,6 +1673,29 @@ jQuery('#selected_altitude_geom1')
jQuery('#imageConfigLink').text(imageConfigText)
jQuery('#imageConfigHeader').show();
}
+
+
+ if (!globeIndex) {
+ jQuery("#lastLeg_cb").parent().hide();
+ jQuery('#show_trace').hide();
+ }
+ if (globeIndex) {
+ toggleTableInView('enable');
+ if (icaoFilter) {
+ toggleTableInView('disable');
+ }
+ } else {
+ jQuery('#V').show();
+ }
+
+ if (hideButtons) {
+ jQuery('#header_top').hide();
+ jQuery('#header_side').hide();
+ jQuery('#tabs').hide();
+ jQuery('#filterButton').hide();
+ jQuery('.ol-control').hide();
+ jQuery('.ol-attribution').show();
+ }
}
function initLegend(colors) {
@@ -1909,8 +1935,6 @@ function parseHistory() {
plane.last_message_time -= 999;
}
}
- refreshFeatures();
- TAR.planeMan.refresh();
}
console.timeEnd("Loaded aircraft tracks from History");
@@ -1982,7 +2006,7 @@ function setIntervalTimers() {
}
if (receiverJson && receiverJson.outlineJson) {
timers.drawOutline = window.setInterval(drawOutlineJson, actualOutline.refresh);
- drawOutlineJson();
+ setTimeout(drawOutlineJson, 50);
}
if (aiscatcher_server) {
@@ -2003,7 +2027,12 @@ function setIntervalTimers() {
}
timersActive = true;
- fetchData();
+
+ setTimeout(fetchData, 5);
+
+ updateVisible();
+ mapRefresh();
+
// in case the visibility changed while this was running
handleVisibilityChange();
}
@@ -2013,28 +2042,8 @@ let dstring;
let dresult;
function startPage() {
-
- if (!globeIndex) {
- jQuery("#lastLeg_cb").parent().hide();
- jQuery('#show_trace').hide();
- }
- if (globeIndex) {
- toggleTableInView('enable');
- if (icaoFilter) {
- toggleTableInView('disable');
- }
- } else {
- jQuery('#V').show();
- }
-
- if (hideButtons) {
- jQuery('#header_top').hide();
- jQuery('#header_side').hide();
- jQuery('#tabs').hide();
- jQuery('#filterButton').hide();
- jQuery('.ol-control').hide();
- jQuery('.ol-attribution').show();
- }
+ if (!heatmap)
+ jQuery("#loader").hide();
changeZoom("init");
changeCenter("init");
@@ -2076,9 +2085,7 @@ function startPage() {
if (pTracks)
setTimeout(TAR.planeMan.refresh, 10000);
- window.addEventListener("beforeunload", function (event) {
- clearIntervalTimers();
- });
+ window.addEventListener("beforeunload", clearIntervalTimers);
if (heatmap || replay || showTrace || pTracks || inhibitFetch) {
afterFirstFetch();
@@ -5489,10 +5496,13 @@ function refresh(redraw) {
// before planeman refresh / mapRefresh
updateVisible();
+ mapRefresh(redraw);
+
//console.time("refreshTable");
TAR.planeMan.refresh();
//console.timeEnd("refreshTable");
- mapRefresh(redraw);
+
+
refreshSelected();
refreshHighlighted();