lichtheini: Code dynamisch laden und speichern

Hallo zusammen!

Vorweg: Ich schreibe gerade an meiner Bachelorarbeit, wenn also jemand die Fragen deswegen nicht beantworten möchte, kann ich das gut nachvollziehen. Tipps statt fertigem Code sind mir demzufolge auch lieber.

Mein Studienfach hat nichts mit Informatik zu tun, mein Wissen entspringt also größtenteils Selbststudium und es ist auch meine erste selbstgeschriebene Anwendung (abgesehen vom Hallo-Welt-Beispiel). Dass der Hauptteil der Bachelorarbeit trotzdem das Erstellen der Anwendung ist, liegt an meinem gesunden Selbstbewusstsein :-) Die grundlegende Aufgabenstellung ist die Modellierung von Körpern mittels constructive solid geometry nach festgelegten Regeln und veränderlichen Parametern.

Frage 1: Bestimmte (vergleichsweise komplexe) Komponenten wie eine Türklinke gibt es fertig in einer Datenbank. Speicherformat ist im Prinzip Javascriptcode[1]. Gibt es eine Möglichkeit den Code vom Server (also eine Javascriptfunktion) wieder als solche zu speichern?

Erster Lösungsansatz: Code vom Server landet als String in einer Variablen und wird dann per eval() interpretiert. Funktioniert, ich lese aber immer eval() = evil() = böse und das gefällt mir nicht… Gibt es noch andere Möglichkeiten, Javascriptcode nachzuladen, aber eben nicht gleich auszuführen? Oder ist es sinnvoller das Ergebnis vor/von eval() zu überprüfen?

Danke und Grüße, der lichtheini


  1. Es könnte eine Funktion sein, die ein komplettes Vektor-Objekt erstellt und zurückgibt oder gleich das erstellte Objekt, das ist verhandelbar. ↩︎

  1. @@lichtheini

    Gibt es noch andere Möglichkeiten, Javascriptcode nachzuladen, aber eben nicht gleich auszuführen?

    loadJS?

    LLAP 🖖

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Tach!

    Frage 1: Bestimmte (vergleichsweise komplexe) Komponenten wie eine Türklinke gibt es fertig in einer Datenbank. Speicherformat ist im Prinzip Javascriptcode[^1].

    Code ist üblicherweise wiedeverwendbar, muss aber mitunter gewartet werden. Welchen Grund hat es, ihn so wartungsunfreundlich in einem DBMS abzulegen? Was siehst du in deinem Fall als Vorteil an, ihn nicht als Datei im Dateisystem abzulegen, wo sie recht einfach vom Webserver an den Client geliefert werden könnte?

    Gibt es eine Möglichkeit den Code vom Server (also eine Javascriptfunktion) wieder als solche zu speichern?

    Also solchen? Ausliefern als text/javascript und Einbinden mit dem script-Element. Auch anderweitige Code-Nachladebibliotheken gibt es im Javascript-Land.

    Erster Lösungsansatz: Code vom Server landet als String in einer Variablen und wird dann per eval() interpretiert. Funktioniert, ich lese aber immer eval() = evil() = böse und das gefällt mir nicht…

    Diese einfache Gleichung stimmt so nicht ganz. Nicht das eval() ist evil, sondern wenn du damit vom Nutzer beeinflussbaren Code ausführst. Diesebe Evilei hast du auch wenn du Code entgegennimmst und vom Server abholend in ein script-Element laden lässt. Code ist nicht vertrauenswürdiger, wenn er nicht durch eval() geschickt wird. Du musst - egal auf welchem Wege du ihn ausführen lässt - sicherstellen, dass in dem Code nichts ungewünschtes enthalten ist.

    Gibt es noch andere Möglichkeiten, Javascriptcode nachzuladen, aber eben nicht gleich auszuführen?

    Ihn in ein script-Element als Code laden. Funktionen werden nicht gleich ausgeführt, sondern erst beim Aufruf. (Und ich meine Funktionen als solche, keine Funktionsausdrücke oder gar IIFEs.)

    Ich gehe übrigens die ganze Zeit davon aus, dass eine Webserver-Browser-Konstellation vorliegt. (Diese Informationen wären in der ersten Hälfte deines Postings sinnvoll gewesen.)

    Oder ist es sinnvoller das Ergebnis vor/von eval() zu überprüfen?

    Was soll da genau geprüft werden?

    dedlfix.