PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Archiv für Performance

Performance: MySQL Result-Sets auslesen

Endlich seit langem mal wieder ein sehr interessanter Artikel vom PHP Performance Blog. Diesmal wurde untersucht, mit welcher Methode man am schnellsten Daten aus einem MySQL Result-Set laden kann.

Als Sieger benennt er mysql_fetch_row (Platz 1) und mysql_fetch_assoc (knapp dahinter auf Platz 2). Diesmal gibt es zwei Sieger, obwohl eine Funktion eindeutig schneller ist :) Der Grund ist ganz einfach: mysql_fetch_assoc ist schlichtweg übersichtlicher und zukunftsicherer als ein numerisch aufgezogenes Array (Man denke an neue Tabellenspalten).

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Newsletter Queue mit PHP

Wer massenweise Newsletter versendet, und ich meine wirklich massenweise: Wenn mehrere tausend Mails der Regelfall sind, ist es der Web- und Mailserver-Performance zuträglich, wenn man eine Queue verwendet.

Ich habe selbst seit einigen Jahren eine ähnliche Queue im Einsatz, wie ich sie heute bei den PHP Classes entdeckt habe. Diese Newsletter Queue verwendet eine MySQL Datenbank um die Mails mit Empfänger, Betreff, Absender und Body zwischen zu speichern. Zusätzlich gibt es noch eine Status Flag, der aussagt, ob die Mail gerade bearbeitet wird (pending). Nach Abschluss der Bearbeitung wird der Datensatz aus der Datenbank entfernt.

Das Versenden übernimmt übrigens ein Cronjob, für den auch gleich ein passendes Script mitgeliefert wird.

Einziges Manko wäre meiner Meinung nach der fehlende Support für Attachments, weil wirklich nur der HTML Body gespeichert wird. Aber ich denke mit 2, 3 Handgriffen kann man den kompletten Mail-Quelltext samt Anhängen in die Datenbank schreiben und versenden.

Update: Alternativ sei auch jedem der PHP mini Mailer empfohlen - super schnell und einfach Mails mit Attachments und Dringlichkeitshinweis versenden… Auch Massenversand über den BCC-Header ist möglich, vorausgesetzt der eigene Mailserver machts mit und wertet den Versucht nicht als Spam.

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

MySql Performance steigern

Habe gerade noch einmal meine Bibliothek durchgeschaut und mir ist aufgefallen, das ich ein Buch nicht berücksichtigt habe: “High Performance MySql” lautet der Titel. Und der ist Programm!

Auf knapp 300 Seiten beschreiben die Autoren, wie MySql funktioniert. Denn das ist die Tuning-Grundlage - man muss wissen, wie MySql tickt, um es optimieren zu können.

Dabei wird nicht nur Query-Optimierung besprochen, sondern auch Replikation (Master/Slave Setup), Backup, Recovery und Lastverteilung (Clustering). Besonders das Thema “Benchmarking” hat mir sehr weitergeholfen, mit Tools meine Anwendungen zu verbessern.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Zwischen SSL und ‘normalem’ HTTP hin- und herschalten

Via PHP Adventskalender von Chris Shiflett, Tag 4. Heute hat Chris mal wieder ein sehr interessantes Türchen in seinem Adventskalender aufgemacht: Herausgehüpft ist der Neuseeländer James McGlinn.

Er erinnert uns daran, SSL nur dann zu verwenden, wenn es um die Übetragung von privaten Daten geht - z.B. im Onlineshop oder beim Login. Für “normale” Webseiten benötigt man kein SSL.

Wer eine Seite mit SSL Zertifikat betreibt, weiß, dass diese ganze SSL Maschine ziemlich viel Serverleistung frisst. Warum also Performance verschwenden, wenn man nicht muss? Im Juni gabs einen Artikel vom PHP Blogger zum Thema “SSL erwzingen“, aber James geht noch weiter:

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Performance durch PHP Benchmarks

Wer gerne detailiert Auskunft über bestimmte PHP Operationen haben möchte, sollte mal bei den PHP Benchmarks vorbeischauen.

Dort bekommt man eine spitzen Übersicht und kann schnell entscheiden, welche Funktion für welche Operation am besten geeignet ist. Oft machen Funktionen bei großen Datenmengen schlapp und umgekehrt sind andere Funktionen dafür prädestiniert. Welche - das wird auf der Website verraten.

Zu jedem Problemfall gibt es einen ausführlichen Artikel, der den Testcode vorstellt und die Ergebnisse analysiert. Natürlich wird jedes Script mehrmals durchlaufen, um eine mittlere Ausführungszeit zu bestimmen.

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Programmierer müssen mehr delegieren

Programmierer neigen ja dazu, möglichst viele Probleme selbst lösen zu wollen. Man bekommt es mehr oder minder mit in die Programmierer-Wiege gelegt und fängt bald an, statt nur kleineren Problemen den Garaus zu machen auch komplexe Probleme zum tausendsten Mal neu zu lösen.

(Nur mal so als Offtopic zwischen drin: Ich hab gerade festgestellt, das es eigentlich gar keinen Garaus gibt. Wohl nur in dieser einen einzigen Redewendung… Weder Wikipedia noch der Duden wissen Bescheid.)

Aber wie dem auch sei: Die besten Programmierer sind die faulsten. Sie adaptieren bekannte Problemlösungen für ihre Projekte und delegieren Probleme weiter an andere Anwendungen, Frameworks oder Bibliotheken statt das Rad zum millionsten Mal neu zu erfinden.

Welche Arten der Delegierung gibt es und wann sind sie sinnvoll anzuwenden?

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

