2017-06-27 4 views
0

Ich habe ein Javascript, das viele Berechnungen durchführt und die Ergebnisse in Form von vielen Arrays auf Google Charts-Objekten aufträgt. Ohne die Seite neu zu laden, kann ich neue Werte anwenden und die Analyse immer wieder ausführen und die Ergebnisse jedes Mal grafisch darstellen. Das Seltsame ist, dass dies in Chrome gut funktioniert, aber in Safari unter MacOS wird es mit jeder neuen Analyse langsamer und erfordert ein erneutes Laden der Seite, um es wieder auf den neuesten Stand zu bringen. Auf Chrome-Desktop- und Mobilgeräten sowie in Safari Mobile läuft es jedoch auf Hochtouren und erfordert kein erneutes Laden. Ich vermute, dass Safari macOS etwas zwischenspeichert und Speicher füllt. Ich verwende eine Reihe von Graph-Objekten (Code unten), die jedes Mal erstellt werden (aber vermutlich auch Müll gesammelt).Warum verlangsamt sich mein JavaScript im Safari-Desktop, aber nicht in Chrome oder Safari?

 var chart01 = new google.visualization.LineChart(document.getElementById('chart_01')); 
    var chart02 = new google.visualization.LineChart(document.getElementById('chart_02')); 
    var chart03 = new google.visualization.LineChart(document.getElementById('chart_03')); 
    var chart04 = new google.visualization.LineChart(document.getElementById('chart_04')); 
    var chart05 = new google.visualization.LineChart(document.getElementById('chart_05')); 
    var chart06 = new google.visualization.LineChart(document.getElementById('chart_06')); 
    var chart07 = new google.visualization.LineChart(document.getElementById('chart_07')); 
    var chart08 = new google.visualization.LineChart(document.getElementById('chart_08')); 
    var chart09 = new google.visualization.LineChart(document.getElementById('chart_09')); 
    var chart10 = new google.visualization.LineChart(document.getElementById('chart_10')); 
    var chart11 = new google.visualization.LineChart(document.getElementById('chart_11')); 
    var chart12 = new google.visualization.LineChart(document.getElementById('chart_12')); 
    var chart13 = new google.visualization.LineChart(document.getElementById('chart_13')); 
    var chart14 = new google.visualization.LineChart(document.getElementById('chart_14')); 
    var chart15 = new google.visualization.LineChart(document.getElementById('chart_15')); 
+0

Versuchen Sie, den Speicherprofiler zu verwenden, um zu sehen, ob das passiert. – Barmar

Antwort

0

Sie sollten die Diagramme idealerweise mit neuen Daten aktualisieren, anstatt sie jedes Mal neu zu erstellen. Dies dient dazu, jede Art von Speicherbereinigungsverzögerungen zu vermeiden.

+0

Danke für den Vorschlag. Ich habe versucht, die Deklarationen außerhalb der Funktion zu platzieren, die die Daten hinzufügt, aber ich erhalte einen Fehler, "Uncaught TypeError: Kann Eigenschaft 'LineChart' von undefined nicht lesen", und die Diagramme funktionieren nicht. Wahrscheinlich ein Scoping-Problem, das meine Fähigkeit zu lösen übersteigt. Ich weiß nicht, wie ich die Diagrammobjekte der Funktion zur Verfügung stellen soll, die die Daten zuweist, ohne sie global zu machen, und ich denke, die einzige Alternative besteht darin, sie als Argumente zu übergeben, was wirklich umständlich wäre, da es so viele gibt. –

Verwandte Themen