2017-01-02 6 views
0

Ich baue eine expressJS-Anwendung, die etwa 50 MB (je nach Komprimierungsmethode variieren) von JSON-Daten benötigt, die vom Server an den Client übertragen werden, wenn die Anwendung ist anfänglich geladen. Mir fällt es schwer, einen Weg zu finden, der den Client-Browser aufgrund der hohen Speicherauslastung nicht zum Absturz bringt. Ich habe versucht, socket.emit zu verwenden, was Speicherverwendung in Chrom verursachen kann, um bis zu 1500mb zu schießen, was inakzeptabel ist (und dies ist nicht einmal mit dem vollständigen Datensatz). Ich habe auch versucht, die Daten als Argument eines Lenker-Render-Aufrufs (auf app.get) zu übergeben, was so lange funktioniert, bis ich die Daten auf der Client-Seite auswerten muss (zu der ich auch kein Fan bin). da es als String übergeben werden muss. Zu diesem Zeitpunkt ist die Speicherauslastung wieder 1500 MB +, was zu Abstürzen führt. Wenn ich diese Menge an Daten lokal verwende, sitze ich bei einer komfortablen Speicherbelegung von 500 bis 600 MB. Also, was ist der beste Weg, um diese Daten an den Client zu übertragen, ohne Probleme zu verursachen?ExpressJS einmalige Übertragung von JSON-Daten vom Server zum Client

Die Daten sieht etwa so aus:

var worldData = { 
    'x-164z144': { 
     'blocks': { 
       'y1': { 
        'color': 16711680, 
        'owner': 'bar456' 
       }, 
       'y5': { 
        'color': 45654815, 
        'owner': 'foo123' 
      } 
      // possibly more data here in future 
    } 
} 

Antwort

0

Also, was ist der beste Weg, [50 MB JSON] an den Client zu übertragen, ohne Probleme zu verursachen?

Der beste Weg ist es nicht zu tun. Sie werden immer Probleme haben, wenn Sie versuchen, in einer Übertragung so viele Daten an den Client zu senden, und Sie müssen das nie tun, weil der Client sehr wahrscheinlich nicht alle Daten gleichzeitig benötigt. Was Sie tun sollten, ist nur die Daten laden, die Sie brauchen, und wenn Sie mehr brauchen, dann laden Sie mehr.

Sie erklären nicht, welche Art von Daten es ist und warum Sie versuchen, alles auf einmal zu senden, aber es ist sehr unwahrscheinlich, dass Sie selbst es in erster Linie zu tun. Sie müssen nur so viele Daten senden, die sofort benötigt werden, und dann mehr anfordern, als Sie es benötigen.

+0

Also, was ist die größte Menge an Daten, die bequem vom Server zum Client auf einmal gesendet werden können? Die Art und Weise, wie ich meine App zu bauen plante, wurde eigentlich sofort benötigt, aber ich denke, ich muss mich darum kümmern, wenn es nicht machbar ist. – dyarbrough

+0

@dyarbrough Die Performance-Probleme werden nicht nur von der Größe ab, sondern auch von der Form Ihrer Daten, das heißt tief verschachtelten Strukturen vs. flacher Strukturen, etc., so zum Beispiel der Typen wie Zahlen und Strings Eine einzelne lange Zeichenfolge benötigt nicht so viele Ressourcen als ein sehr tief verschachteltes Objekt. Sie müssen es wirklich an Ihren Daten und in Ihrem Anwendungsfall testen. Ich weiß nichts über die Daten oder den Anwendungsfall, so dass es unmöglich ist, mehr zu sagen. – rsp

+0

Siehe ursprünglichen Beitrag für die Datenstruktur. Die Daten sind sehr einfach, aber ziemlich tief verschachtelt. XZ positioniert auf niedrigster Ebene, dann y Positionen (Höhe), die einige Informationen über Block geben. Irgendwelche guten Ressourcen, wo ich mehr darüber erfahren könnte? – dyarbrough

Verwandte Themen