2016-04-04 11 views
-1

Ich werde eine ASP.net Webanwendung mit C# schreiben. Meine Webapp ist sehr interaktiv.C# und Javascript: Share Algorithmus

Jetzt habe ich die Situation, dass ich einige komplexere Berechnung einiger Werte tun muss. Die Sache ist, dass der Benutzer in der Lage sein sollte, das Ergebnis dieser Berechnungen in Echtzeit zu sehen, während er einige Objekte auf der Website zieht. Jedes Mal, wenn er ein Pixel passiert, berechnet der Algorithmus eine Berechnung. Das wäre überhaupt kein Problem. Schreiben Sie einfach einige Algorithmen in JavaScript. Das Problem ist: Wenn der Benutzer das zuvor gezogene Element löscht, muss der Browser eine Ajax-Anforderung an den Server senden und die berechneten Eingaben validieren. Grundsätzlich bedeutet das, dass der Server genau den gleichen Algorithmus ausführen muss. Aber natürlich möchte ich sie nur einmal schreiben. Daher möchte ich keine C# -Klasse und JavaScript-Funktion erstellen und beides beibehalten.

Haben Sie Ideen, wie ich das erreichen könnte? Kann ich die Algorithmen in JavaScript schreiben und auf dem Server mit C# aufrufen oder umgekehrt? Schreibe das in C# und kompiliere zu JS und lade das JS vom Browser herunter?

Alle Infos dazu wäre super! Vielen Dank!

Ps .: Ich habe nicht viel Erfahrung mit C#, weil ich eher ein Java-und Web-Entwickler bin.

+0

* Kann ich die Algorithmen in JavaScript schreiben und auf dem Server * aufrufen. Ja, Sie können und sind bereits (* Browser muss eine Ajax-Anfrage *). So können Sie eine Ajax-Anfrage an den Server stellen, um die Arbeit für Sie zu erledigen. – Liam

+0

Sie können nur computation serverseitig arbeiten, indem Sie websockets (signalR) oder Ajax verwenden, um die Daten hin und her zu senden. Sie könnten eine Entprellfunktion einwerfen, um zu viele Anrufe zu vermeiden – cl3m

+0

FYI Sie können C# nicht in Javascript kompilieren. Sie sind ** sehr ** verschiedene Sprachen. – Liam

Antwort

0

Wenn Ihnen zusätzliche Latenz und einige Gefahren nichts ausmachen, können Sie auf Webseiten rechnen.

Wenn das Projekt in den Speicher geladen wird, öffnet es (über die Befehlszeile) einen Browser mit der URL "serve".

Immer wenn eine Anfrage von einem Client an den Server gesendet wird, stellt der Server diese in einem bestimmten Producer-Consumer-Kontext in eine Warteschlange.

Serve-Seite bekommt Anfrage (per Web-Service, einmal pro mehrere Sekunden zu prüfen), berechnet und sendet das Ergebnis an den Server dann Server macht den Rest davon.

Aber Browser können Absturz oder verschiedene Plattformen können nicht kompatibel sein% 100. Auch wiederholte Webservice-Anfragen sind schlecht für die Leistung. Wenn mehrere Anforderungen verarbeitet werden sollen, müssen mehrere aktive Browserfenster/-register vorhanden sein, was ebenfalls die Leistung beeinträchtigt. Aber wenn Sie die volle Kontrolle über den Server haben, können Sie versuchen, es zu benchmarken.

(javascript) 
client ------> 
client ------>  server -----> store result in db 
         |^
         | | 
         v | 
       (C#web_service) (consume) 
        work queue ----------> server page (javascript) 
           <--------- 
        ^|  (check if queue>0) 
         | | 
         | | 
         | v 
        server page (javascript) 

Auch dies würde CPU verbrauchen unnötig Strom Energie verbrauchen. Sie sollten bessere Kommunikationsmechanismen wie Socket-Server für das Senden von Nachrichten an die Server-Seite verwenden, um den Arbeitsbeginn zu signalisieren und das Ergebnis mit dem Web-Service oder der gleichen Methoden-Clients zurück zu bekommen. Dies kann den Energieverbrauch senken.

Wenn mehrere Browser und verschiedene Versionen auf virtuellen Computern ausgeführt werden, kann dies die Kompatibilität verbessern.