Rolf B: Array aus einer Function abrufen (JS)

Beitrag lesen

Hallo Alex,

das klingt irgendwie nach den Speichermodellen aus der schlechten alten 16-Bit Zeit. Für die richtige Optimierung ist die Frage nun, wie dein Speichermodell genau aussieht.

  • Wieviel RAM hast Du insgesamt?
  • Müssen sich Bytecode und Arbeitsobjekte (=Variableninhalte) diesen RAM teilen?
  • Hast Du 64KB Bytecode für alle Funktionen zusammen (Modelle small/compact) oder 64KB Bytecode für jede Funktion einzeln (Modelle medium/large/huge)?
  • Ist dein Variablenspeicher auf 64KB begrenzt (Modelle small/medium) oder darf eine einzelne Variable maximal 64KB enthalten (Modelle compact/large) oder dürfen Variablen auch größer als 64KB sein (Modell huge)?

Abgesehen davon… Du schreibst:

Hier wird zum Beispiel eine Drehzahl einer Welle ausgelesen und in n gespeichert..

Nein. Du liest die Drehzahlen aller Wellen und speicherst sie als Array in n. Wenn du das musst - ok, dann musst Du das. Die Frage ist, was Du damit dann weiter machst. Die von Jürgen vorgeschlagene Speicherung der Rückgabe

var ergebnis = get_rpm();

kostet erstmal kaum Speicher, weil das Array nicht kopiert wird. get_rpm liefert ein JavaScript-Array zurück, das ist erstmal nur ein Objekt. Würdest Du es nicht speichern, kannst Du damit auch nichts tun. Und wenn der Aufrufer von get_rpm seinerseits in einer Funktion liegt, dann lebt das Array nicht länger als die aufrufende Funktion.

Natürlich kann es sein, dass deine Umgebung eine andere Speicherverwaltung hat als wir es aus dem Browser kennen. Dafür wäre es gut zu wissen, was genau Du da hast. Kann man Infos dazu im Netz finden?

Code sparen kannst Du auch, wenn Du für Standardaufgaben fertige Methoden deiner Laufzeitumgebung verwendest. Dazu müsstest Du wissen, welche JavaScript-Funktionen bereit stehen. Neuere JavaScripts kennen z.B. eine .map Methode auf Arrays, dann brauchst Du die for-Schleife nicht selbst zu programmieren und die Übertragung in ein Array auch nicht. Statt dessen schreibst Du einfach

return wellen.map(function(w) { return getAttr("nominal rotational speed", w, RDAT); });

oder - wenn dein JS bereits Pfeilfunktionen versteht

return wellen.map(w => getAttr("nominal rotational speed", w, RDAT));

Rolf

--
sumpsi - posui - clusi