Ich bin derzeit in einer AngularJS / Javascript-Umgebung.
Derzeit verwendet die Anwendung die Abfragemethode (dh, um neue Daten in einer festgelegten Anzahl von Sekunden vom Server abzurufen).
Dies ist ziemlich anstrengend und ruft das neueste Ergebnis nicht sofort ab. Angenommen, der Server verwendet ASMX für Webservice-Funktionen und wie kann ich die Anwendungseffizienz besser verbessern, wenn dies ohne größere Überarbeitung möglich ist?
Bearbeiten 1:
Mit Steuern meine ich, dass der Server verschiedene SQL-Tabellen und zugehörige Daten und Dinge aufrufen müsste, was eine komplexe Datenverarbeitung bedeutet. Wenn viele Benutzer gleichzeitig arbeiten, befürchte ich, dass es in Zukunft möglicherweise Probleme mit der Serverleistung geben könnte.
Die neuesten Daten werden nicht abgerufen, da die Anwendung derzeit https-Anrufe vom Typ Anfrage-Antwort verwendet.
Ich kann mich auf der Seite der mobilen Anwendungen weiter verbessern, aber auf der Serverseite kann ich außer den Webservice-Dateien des Servers nicht viel ändern.
Sie können Server-Sent-Events als Alternative zum Polling verwenden.
Anstatt Ihren Server alle n Sekunden nach neuen Daten zu fragen, öffnen Sie eine dedizierte Verbindung und lassen Sie Ihre neuen Daten senden, sobald sie verfügbar sind!
Die Verbindung bleibt geöffnet, bis sie entweder vom Client oder vom Server (oder durch deren plötzliche Beendigung) explizit geschlossen wird.
Sie können Ihren Server so einrichten, dass Daten in festgelegten Intervallen oder zu bestimmten Zeiten auf Ihrem Server an Ihren Client gesendet werden (z. B. wenn ein Objekt den Status ändert oder wenn ein Scheduler einen Job auslöst oder wann).
Sie können verschiedene Ereignistypen definieren und verschiedene Routinen unterschiedliche Ereignistypen behandeln lassen.
Auf der Serverseite können Sie eine Warteschlange mit Benutzern halten, die derzeit Ihren Anwendungs- / Ereignistyp abonniert haben. Wenn ein Ereignis erstellt wird, sendet Ihr Server es an alle Benutzer in der Warteschlange. Frameworks wie Jersey2 implementieren diesen Ansatz bereits mithilfe eines Broadcaster-Objekts .
Auf der Clientseite müssen Sie einen Dienst schreiben , der vom Server gesendete Ereignisse unter einer bestimmten URL abhört .
Wenn Sie einen Status / eine Route eingeben, müssen Sie einen Servertyp abonnieren und sich abmelden
$destroy
, um ein Leck zu vermeiden.quelle
Sie sind Websockets: Sie sind eine Erweiterung von HTTP und arbeiten im selben Port.
Es ermöglicht die bidirektionale Kommunikation zwischen Client und Server und natürlich steht dafür eine eckige Integration zur Verfügung.
Ansonsten gibt es auf der Backoffice-Seite, wenn Sie sich Spring in Java ansehen, andere Möglichkeiten:
Dieser Link enthält Websocket und andere Methoden, die an Ihre Bedürfnisse angepasst sind.
Wenn Sie Spring / Java nicht haben, sollten Sie es trotzdem lesen und nach einer entsprechenden Lösung in Ihrem Technologie-Stack suchen.
quelle
Sie müssen Dinge wie "ziemlich anstrengend" besser definieren und herausfinden, warum das neueste Ergebnis nicht sofort abgerufen wird. Dies sind Fragen, die wahrscheinlich auftreten, unabhängig davon, ob Sie von Ihrem Kunden abfragen oder nicht.
Mit einem browserbasierten Front-End haben Sie jedoch grundsätzlich zwei Möglichkeiten, wenn Sie in nativem Javascript bleiben möchten: Polling (wie Sie es tun oder möglicherweise lange Polling) oder Web-Sockets. Ich habe noch nie zuvor Web-Sockets mit ASMX gesehen (ohne zu sagen, dass dies nicht möglich ist, nur dass ich dort keine Erfahrung habe und daher nicht weiß, wie schwierig es für Sie wäre, sie erneut zu implementieren). Wenn Sie, wie gesagt, Leistungs- oder Genauigkeitsprobleme haben, sind diese möglicherweise auch bei Verwendung von Web-Sockets noch vorhanden.
quelle