ababda: Performance: Parameter oder Request

Hallo Forum,

ich habe eine generelle Frage zur Performance von PHP.

In meinem konkreten Beispiel übertrage ich stinknormale Formulardaten, unter anderem auch eine ID-Nummer. Hinter dieser ID-Nummer versteckt sich ein Datenbankeintrag (nehmen wir an es wäre der Datensatz eines Mitarbeiters, also Name, Vorname, Telefonnummer).

Auf der Seite, die die Formulardaten empfängt, muss ich nun eine Datenbankabfrage ausführen, um erneut an diese Daten zu gelangen.
Diese Datenbankabfrage habe ich allerdings schon auf der Formularseite ausgeführt. Ich könnte also diesen Datensatz auch per Formular (sprich, POST) übergeben, anstatt auf der Verarbeitungsseite den Request nochmals auszuführen.

Was ist hier generell performanter, eleganter, schöner, empfehlenswerter?

Lg
ababda

  1. In meinem konkreten Beispiel übertrage ich stinknormale Formulardaten, unter anderem auch eine ID-Nummer. Hinter dieser ID-Nummer versteckt sich ein Datenbankeintrag (nehmen wir an es wäre der Datensatz eines Mitarbeiters, also Name, Vorname, Telefonnummer).

    Auf der Seite, die die Formulardaten empfängt, muss ich nun eine Datenbankabfrage ausführen, um erneut an diese Daten zu gelangen.
    Diese Datenbankabfrage habe ich allerdings schon auf der Formularseite ausgeführt.

    Ist es denn überhaupt nötig irgendetwas noch mal zu senden und eine neue Seite aufzubauen?

    Ich könnte also diesen Datensatz auch per Formular (sprich, POST) übergeben, anstatt auf der Verarbeitungsseite den Request nochmals auszuführen.

    Was ist hier generell performanter ... ?

    Die Abfrage nicht noch mal zu machen spart auf jeden Fall. Die Frage ist dann, ob Du Dir das leisten kannst. Das hängt davon ab, in welcher Umgebung das stattfindet, was das für Daten sind und was mit ihnen geschehen soll, denn die Daten können potentiell von überall kommen und beliebigen Inhalt haben. Am Ende mußt Du vielleicht mehr Arbeit darauf verwenden (lassen), die Daten zu überprüfen.

    ... eleganter, schöner, empfehlenswerter?

    Kommt darauf an.

  2. Hi!

    Auf der Seite, die die Formulardaten empfängt, muss ich nun eine Datenbankabfrage ausführen, um erneut an diese Daten zu gelangen.

    Hast du ein aktuelles Problem mit schlechter Performance oder denkst du einfach nur darüber nach? Wie auch immer, du solltest vor einem Lösungsversuch konkrete Messungen des Istzustandes vornehmen und dann mit der erarbeiteten Lösung vergleichen. Nicht dass am Ende eine Verschlechterung eingetreten ist und du das nicht vergleichen kannst.

    Was ist hier generell performanter, eleganter, schöner, empfehlenswerter?

    Es ist vielmehr ein Nebenläufigkeitsproblem, ganz ungeachtet der Performance. A fragt einen Datensatz ab und du speicherst diese Daten irgendwo zwischen - wo ist erstmal egal. Nun kommt B und ändert etwas in dem selben Datensatz. A hat nun also nicht mehr aktuelle Daten in seinem Zwischenspeicher. Dieses Problem kann man generell lösen, indem man die zwischengespeicherten Daten nun als unaktuell kennzeichnet und sie dann neu abfragt. Und jetzt kommt ins Spiel, wo du die Daten abzulegen gedenkst. Im Formular, das bei A auf dem Browser rumlungert - darauf hat B keinen Zugriff. Abgesehen davon, dass die beim beim Client gelagerte Daten ohne weiteres nicht gegen Manipulation geschützt sind. Eine Session lässt die Daten im Server, aber auch da hat normalerweise nur jeder auf seine eigenen Sessiondaten Zugriff. Es ist zwar über normale Dateizugriffe möglich, alle Sessiondateien zu manipulieren, doch ob es performant ist, alle Dateien durchzuschauen, ob der Datensatz darin enthalten ist, wage ich zu bezweifeln.

    Ein Zwischenspeicher für die Datensätze muss also in einem Mehrbenutzersystem allgemein erreichbar sein. Dazu gibt es Cache-Systeme. Eine Billig-Lösung hingegen wäre, eine Session mit definierter Session-ID zu verwenden. Wobei jedoch zu beachten ist, dass das Schreiben der Sessiondatei auch nicht kostenlos zu haben ist und bei vielen Datensätzen wieder unperformant werden kann.

    Allerdings solltest du immer beachten, je mehr Code du produzierst, desto mehr musst du am Ende pflegen. Die beste Lösung ist am Ende oft die einfachste.

    Lo!

  3. Moin!

    In meinem konkreten Beispiel übertrage ich stinknormale Formulardaten, unter anderem auch eine ID-Nummer. Hinter dieser ID-Nummer versteckt sich ein Datenbankeintrag (nehmen wir an es wäre der Datensatz eines Mitarbeiters, also Name, Vorname, Telefonnummer).

    Auf der Seite, die die Formulardaten empfängt, muss ich nun eine Datenbankabfrage ausführen, um erneut an diese Daten zu gelangen.
    Diese Datenbankabfrage habe ich allerdings schon auf der Formularseite ausgeführt. Ich könnte also diesen Datensatz auch per Formular (sprich, POST) übergeben, anstatt auf der Verarbeitungsseite den Request nochmals auszuführen.

    Wenn du die DB-Abfrage nochmal machst, bist du sicher, dass die ermittelten Daten wirklich Original sind.

    Wenn du die Daten aus dem Formular vom Client verwendest, dann sind die beliebig manipuliert, also alles andere als Original.

    Die Frage ist hier also nicht, was performanter ist, sondern was man sich aufgrund der Sicherheitsanforderungen überhaupt erlauben kann.

    Erst wenn beide Wege äquivalent sicher sind, wäre ein Gedanke an Performance zu verschwenden.

    - Sven Rautenberg