Ich bin selbst leicht "erstaunt", das es funktioniert, weil eigentlich darf die gecachte Instanz nur die default 1000 setState pro Minute triggern, aber der callback in den subscriptions läßt sich evtl. nicht auf die zurückverfolgen, oder ist so schnell rum, das noch kein Limiter anspricht?
Und weil ich es in meiner "leeren" Instanz.1 getestet habe, läuft da auch sonst gar nix
"use strict";
const loops=5000;
let start=0;
let end=0;
async function test_asyncStartPingPong() {
// short delay, to let everything register...
await new Promise(r => setTimeout(r, 2000));
console.log("Start "+loops+".loops PingPong now!");
start=Date.now();
// start ping pong
await setStateAsync('0_userdata.0.test1',loops);
}
on({id: '0_userdata.0.test1', change:'any'},
function (obj) {
setState('0_userdata.0.test2', obj.state.val-1);
});
on({id: '0_userdata.0.test2', change:'any'},
function (obj) {
if (obj.state.val>0)
setState('0_userdata.0.test1', obj.state.val-1);
else
{
end=Date.now();
console.log(loops+".loops PingPong, received .val "+obj.state.val+" in " + obj.id + ", delta " + (end-start) + "ms");
}
});
test_asyncStartPingPong();
Ohne "Caching" geht gar nix, obwohl in meinem Script keine getStates sind, werden welche angemosert, und globale/common Files habe ich keine expliziten in Instanz.1. Und die Werte schwanken "stark", der erste Wert ist direkt nach dem ich die Instanz neu gestartet habe, da ist die aber im Hintergrund evtl. noch dabei, den Cache zu füllen, nach 5 min Wartezeit ist das ganze 10x schneller, dann sogar nochmal etwas schneller, und dann ist es deutlich langsamer, da kann halt auch noch sonstwas auf dem ioBroker los sein, oder auch die anderen VMs auf dem esxi könnten "sonstwas" treiben...
21:59:15.800 info javascript.1 (327919) Start javascript script.js.TestInstanz1.PerformanceTests
21:59:15.813 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
21:59:17.813 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: Start 5000.loops PingPong now!
22:00:00.194 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: 5000.loops PingPong, received .val -1 in 0_userdata.0.test2, delta 42380ms
22:05:12.407 info javascript.0 (327870) Stop script script.js.TestInstanz1.PerformanceTests
22:05:12.413 info javascript.1 (327919) Stop script script.js.TestInstanz1.PerformanceTests
22:05:12.416 info javascript.1 (327919) Start javascript script.js.TestInstanz1.PerformanceTests
22:05:12.422 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
22:05:14.422 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: Start 5000.loops PingPong now!
22:05:19.332 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: 5000.loops PingPong, received .val -1 in 0_userdata.0.test2, delta 4910ms
22:05:42.881 info javascript.0 (327870) Stop script script.js.TestInstanz1.PerformanceTests
22:05:42.885 info javascript.1 (327919) Stop script script.js.TestInstanz1.PerformanceTests
22:05:42.931 info javascript.1 (327919) Start javascript script.js.TestInstanz1.PerformanceTests
22:05:42.934 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
22:05:44.934 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: Start 5000.loops PingPong now!
22:05:49.415 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: 5000.loops PingPong, received .val -1 in 0_userdata.0.test2, delta 4481ms
22:06:04.647 info javascript.1 (327919) Stop script script.js.TestInstanz1.PerformanceTests
22:06:04.646 info javascript.0 (327870) Stop script script.js.TestInstanz1.PerformanceTests
22:06:04.650 info javascript.1 (327919) Start javascript script.js.TestInstanz1.PerformanceTests
22:06:04.653 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
22:06:06.653 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: Start 5000.loops PingPong now!
22:06:17.941 info javascript.1 (327919) script.js.TestInstanz1.PerformanceTests: 5000.loops PingPong, received .val -1 in 0_userdata.0.test2, delta 11287ms
Ich danke, man kann so eine ungefähre Aussage zur RoundTrip-Zeit machen, im Optimalfall ist es ca. 1 ms, die es vom setState bis zur Ankunft im subscribe-Callback braucht (auf meinem 3,7GHz-Xeon).
Christian