Hallo,
»» Es geht eher um eine kontrollierte Umgebung.
Nö, wohl nicht. Kontrollierte Umgebung in diesem Zusammenhang ist eine Monokultur aus Maschinen mit geringer Hardware-Auswahl [...]
Wow, dann ist es wohl alles andere als eine konrollierte Umgebung. Das hab' ich wohl ganz falsch verstanden.
»» Wer mein Programm nutzen möchte, muss dann halt einen kompatiblen Browser benutzen.
Oder aber er sch***t drauf und sucht sich einen anderen Anbieter, dessen Angebot mit dem Browser des Besuchers funktioniert.
Sicher nicht, denn es gibt keine anderen Anbieter. Was ich da habe, gibt es nicht mal annähernd mit dieser Funktionalität, kein Witz.
Natürlich könnte es jemand nachbauen, nachdem er es kennengelernt und verstanden hat. Aber ich will mich ja nur ein bisschen vor wildem Raubkopieren schützen. Wenn sich jemand die Mühe macht, das ganze zu hacken, zu decompilieren usw., nun denn... dann soll er wenigstens annähernd soviel Arbeit damit haben, wie ich aufwenden musste, um das Ding zu erstellen. Davor schrecken wohl die meisten zurück. Dann könnten sie's ja gleich selber machen oder halt die geringe Nutzungsgebühr bezahlen.
»» Es ist ohnehin nur für eine überschaubere Zielgruppe interessant, für die das kein Problem sein sollte.
Hoffst Du.
Da bin ich mir sehr sicher. Es sind Privatpersonen, die selber Herr über ihre Computer sind (hoffentlich), d.h. sie können sich jederzeit dafür entscheiden, einen Firefox, Opera oder Safari für diese Anwendung zu benutzen. Falls nötig, erkläre ich ihnen die Installation solcher Freeware.
warum mußt Du dann unbedingt im Browser Datenmengen verarbeiten, mit denen der Browser nicht klarkommt? 10.000 Arrays für einen User klingt für mich nach einem völlig aus dem Ruder gelaufenen Projekt.
Es sind sogar mehrere zig tausend, leider. Warum? Wegen der Optimierung: Alles, was zur Laufzeit schon irgendwie vorausberechnet sein kann und zur Verfügung stehen muss, liegt auch bereits fertig da, und wegen des unkomplizierten Zugriffs über Array-Indizes sind es eben Arrays. Diese werden in recht kurzer Zeit (<1 Sekunde) gleich nach dem Laden auch von einem Client selbständig erstellt (außer vom IE, der stirbt fast daran), das ist also nicht das Problem, aber das ständige Abarbeiten der Arrays zur Laufzeit kostet eben...
Warum willst Du [...] den Quelltext nicht ausliefern?
Weil ich eine Gebühr für die Benutzung verlangen will.
Warum kannst Du nicht einfach [...] eine dedizierte Client-Software verteilen? Ist Deine Umgebung vielleicht doch nicht so kontrolliert?
Sie ist eben nicht so kontrolliert. Zuerst war das Ganze nur für mich selbst gedacht. Dehalb auch einfach nur JavaScript, so zur Übung. Nun ist es aber auch für andere interessant geworden, und ich will's halt weder verschenken, noch neu programmieren in C oder sowas (auch weil ich das gar nicht könnte).
Was versprichst Du Dir davon? Hoffst Du, dass die Java-VM um Zehnerpotenzen schneller ist?
Nein, es reicht völlig, wenn's zur Laufzeit nicht spürbar langsamer wird. Längere Ladezeiten sind zu verkraften, aber halt keine deutlichen Verzögerungen bei der Anwendung.
Ein besserer Algorithmus oder optimierte Datenstrukturen kann Dir Zehnerpotenzen bringen, für den Wechsel von JS auf Java glaube ich das nicht.
Zur Zeit ist so ziemlich das optimalste umgesetzt, was in JavaScript möglich ist, mit allen Tricks. Besser geht's kaum...
Ich habe gerade für einen guten Kunden [...] so dass das Script am Ende vielleicht 25x oder 30x schneller als das Original wäre. Aber für Faktor 20 werden Sie mir schon die Füße küssen. ;-)
Gratuliere! So muss es sein.
Security by Obscurity funktioniert nicht. Wenn Du Code nachlädst, sehe ich das z.B. am Log eines zwischengeschalteten Proxy-Servers oder ganz einfach im Firebug, mit vollständiger URL, und, wenn ich will, mit Session Keys und Passworten.
Mit Passworten? Donnerwetter. Hast *du* etwa den Bundestrojaner programmiert? ;-)
Ich dachte da z.B. an vom Server vergebene einmalige Dateinamen, die z.B. per AJAX ausgehandelt werden und dach dem Download sofort wieder ungültig sind.
Deine Software ist jetzt schon offensichtlich an der Leistungsgrenze, die Komplexität scheint recht hoch zu sein, und sie scheint einige Anforderungen zu stellen. Darauf noch mehr Komplexität zu werfen und noch mehr Anforderungen zu stellen klingt für mich nicht sonderlich sinnvoll.
Für mich auch nicht wirklich. Aber probieren will ich es trotzdem mal... Wenn's nichts wird, bin ich wenigstens reicher an Erfahrung :-)
Ich denke, die meiste Zeit wird der PC darauf warten, dass der Benutzer etwas tut, egal ob du JS oder Java einsetzt.
So ist es. Aber nicht immer. Die Anwendung kann auch sebständig mit größeren Datenmengen arbeiten, die der Benutzer auf einmal füttert. Ohne Zweifel werden aber manche Portionen à 10 Millionen Datensätze reinstopfen wollen, und das kann dann schon dauern, bis die vom Programm verarbeitet sind :-(.
Wahrscheinlich wäre es wesentlich besser, Du würdest Deine Software mal gründlich überdenken. Du sagst, sie sei sehr rechenintensiv. Kannst Du Dinge vorberechnen und bei Bedarf statt einer aufwendigen Rechnung einfach einen vorberechneten Wert vom Server laden?
Wie gesagt, das ist so ziemlich alles schon gemacht. So 10'000 Datensätze in 3 Minuten, schneller geht's zur Zeit nicht. Ein Server kann nicht helfen, weil alle Berechnungen zur Laufzeit erfolgen müssen. Es ist zwar keine Spieleanwendung, aber so ähnlich kann man es sich vorstellen: Laufend müssen neue Daten verarbeitet werden, die sich immer wieder neu erst zur Laufzeit ergeben.
Mußt Du jedes mal mit 10.000 Arrays herumjonglieren oder könntest Du den Großteil der Daten erst "on demand" laden?
Die müssen immer zur Verfügung stehen. Jeders neu reinkommende Datum muss mit allen abgeglichen werden. Mit Client-Server Verkehr jedesmal wird das nichts.
Kannst Du einen schnelleren Algorithmus benutzen?
Ja vielleicht... Einer schwebt mir noch vor, der die Sache evtl. wesentlich beschleunigen könnte. Das ist intellektuell aber nicht einfach zu hinzubekommen. Ich müsste ein geeignetes Näherungsverfahren für bestimmte Zugriffe finden, um schneller an manche Daten zu kommen, die zur Zeit noch schrittweise durchgekämmt werden. Eine relationale Datenbank könnte da vielleicht helfen, aber das kann ich ja vom Client nicht verlangen, und wenn dazu immer Anfragen beim Server nötig werden, ist der Perfomance-Gewinn im Eimer...
Oder anders ausgedrückt: Erkläre uns Dein wahres Problem, statt an Symptomen herum zu quacksalbern.
Das wahre Problem: Ich müsste alles in einer andern Programmiersprache umsetzen, in C oder C++ oder am besten in Assembler ;-). Da ich aber schon über 1 Jahr daran arbeite und nur Scriptsprachen beherrsche, wäre mir das einfach zu aufwändig. Manchmal muss man halt Kompromisse eingehen.
Danke jedenfalls für deine Anregungen!
Ich denke mal, meine Chancen stehen gar nicht so schlecht, dass ich das mit ein bisschen Java zum Laufen bekomme, mal sehen...
Gruß, Don P