Encoder: Script erzeugt Bild und Text, was damit tun?

Hallo
Der Themenbereich Datenbank dürfte vielleicht wenigstens ansatzweise passen :-)
Ich habe ein Script (php), das Daten aus einer DB ausliest und diese grafisch darstellt. Diese Grafik wird als Bild zurückgegeben, welches in einer Webseite eingebunden ist. Daten aus genau diesem Ergebnis sollen zusätzlich als Text in der Webseite erscheinen, Minimal/Maximalwerte, Summen, Durchschnitt und so weiter.

Der Code zum Daten laden und aufbereiten wird demnach immer zweimal aufgerufen, einmal von der Webseite aus um an den Text zu kommen und dann gleich nochmal um das Bild zu erzeugen. Da frag ich mich jetzt, ob das nicht auch anders geht.

Vielleicht die Daten irgendwo zwischenpuffern? Aber dann muss ich sie trotzdem doppelt laden und zudem noch Zeitstempel verwalten, zur Prüfung ob sie noch nicht zu alt sind.
Hat jemand eine Idee?

  1. Hi!

    Der Code zum Daten laden und aufbereiten wird demnach immer zweimal aufgerufen, einmal von der Webseite aus um an den Text zu kommen und dann gleich nochmal um das Bild zu erzeugen. Da frag ich mich jetzt, ob das nicht auch anders geht.
    Vielleicht die Daten irgendwo zwischenpuffern?

    Ja, eine Session wäre eine Möglichkeit.

    Aber dann muss ich sie trotzdem doppelt laden

    Du hast da eine Bauchgefühl, dass das nicht effizient sein könnte. Vielleicht dauert die erneute Abfrage aus dem DBMS signifikant länger als das Laden aus der Session, vielleicht aber auch nicht, weil auch das DBMS möglicherweise einen Query-Cache verwenden kann.

    und zudem noch Zeitstempel verwalten, zur Prüfung ob sie noch nicht zu alt sind.

    Na, das ist kein großer Aufwand.

    Lo!

    1. Du hast da eine Bauchgefühl, dass das nicht effizient sein könnte. Vielleicht dauert die erneute Abfrage aus dem DBMS signifikant länger als das Laden aus der Session, vielleicht aber auch nicht, weil auch das DBMS möglicherweise einen Query-Cache verwenden kann.

      Du hast mich da auf was gebracht. Das Laden an sich zwischen open und close der DB dauert 1 ms. Der Rest der Zeit (nochmal ca. 15 ms) wird fürs Zeichnen des Bilds verbraten und das muss ich ja nur einmal tun.
      Nachdem die Seite wahrscheinlich keine 100 mal pro Tag aufgerufen wird, betrachte ich das mal als effizient genug.

      Danke! So einfach kanns gehen :-)

      *schäm* fürs nicht selber drauf kommen

    2. Moin!

      und zudem noch Zeitstempel verwalten, zur Prüfung ob sie noch nicht zu alt sind.

      Na, das ist kein großer Aufwand.

      Da würde ich leicht widersprechen wollen, das kann zu einem größeren Aufwand werden. Und genau deswegen auch langsamer werden, als der Originalvorgang. Also Obacht beim "Optimieren", dass man nicht das Gegenteil erreicht.

      - Sven Rautenberg

      1. Hi!

        und zudem noch Zeitstempel verwalten, zur Prüfung ob sie noch nicht zu alt sind.
        Na, das ist kein großer Aufwand.
        Da würde ich leicht widersprechen wollen, das kann zu einem größeren Aufwand werden.

        Dann hast du eine andere Lösung im Kopf als ich. Meine sah vor, den Abfragezeitpunkt aus dem DBMS nebst den Daten in einer Session festzuhalten und beim nächsten Request auf diesen Zeitwert zu prüfen. Eine Subtraktion oder Addition und ein Vergleich - fertig.

        Lo!

  2. hi,

    Der Code zum Daten laden und aufbereiten wird demnach immer zweimal aufgerufen, einmal von der Webseite aus um an den Text zu kommen und dann gleich nochmal um das Bild zu erzeugen. Da frag ich mich jetzt, ob das nicht auch anders geht.

    Freilich geht das auch anders: Eine Abfrage. Zeig mal die Tabelle(n).

    Hotti

    1. Es ist nur eine einzige Abfrage. Die sucht alle Daten im passenden Zeitraum zusammen und gibt sie nach Datum sortiert aus.
      Das Script zeichnet daraus ein Bild (sofern gewünscht) und ermittelt dabei gleich noch die Summe aus bestimmten Feldern, sowie Min/Max Werte usw.

      Mein Fall ist jetzt nur, dass dieses Script zweimal aufgerufen wird. Einmal für die textuellen Daten der Seite (das was nebenbei beim Daten laden im Script zusammengestellt wird) und dann kurz drauf gleich nochmal, weil die Seite die Grafik einbindet und dafür nochmal alles geladen wird.

      Aber ich habs mal nachgemessen, die meiste Zeit geht dabei für das Bild drauf und das lass ich nur dann zeichnen wenn wirklich ein Bild gefragt ist. Das Laden an sich ist sehr schnell, das passiert dann halt wohl doppelt.
      Siehe hier.

    2. Hi!

      Der Code zum Daten laden und aufbereiten wird demnach immer zweimal aufgerufen, einmal von der Webseite aus um an den Text zu kommen und dann gleich nochmal um das Bild zu erzeugen. Da frag ich mich jetzt, ob das nicht auch anders geht.
      Freilich geht das auch anders: Eine Abfrage. Zeig mal die Tabelle(n).

      Das hat nichts mit der Tabellenstruktur oder einem Join-Problem zu tun, sondern damit, dass zwei Requests bearbeitet werden müssen.

      Lo!