Meetingplaner

  • Hey,


    ich bin gerade dabei mit JavaScript einen Meetingplaner zu erstellen. Nun stehe ich vor der Herausforderung wie ich einem Meetingersteller eindeutig verifizieren kann, wie ich hunderte Meetings im Localstorage abspeichern kann und wollte euch mal fragen wie ihr bisher meinen Code findet - Der Code ist noch in der Testphase - jedoch bereits in der Übergangsphase zum Live Code.


    1. Verifizierung des Meetingerstellers:
    Ich möchte, dass wenn ein Meetingersteller ein Meeting erstellt ihn eindeutig verifizieren, sodass ich für diesen eine eigene Seite erstellen kann in dem ich all seine geplanten Meetings anzeige. Ich dachte dabei, dass ich ein 2-Dimensionales Array erstelle mit dem eindeutigen Namen als Schlüssel und diesem dann ein weiteres Array mitgebe:


    this.confirmedMeetingData = [this.creator, [this.planedAction, this.meetingPlace, this.meetingDate, this.invitedPersons]];


    Dann überprüfe ich vor dem Speichern des Arrays in den LocalStorage ob es in diesem Array bereits diesen Namen gibt.


    Ja?

    • Dem Schlüssel mit dem Namen ein weiteres Array hinzufügen

    Nein?

    • Ein neuen Schlüssel mit dem neuen Namen erstellen und diesem das Array hinzufügen


    Nun kann es auch sein, dass ein Ersteller ab und zu mal einen anderen Namen eingeben kann obwohl es der gleiche ist oder jemand den selben Namen eingibt wie einer bereits ihn eingegeben hat. Dann kann ich ja nicht mit JavaScript überprüfen ob es sich hier um die gleiche Person handelt.


    Eine Idee von mir ist eine Meetingseite mit einer eindeutigen ID als Parameter zu erstellen und diese dann jedem in der E-Mail zu zusenden.


    Wie seht ihr das? Wie würdet ihr es machen? Kann ich einen Ersteller doch sicher verifizieren?


    2. Hunderte und Tausende Meetings im Localstorage abspeichern


    Ich habe dabei gedacht die Meetingdaten aus dem Formular in ein Array abzuspeichern und diesem dann bei jedem neu erstellten Meeting ein neues Array zuzuweisen mit dem neuen Inhalt.


    Beispiel:


    1 Meeting

    Array( 0: "Testname", 1: array( 0: "data1", usw..))

    2 Meeting

    Array( 0: "Testname", 1: array( 0: "data1", usw..), 2: "Meeting2" 3: array(....))


    Oder ein 3 dimensionales Array:

    Array( 0: array( 0: "Meetingname", 1: array(0: "data1", 1: "data2", 2: array("values")), usw..))


    Ich weiß noch nicht sicher wie ich dies am komfortabelsten machen soll damit ich die Daten ganz einfach weiterverarbeiten kann.

    Wie würdet ihr es machen? Ideen?


    3. Wie findet ihr meinen aktuellen Code?


    Habt ihr Verbesserungs- und/oder Optimierungsvorschläge?



    JavaScript: config.js - Hier stehen alle zentralen Configdaten drin
    let host = ""; 
    let username = "";
    let password = "";
    let sendTo = (localStorage.getItem('invitedPerson') !== null) ? localStorage.getItem('invitedPerson') : null;
    let sendedFrom = "";
    let subject = "Dein Meeting";
    let body = "Testbody";


    Wäre mir eine sehr große Freunde von euch zu hören :)

    Schöne Grüße

  • Muss es alles in JavaScript sein?!


    Ich würde einen vernünftigen Login schreiben und nur die relevanten Daten in einer Session halten.

    Warum sollte ich Benutzer bezogene Daten in JS verwalten?


    Wenn es Dir um die UX geht, kannst Du zum Laden von Inhalten ja XmlHttpRequest verwenden.

  • Guten Abend,


    danke Sempervivum für den Link - werde ich mir genauer anschauen und austesten.


    Arne Drews : Dies ist eine Code Competition bei der ich nur JavaScript verwenden darf. Handelt sich um eine. Freizeitorganisator in dem Treffen erstellt werden können - daraufhin die eingeladenen Personen eine E-Mail erhalten und dann weitere Aktionen haben wie andere Zeit vorschlagen/abstimmen.


    Darüberhinaus soll auch was vorgeschlagen werden.

  • Zitat

    Dies ist eine Code Competition bei der ich nur JavaScript verwenden darf.

    Das erklärt natürlich einiges. Ich hatte mich schon gewundert, warum Du dafür keine serverseitige Lösung andenkst, aber dachte "er wird schon wissen, was er tut" :)

  • Hi ho,


    das Thema mit "größeren" Datenmengen im LocalStorage zu speichern hatte ich auch schon öfters (Gerade was das entwickeln von z.B. BrowserGames angeht).

    Wenn man außer acht lässt, das der LocalStorage nur in der einen Browser-Instanz zu einer spezifischen URL vorhanden ist, haben wir noch das (bei den meisten Browsern) limit von ca. 5-10MB Daten. Wobei 5-10MB sehr viel Text sein kann.


    Um diese 5-10MB aber optimal zu nutzen, bietet es sich an den Text nochmals zu verkleinern. Wenn ich beide fragen von oben sehe, also wie das Datenformat aussehen könnte + wie man das dann am effizientesten in den Local Storage bekommt, nutze ich meist folgenden weg.


    1. Erstellen eines Save-Objekts welches dann properties enthält für die zu speichernden Daten:


    Code
    let saveObject = { meetings: [] }

    2. Jedes meeting dann wieder als Object anlegen (Klasse?)


    Code
    class MeetingSaveData{
        meetingName = "";
        meetingData = []; //wieder als objekt... 
    }


    3. Das speichern in LocalStorage kann dann am einfachsten per Json-Serialization gemacht werden (JSON.stringify / JSON.Parse).


    Die frage wegen des Platzes: Gerade beim Serialisieren von JS-Objekten mit den PropertyNames usw. sorgt für viel doppelten text den man eigentlich vermeiden möchte. Daher bietet sich Text-Kompression an. Der meist genutzt ist wohl LZString

    https://pieroxy.net/blog/pages/lz-string/index.html (den gibt es auch für sehr viele sprachen).


    D.h. das Speichern und laden sieht wie folgt aus:


    Code
    Speichern: 
    1. Speicherobjekt in JSON Serializieren
    2. JSON mit LZString komprimieren
    3. Komprimierter string in den LocalStorage schreiben. 
    
    Laden: 
    1. Komprimierter string aus dem LocalStorage lesen
    2. Komrimierter String mit LZString dekomprimieren
    3. JSON mit Deserializieren 


    Hoffe der Ansatz hilft weiter :).


    Grüße


    Timo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!