BTCStorage
Ensign
- Registriert
- Mai 2020
- Beiträge
- 166
Hallo, ich baue zur Zeit mit Node.js einige Sachen und stelle zur Zeit etwas fest wo ich denke das man es optimieren koennte, mir fehlt aber noch die Erfahrung, ich will das gerne noch lernen zu optimieren.
Ich stehe hier vor folgenden problem.
In einer Funktion welche mit setTimeout alle 3 Sekunden aufgerufen wird sind 3 weitere Funktionen welche von Crypto Exchanges API Daten lesen. Die Intervalfunktion welche also jedesmal nach Ablauf von Zeit erneut aufgerufen wird sollte eiegntlich alle 3 Sekunden eine neue console.log ausdrucken und somit bestaetigen das alles laeuft ohne irgendwo Blockaden zu haben.
Ich sehe aber das es oft vorkommt das die Zeitabstaende zwischen den console logs einige Sekunden sind auch mal 10 oder 30 sekunden. Mir ist zwar bewust das es an den Funktionen liegt welche innerhalb der Intervalfunktion aufgerufen werden jedoch fehlt mir noch die Erfahrung dies zu optimeiren.
Was machen nun die Funktionen welche in der Intervalfunktion jedesmal erneut aufgerufen werde. Nun diese Funktionen arbeiten auf eine recrusive Art, sie elsen zum beispiel von einem Exchange Konto alle abgeschlossenen Trades da die APi aber nur 100 Trades zurueck gibt muste ich die Funktion recrusive bauen, das heist sie wird jedesmal weitere 100 tardes abfragen bis die komplette Tradehistorie gelsen wurde.
Ich koennte jetzt natuerlich dieses recrusive lesen raus bauen und bei Ablauf von jeweils 3 Sekunden dann die naechsten 100 Trades lesen, aber ich frage mich ob es auch moeglich ist das ganze so zu optimieren das Node.js irgendwie im Hintergrund das recrusive lesen weiter fuehrt ohne den Ablauf der Intervalfunktion zu blockieren. Also ich poste jetzt noch Beispielcode damit man es bisjen einfacher versteht.
Und hier ist noch ein beispiel einer Funktion welche recrusive Daten lest:
Wenn ich also die Funktion aender und nicht recrusive weitere trades von der api lese, dann klappt es mit den Einhalten von 3 Sekunden, dann bekomme ich alle 3 Sekunden von der Intervalfunktion eine console log ausgedruckt, aber ich frage mich bo man das ganze irgendwie so aufbauen kann damit auch recrusive lesen weiter funktioniert und aber auch das die Intervalfunktion weiter alle 3 Sekunden eine neue console log ausdruckt, also in anderen Worten damit nichts blockiert wird im Ablauf vom ganzen Program.
Das wuerde ich gerne lernen da fehlen mir noch genug Erfahrungen mit Node.js, habt ihr gute Tipps?
Ich stehe hier vor folgenden problem.
In einer Funktion welche mit setTimeout alle 3 Sekunden aufgerufen wird sind 3 weitere Funktionen welche von Crypto Exchanges API Daten lesen. Die Intervalfunktion welche also jedesmal nach Ablauf von Zeit erneut aufgerufen wird sollte eiegntlich alle 3 Sekunden eine neue console.log ausdrucken und somit bestaetigen das alles laeuft ohne irgendwo Blockaden zu haben.
Ich sehe aber das es oft vorkommt das die Zeitabstaende zwischen den console logs einige Sekunden sind auch mal 10 oder 30 sekunden. Mir ist zwar bewust das es an den Funktionen liegt welche innerhalb der Intervalfunktion aufgerufen werden jedoch fehlt mir noch die Erfahrung dies zu optimeiren.
Was machen nun die Funktionen welche in der Intervalfunktion jedesmal erneut aufgerufen werde. Nun diese Funktionen arbeiten auf eine recrusive Art, sie elsen zum beispiel von einem Exchange Konto alle abgeschlossenen Trades da die APi aber nur 100 Trades zurueck gibt muste ich die Funktion recrusive bauen, das heist sie wird jedesmal weitere 100 tardes abfragen bis die komplette Tradehistorie gelsen wurde.
Ich koennte jetzt natuerlich dieses recrusive lesen raus bauen und bei Ablauf von jeweils 3 Sekunden dann die naechsten 100 Trades lesen, aber ich frage mich ob es auch moeglich ist das ganze so zu optimieren das Node.js irgendwie im Hintergrund das recrusive lesen weiter fuehrt ohne den Ablauf der Intervalfunktion zu blockieren. Also ich poste jetzt noch Beispielcode damit man es bisjen einfacher versteht.
Javascript:
function IntervalFunction1()
{
try
{
console.log("=================================================================================================================================");
console.log("============================================ IntervalFunction1 "+new Date(Date.now()).toLocaleString()+" ===========================================================================");
console.log("=================================================================================================================================");
let a=0;
OpenOrdersAndBalance(Kontos[a].account, Kontos[a].key, Kontos[a].secret);
GetClosedTradesRecursive(Kontos[a].account, Kontos[a].key, Kontos[a].secret);
GetOrders(Kontos[a].account, Kontos[a].key, Kontos[a].secret);
setTimeout(IntervalFunction1, 3000);
}
catch (error)
{
console.error('IntervalFunction1, Ein Fehler ist aufgetreten:', error);
setTimeout(IntervalFunction1, 3000);
}
}//IntervalFunction1
IntervalFunction1();
Und hier ist noch ein beispiel einer Funktion welche recrusive Daten lest:
Javascript:
async function GetOrders(account, key, secret, nextPageCursor = '')
{
const Client = new FuturesClient({
apiKey: key,
apiSecret: secret,
});
try {
const getOrders = await Client.getProductTypeOrderHistory("usdt", 0, Date.now(), '100', nextPageCursor);
for(let a=0; a<Object.size(getOrders.data.orderList); a++)
{
//console.log("getOrders result: ", getOrders.data.orderList[a]);
}
//wenn es mehr daten gibt wird hier ein nextpagecursor gelesen und die funktion wird recrusive erneut aufgerufen
let nextPage = ""; if(getOrders.data.endId !== undefined)nextPage=getOrders.data.endId; if(getOrders.data.nextFlag == false)nextPage="";
if(nextPage !== "")
{
setTimeout(async () => {
await GetOrders(account, key, secret, nextPage);
}, 900);
}
else
{
console.log("========= get orders gespeichert ==================");
}
}
catch (e) {
console.error('request failed: ', e);
}
}
Wenn ich also die Funktion aender und nicht recrusive weitere trades von der api lese, dann klappt es mit den Einhalten von 3 Sekunden, dann bekomme ich alle 3 Sekunden von der Intervalfunktion eine console log ausgedruckt, aber ich frage mich bo man das ganze irgendwie so aufbauen kann damit auch recrusive lesen weiter funktioniert und aber auch das die Intervalfunktion weiter alle 3 Sekunden eine neue console log ausdruckt, also in anderen Worten damit nichts blockiert wird im Ablauf vom ganzen Program.
Das wuerde ich gerne lernen da fehlen mir noch genug Erfahrungen mit Node.js, habt ihr gute Tipps?