Alexander (HH): Optimierung: lieber Rechnen oder Speichern?

Beitrag lesen

Moin Moin!

Hallo,

ob ich nicht den entsprechenden ausgerechneten Wert in einer weiteren Variable speichere

Ist prinzipiell erstmal besser als die Operation immer wieder durchzuführen.

O.K.

Ich lege bei komplizierteren Berechnungen, bei denen es nur einen oder wenige Eingabewerte gibt, einen Cache an und runde dabei um einige Stellen, sodass der Cache klein bleibt,

Einen Cache? In welcher Form?

z.B. ein assoziatives Array.

Und wieso rundest du? Brauchen gerundete Werte mit weniger dezimalen Nachkommastellen auch weniger RAM?

Nein. Aber Du mußt weniger Werte speichern, wenn Du auf drei bis vier tragende Stellen rundest, statt acht bis zwölf tragende Stellen herumzuschleppen. Dabei wird das Ergebnis natürlich auch ungenau.

Beispiel:

Mit drei tagenden Stellen gibt es 3.13, 3.14, 3.15. Dazwischen gibt es gar nichts. Der Cache belegt für den Bereich von 3.13000 bis 3.15999 exakt drei Plätze (mit jeweils ein paar Bytes). PI wird stumpf auf 3.14 abgerundet, je nach Operation erzeugt das einen Fehler im Bereich 1%.

Mit "nur" sechs tragenden Stellen belegt der Cache von 3.13000 bis 3.15999 dreitausend Plätze (einige kBytes), mit neun tragenden Stellen drei Millionen Plätze (einige MBytes), mit zwolf tragenden Stellen drei Millarden Plätze (einige GBytes).

Nun stellt sich mir die Frage, wieviel RAM so eine Variable inkl. Overhead in Javascript verbraucht

Das hängt von der JS-Engine ab. Eine nackter float, single oder double (in C) belegt irgendwo zwischen vier und zwölf Bytes.

Du kannst im Prozessmonitor deines Betriebssystems sehen, wieviel Speicher die Browserinstanz gerade braucht und wie der Speicherverbrauch zu- und abnimmt beim Laden und Verlassen der Seite.

Klar, aber diese Werte sind zu ungenau, weil sie natürlich durch diverse andere Programme und den Kernel beeinflusst werden.

Nein, die Speicherdaten für den einen Prozess hängen nur von dem einen Prozess ab.

Mit 1000 Durchläufen, wäre das ganze sicherliche präziser, aber das manuell zu machen ist Wahnsinn.

Warum willst Du derartig große Datenmengen in Javascript herumschleppen? Ich befürchte, Du machst entweder etwas, was besser auf dem Server aufgehoben wäre, oder etwas, das besser mit Flash umgesetzt würde. Die "40 Millisekunden" sprechen für eine Animation. Nimm Flash, das ist dafür ausgelegt. Sorge für alternativen Inhalt, falls der Benutzer kein Flash hat oder haben möchte.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".