PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Archiv für Performance

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 »


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 »


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 »


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 »


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 »


Die Macht von INNER JOINS

Gerade eben wieder erlebt - INNER JOINS machen das Leben schön. Aber leider stelle ich ständig fest, das es MySQL Banausen gibt, die felsenfest behaupten, dass es keinen Unterschied zwischen CROSS JOINS, LEFT JOINS und INNER JOINS gibt.

Okay, kleines Beispiel. Eben rief mich ein Kunde an und meinte, es dauert etwa 20 Sekunden, bis eine bestimmte Seite in der Administration angezeigt wird. Zuverlässig reproduzierbar. Ein Blick auf die MySQL Konsole und schon war klar, wo der Hase begraben liegt.

Die Seite hat einen Eigenschaften-Block, der aus einem allgemeinen Daten-Repository geladen wird. Das Repository ist durch 3 Tabellen realisiert: Die erste beinhaltet die Datensatz-definitionen, die zweite die Feld-Definitionen und die dritte die Wert/Feld/Datensatz Verknüpfung. Und so viele Datensätze waren in den einzelnen Tabellen:

  • Datensatz-Tabelle: 14000
  • Feld-Tabelle: 300
  • Werte-Tabelle: 111000

Den kompletten Artikel lesen »


Full House

Stell Dir vor, Du machst eine Party. Eine richtig große Party - in einem richtig kleinen Haus. Das wär ganz schön eng. Ich glaube es würden sich alle Mädels beschweren, die für den Weg zur Toilette eine Stunde brauchen und vor der Toilette nochmal ne halbe Stunde warten müssen.

Denk mal einen Schritt weiter: Wieviele Typen in Deinem Haus sind, die Du scheisse findest und niemals auf ein Bierchen eingeladen hättest. Aber sie haben sich selbst eingeladen und gleich noch ein paar Homies mitgebracht. Na super!

Dieser Blog-Beitrag greift das Thema ganz gut auf: Nutze Includes nur dann, wenn Du den Code auch benötigst, sonst bricht die ganze Applikation zusammen und ist so lahm wie eine Oma auf dem Weg zum Einkaufen.

Also Leute: Ballert Eure Scripte nicht hirnlos mit 1000 includes voll und wenn ihr includes benutzt, ladet nur das Zeug nach, dass ihr wirklich braucht.


« Neuere Artikel