• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Komplexe Berechnungen in JavaScript

irena_2015

New member
Hallo,

ich habe vor kurzem angefangen mich mit JavaScript Programmierung zu beschäftigen und habe eine Frage an euch.

Es ist möglich ein Programm entweder serverseitig mittels PHP, Java, etc. oder clientseitig im Web-Browser mittels JavaScript auszuführen. Bei der ersten Möglichkeit ist es vorausgesetzt einen Web-Server zu haben.
Meine Frage wäre, welche Probleme können entstehen, wenn komplexe Berechnungen, die auch viel Zeit in Anspruch nehmen können ausschließlich clientseitig auszuführen? Z.B. der Fall, wenn man kein Web-Server installieren will und serverseitig nichts persistieren, aber Dateiinhalte lesen können muss.
 
Aus meiner Erfahrung kann ich nur sagen, dass Browser generell nicht sonderlich stabil sind. Das liegt in der Natur der Sache, das Web ist flüchtig und redundant. Bei komplexeren Sachen machen die Browser 'ne Grätsche, das sieht man sehr schön, wenn man mal eine kleine Endlosschleife macht. Der IE gibt bereits nach wenigen Sekunden auf. Aber das muss man immer von Fall zu Fall schauen, allgemein kann man das schlecht sagen.
 
Hi,
Du mußt immer dafür sorgen, daß der UI-Thread wieder die Kontrolle bekommt. Google mal etwas nach "HTML WebWorker". Vielleicht wäre das ja etwas für Dich.
Tschau
Frank

P.S. Der folgende Link sieht ganz gut aus:
Web Worker-Grundlagen - HTML5 Rocks
 
Hallo Frank,

danke für den Tipp. Web Worker scheint interessant zu sein.

Ich habe noch vergessen zu erwähnen, dass bei meiner Anwendung um ein rekursives Programm handelt und die Laufzeit spielt auch eine große Rolle. Ich will auch nicht, dass der Anwender sehr lange auf ein Ergebnis warten muss.

Die Frage ist jetzt wie gut kommt JavaScript mit rekursiven Programmen zu recht? Viele raten es ab, da JavaScript keine Endrekursion anbietet und deswegen sehr langsam ist. Hier sind Beiträge dazu, die ich im Netzt gefunden habe:
Scriptease.js: Über den Umgang mit Funktionen | heise Developer
Rekursive Funktionen in JavaScript — Asconix Systems - IT Management, Web & Mobile Development
Aber die Laufzeitmessung einer rekursiven Funktion in unterschiedlich Programmiersprachen zeigt auch, dass JavaScript zwar nicht die schnellste, aber auch nicht die langsamste ist. Hier habe ich ein Beitrag im Netzt gefunden, allerdings Stand 2012:
https://www.spin.de/forum/145/-/3f3c

Welche Erfahrungen hast Du da gemacht?

Gruß
Irena
 
Hi Irena,
"wir" haben vor einigen Jahren eine reine HTML4 WebApp geschrieben, die auch teilweise sehr rechenintensiv war. Momentan machen wir das gleiche für Mobilgeräte, d.h integrierter WebView von IOS bzw. Android aber auch der IE von Windows 8. Du kannst da wirklich schon einiges mit machen, die Browserengines werden immer besser und schneller.
Du mußt "nur" Deinen Code dazu optimieren. Problem ist oft auch die "Anzahl" der Programmschritte. Wenn es zu viele werden, kann es sein, daß der Browser "denkt", er wär in einer Endlosschleife und will abbrechen. Du mußt den Code etwas aufteilen, d.h "irgendwie" beenden" und dann über einen Timeout weiter rechnen lassen. Verständlich, was ich meine?
Versuch's einfach mal , mach' Dir einen Prototypen und lass ihn einfach mal rechnen.
Schau' mir später ma Deine Links an.
Tschau und gutes Gelingen!
Frank
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
ich habe mich jetzt ein wenig mit WebWorker beschäftigt. Kann es sein, dass der WebWorker ohne Web-Server nicht vernünftig verwendet werden kann? Z.B. im Chrom-Browser bekomme ich folgende Fehlermeldung:
Uncaught SecurityError: Failed to construct 'Worker': Script at 'file:<path>my_workers.js' cannot be accessed from origin 'null'.
Es sieht so aus, dass der Browser mit dem file-Protokoll auf die lokale Platte nicht zugreifen kann.
Gruß
irena
 
Du wirst die Inhalte vermutlich statisch über einen Webserver ausliefern müssen, daran kommst du sowieso nicht vorbei.
Versuch es mal mit einem lokalen NodeJS-Server oder einem in Cloud9, statische Inhalte lassen sich sehr einfach ausliefern. Ohne wirst du auch durch CrossOriginPolicies schnell an grenzen stoßen.

Prinzipiell sind moderne JavaScript-Engines sehr leistungsfähig.
Aber JavaScript ist leider (noch) nicht ideal für rekursive Funktionsaufrufe, wie du bereits festgestellt hast.

Die Frage ist ob du abschätzen kannst, wie tief die Rekursion gehen wird.
Und ob die Berechnung deutlich länger dauern wird als eine Server-Anfrage.
Und ob dein Server auf das Ergebnis vertrauen muss, man sollte nämlich niemals einem Client vertrauen ;)

Wenn du uns genauer beschreibst was du erreichen möchtest können wir dir sicher noch ein paar mehr Tipps geben.
 
Zurück
Oben