Linuchs: HTML-Snippet in Datenbank speichern

Moin,

es geht mir um einen Erfahrungsaustausch. Wie behandelt ihr so ein Problem? Seit 2001 programmiere ich PHP und habe noch nie ein komplettes, fremdes Programm gesehen. Manchmal habe ich das Gefühl, ich erfinde Räder laufend neu.

Bei meinen Termin-Listen im Veranstaltungskalender wurden die Positionen durch recht umfangreiche SQL-Kommandos zusammengestellt und mussten dann noch für die Ausgabe aufbereitet werden.

Problem: Der Server war manchmal bis zu 10 sec mit der Auslieferung der Seite beschäftigt, je nach Auslastung.

Lösung: Da die einmal aufbereitete Position in zahlreichen Listen (nach Ort, nach Veranstaltungstyp, nach Verein, ...) immer die gleiche ist, speichere ich sie neuerdings als HTML-Snippet im Terminsatz mit ab. Eine Langform, eine Kurzform.

Dennoch sind ein paar Platzhalter enthalten, die ich ersetzen kann. Zum Beispiel die Entfernung zu einem gegebenen Ort.

Jedes HTML-Snippet hat den timestamp der Erstellung. Wenn die Aufbereitung geändert wird, kann ich per PHP-Code "alte" Snippets erkennen und neu generieren.

5/100 sec sind jetzt die "Norm" für die Auslieferung von 10 Positionen.

Linuchs

  1. Tach!

    Problem: Der Server war manchmal bis zu 10 sec mit der Auslieferung der Seite beschäftigt, je nach Auslastung.

    Lösung: Da die einmal aufbereitete Position in zahlreichen Listen [...] immer die gleiche ist, speichere ich sie neuerdings als HTML-Snippet im Terminsatz mit ab.

    Cache-Systeme sind nicht unbedingt Seltenheiten. Datenbank oder Dateisystem ... wenn es hilft, warum denn auch nicht?

    Beispielsweise für gängige CMS-Systeme wie Wordpress existieren solche Erweiterungen, weil nach dem Erstellen der Seite meist nur statischer Inhalt übrigbleibt, der nicht jedes Mal neu erzeugt werden muss.

    dedlfix.

    1. Moin dedlfix,

      Beispielsweise für gängige CMS-Systeme wie Wordpress existieren solche Erweiterungen, weil nach dem Erstellen der Seite meist nur statischer Inhalt übrigbleibt, der nicht jedes Mal neu erzeugt werden muss.

      Aha - ganze Seiten. Ich habe z.Z. um die 1000 künftige Veranstaltungstermine, aber eine unüberschaubare Zahl von möglichen Seiten. Allein bei PLZ/ORT gibt es 13.000 Einträge in der Datenbank. Kombiniert mit drei URLs und drei Sprachen ...

      Linuchs

      1. Tach!

        Beispielsweise für gängige CMS-Systeme wie Wordpress existieren solche Erweiterungen, weil nach dem Erstellen der Seite meist nur statischer Inhalt übrigbleibt, der nicht jedes Mal neu erzeugt werden muss.

        Aha - ganze Seiten.

        Nicht zwangsläufig ganze Seiten, es reicht ja schon, die statischen Inhalte vorgerendert zu haben, und dann die Teile nur noch ins Grundgerüst einzuladen. Aber ganze Seiten haben natürlich den Vorteil, dass die vom Webserver aus direkt ausgeliefert werden können.

        dedlfix.

  2. Manchmal habe ich das Gefühl, ich erfinde Räder laufend neu.

    Nein. Du baust sie neu. Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden (und visa versa). Also werden andere gemacht. Aber das Grundprinzip der Erfindung des Rades "runde Scheiben auf Achsen" bleibt.

    speichere ich sie neuerdings als HTML-Snippet

    Mache ich auch so, wenn die Daten aus langsamen Quellen kommen. Ob jetzt (gezipptes) HTML, JSON oder "natives PHP" gecacht wird ist eine Frage der konkreten Funktion und des Feintunings.

    1. @@Regina Schaukrug

      Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden

      Nicht?

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. Hallo

        Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden

        Nicht?

        das geht aber cooler: http://www.motorvision.tv/wp-content/uploads/2015/12/Top-Gear-Staffel-17-Folge-04_Trip-im-Autozug-Jaguar-auf-Schienen_CREDITS_BBC-Worldwide-TV.jpg

        Gruß
        Jürgen

        1. Achtung Autoverladung: Fahr mal nach Saas Fee 😉

        2. Hej JürgenB,

          Da warst du wohl schneller… 😉

          Marc

        3. @@JürgenB

          das geht aber cooler: http://www.motorvision.tv/wp-content/uploads/2015/12/Top-Gear-Staffel-17-Folge-04_Trip-im-Autozug-Jaguar-auf-Schienen_CREDITS_BBC-Worldwide-TV.jpg

          “I couldn’t get past due to a railway net design fault.” 😄

          “Thou shall not pass!”

          LLAP 🖖

          --
          “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      2. Hej Gunnar,

        @@Regina Schaukrug

        Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden

        Nicht?

        Doch! 😉

        Marc

    2. Hallo Regina Schaukrug,

      Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden (und visa versa).

      Gab es schon vor 1900.

      Ein gelegentlicher Gast dieses Forums hat den Beweis.

      Bis demnächst
      Matthias

      --
      Rosen sind rot.
      1. @@Matthias Apsel

        Ist ja auch nicht sinnvoll, Räder, die für eine Eisenbahn gemacht wurden, für PKW zu verwenden (und visa versa).

        Gab es schon vor 1900.

        1885 – wie konnte ich daran nicht gedacht haben‽

        Rosen sind rot.

        Rot ist die Rose.

        LLAP 🖖

        --
        “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
  3. Jedes HTML-Snippet hat den timestamp der Erstellung. Wenn die Aufbereitung geändert wird, kann ich per PHP-Code "alte" Snippets erkennen und neu generieren.

    Das ist doch schonmal gut, wenn Du einen Timestamp hast, kannst Du damit auch einen Last-Modified Header erzeugen, was das Cachen browserseitig erlaubt.

    Was Deine eingehende Frage betrifft, Programmiertechnik: Data-Access-Layer machen den Speicherort von Templates transparent. D.h., ob die Speicherung in Dateien oder Datenbanken erfolgt, ist dem Code der damit arbeitet egal, da wird nur der entsprechende Layer eingebunden. Damit ist ein DAL auch austauschbar und zwar so, dass ein etwaiger Austausch keine Code-Änderung nach sich zieht.

    OOP: Wie der Layer heißt, könnte eine zum URL konfigurierte Eigenschaft regeln. Z.B. dass für /foo.html sein Template aus MySQL geholt wird und für /bar.html aus ner Datei. Oder es wird zentral/global geregelt oder es regelt die an den URL gebundene Klasse,... es gibt viele Möglichkeiten.

    MfG