Performance-Optimierungen & Sicherheit

Radhad

Erfahrenes Mitglied
Hi zusammen,

ich mache mir momentan ein paar theoretische Gedanken zur Performance-Optimierung.

Zum einen geht es darum, wie man am besten Userdaten auslesen kann mit Blick auf die Performance.

Das ist zum Beispiel wichtig bei einem Forum (oder Blogs etc.), wo zu jeden Beitrag viele Userdaten gelesen werden beim Laden eines Threads. Bisher habe ich so agiert, dass ich versucht habe, so viele Daten wie möglich mit einem SQL Query abzufragen. Allerdings hat dies ein paar Nachteile.

Ein Beispiel:
In dem Forum hat User A in Thread A insgesamt 15 Posts geschrieben. Im Ergebnis des SQL-Query's stehen also 15 mal die Userdaten des Users A drin.

Alternativ dachte ich an folgende Lösung (allerdings weiß ich nicht, ob die performanter ist, daher stelle ich diese Frage nun hier):
Im SQL Query wird nur die UserID ausgelesen. Zusätzlich gibt es ein Array, wo die Userdaten reingeschrieben werden. Existiert eine UserID in diesem Array, werden die Daten aus dem Array gelesen. Existiert die UserID nicht, wird eine Abfrage gemacht um die entsprechenden Userdaten zu holen und im Array gespeichert.

Hat jemand Erfahrungen dazu gesammelt und könnte mir Tipps geben? Userdaten werden ja fast überall gelesen (News, Blogs, Kommentare, Foren) und je nachdem ist Performance entscheidend.


Des weiteren spielt natürlich auch Sicherheit eine Rolle, z.B. BBCode um HTML verbieten zu können. Im Bereich BBCode's habe ich bisher keine Erfahrungen gesammelt, möchte dies aber demnächst einsetzen. Und zwar stelle ich mir folgende Frage: Ist es besser, die Textstrings vor dem speichern der Datenbank umzuwandeln, sprich zuerst HTML zu löschen, danach entsprechend die BBCodes umsetzen und dann zu speichern oder sollte man dies erst beim auslesen aus der Datenbank umwandeln? Gibt es da eventuell Sicherheitsprobleme? Oder gibt es da im Bereich Sicherheit gar keine unterschiede?



Gruß Radhad
 
so lange du die Userdaten mit einem Joins liest und nicht pro Userdaten nen eigene query ist die Performance spitze und wird nie Probleme geben.

Falls in dem System ein Artikel später nochmal bearbeitbar sein soll, würde ich dir empfehlen direkt den UserInput zu speichern und die sicherheitsrelaven Aktionen erst beim Anzeigen ausführen ansonsten schon alles vorher ausführen und geparsed in der datenbank speichern, da du dir dann bei jedem anzeigen des artikels rechenzeit sparst ;)
 
hmm... Ich dnek wär etwas aufwendig pro Artikel eine View anzulegen ^^ Dann gäb's ja haufenweise Views :/
 
Überleg dir den Einsatz von PDO.
Ist angeblich schneller und mit prepared kannst du deine Abfragen wiederverwenden.
 
Überleg dir den Einsatz von PDO.
Ist angeblich schneller und mit prepared kannst du deine Abfragen wiederverwenden.

neija ob man nun PDO verwendet oder MySQLi macht keinen Unterschied, wobei mir MySQLi um Meilen besser gefällt. Und es ist eben die Frage wieoft ihr Prepared Statements braucht, denn nach jeder Scriptausführung "verschwinden" die wieder, also bringen sie nur etwas wenn du den gleichen Query in einem Script mehrmals bei der Scriptausführung ausführst, was eigentlich nur selten passiert.
 
Vorteil ist halt, dass du SQL injection vergessen kannst, und sobald du oo codest hast du wieder einen Schritt mehr in Richtung OOP PHP.

Mit der Performance weiss ich nicht genau. Angeblich ist es, da die Klasse in C geschrieben ist, schneller.
Aber warscheinlich nur schneller als eine in PHP geschrieben mysql connect Klasse.

Aber jedem das seine
 
Zurück