PHP ist eine Template Engine!

Den meisten meiner Leser ist bekannt, das ich kein Freund von Template-Engines bin. Diese unnützen Klassen und Bibliotheken “versuchen” Optik von Logik und Business-Code zu trennen - was dabei herauskommt, nennt sich unter Umständen Smarty und ist ein Witz.

Bei meinem Lieblings-Template-Veteranen Smarty wird PHP Code durch Pseudo-Code ersetzt - irgendwelche Schleifen- und Bedingungskonstrukte, verstümmelte Variablennamen und Nicht-HTML Tags fliegen kreuz und quer durch die HTML Landschaft. Im schlimmsten aller Fälle verteilt über verschiedene Template-Dateien.

Das nächste Level der Verrücktheit sind CM-Systeme, die alles unnötig komplizieren (obwohl alles einfacher werden sollte), noch mehr Pseudo-Tags und -Code einführen und ein Desaster an Performance anrichten. Das beste Beispiel ist Typo3, aber auch große kommerzielle CMS Hersteller wie Day, Red Dot, Vignette, Fiona (von Infopark) und Imperia (Reihenfolge ohne Wertung) begehen ähnliche Fehler. Die Performanceschwäche wird übrigens meist mit dem genialen Statischen-Cache-Feature wieder gut gemacht.

Gibt’s denn kein Projekt, das das besser macht?

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Suchen (und finden) mit PHP - Teil 1

Ein ungeschriebenes Gesetz der Applikationswelt ist, dass ein Programm welches mehr als 5 Bildschirmseiten Nutzdaten enthält, durchsuchbar sein sollte. Dabei gibt es verschiedene Schwierigkeitsgrade und unterschiedliche Suchdisziplinen. In dieser mehrteiligen Artikelserie möchte ich praktische Methoden zur Indexierung, Suche und Suchergebnisdarstellung vorstellen.

Ganz zu Beginn gibt es nichts als Rohdaten, die ausgewertet und durchsucht werden können. Zunächst ein paar allgemeine Beispiele (wahrscheinlich fällt jedem direkt eine konkrete Projekt-Anwendung ein):

  • Direkt durchsuchbare Dateien (PDFs, Word-Dokumente, Textdateien)
  • Undurchsuchbare Dateien mit in der Datenbank hinterlegten Meta-Informationen (Fotos, Grafiken)
  • Datenbank-Einträge bzw. Tabellenattribute wie Vorname, Name, PLZ und Ort einer Kontaktdatenbank
  • Volltext-Datenbankinhalte wie HTML-Code oder Texte einer CMS-Datenbank
  • Quelltexte resultierend aus einem Crawlerdurchlauf
  • Verschachtelte Verzeichnbezeichnungen aus einem Dateisystem

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Fehlerbehandlung im Live-Betrieb

Das Fotolia ein Problem mit der Performance hat, ist einschlägig bekannt ;-) Fotolia ist ein PHP Projekt und demonstriert geradezu auf tragische Art und Weise, wie man es nicht machen sollte. Es kämpft mit riesigen Datenmengen und extrem guten Zugriffszahlen - ich habe den Eindruck die Jungs (oder der Server) von Fotolia sind schlichtweg überlastet.

Bei meiner aktuellen Bild-Recherche auf Fotolia ist mir aufgefallen, das Fehlermeldungen bei Fotolia direkt auf der Webseite ausgegeben werden - ist das wirklich gut? Definitiv Nein - Fehlermeldungen haben auf einer Liveseite nichts zu suchen.

Es kann ganz schön gefährlich sein, denn durch SQL-Statements die direkt auf der Webseite ausgegeben werden, kann man ganz schnell verraten, mit welchen Frameworks oder Bibliotheken man arbeitet, wie die Datenbankstruktur aussieht - uvm…

Nachfolgend ein paar Tipps, wie man es besser machen kann.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks

Wie groß ist Dein Upload?

Diese Frage stelle ich mir immer wieder. Kunden kommen ja auf die absonderlichsten Dinge. Installiert man ein WCMS, ganz gleich welches, muss erst mal ein 200MB Video hochgeladen werden - und da krachts natürlich weil das Upload-Limit geringer eingestellt ist.

Macht es überhaupt Sinn, die maximale Uploadgröße höher zu setzen als den vorkonfigurierten 2 MB? Ja klar. Wie schnell findet sich ein PDF, ein hochauflösendes Pressefotos oder gleich ein Zip-Archiv, das in das WCMS Repository hochgeladen werden soll. Und das ist auch sinnvoll.

Problematisch beim klassischen Upload über ein HTML Formular ist natürlich auch der fehlende Fortschrittsbalken. Als Nutzer weiß man nie so genau “Lebst Du schon oder lädst Du noch?” ;) In den Zeiten von 6M-DSL und/oder synchronen Uploadraten wird die größte Größe immer kleiner. Trotzdem uploaded man bei 100 oder 200MB (jetzt mal ganz extrem, ist aber schon vorgekommen) eine ganze Weile - um als Nutzer nach einer halben/dreiviertel Stunde festzustellen, dass es ein Uploadlimit gibt :)

Den Sicherheits-Gedanken nicht zu vergessen - Wie schnell öffnet man ein riesen Scheunentor für Leutchen, die man besser nicht auf seinem Server hätte.

Den kompletten Artikel lesen »

Teile und genieße Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • MisterWong
  • del.icio.us
  • Technorati
  • Digg
  • Slashdot
  • YahooMyWeb
  • Furl
  • Ma.gnolia
  • Spurl
  • Netscape
  • StumbleUpon
  • MyShare
  • blogmarks
Ältere Artikel »