![]() |
| | Themen-Optionen |
| | Nach oben #1 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Rezension: Professionelle PHP 5-Programmierung
Einen Gedankenaustausch zu diesem Buch gibt es an dieser Stelle. In diesem Thread werde ich jedes Kapitel schnellstmöglich nach der Bearbeitung mit einer Kritik versehen. In oben verlinktem Thread wurde ich gebeten über das Buch zu berichten und ich denke, dass dies auch sinnvoll ist. ------------- Ein Inhaltsverzeichnis findet Ihr hier.
Dieser Thread wird mit der Zeit stetig erweitert. Bei Fragen zum Buch oder Verbesserungsvorschlägen zu meinem Bericht könnt Ihr oben verlinkten Thread nutzen. Ich hoffe, dass Euch diese Rezension hilfreich sein kann. Grüße, Ben. Geändert von Jann Hendrik (09.05.2008 um 18:07 Uhr). Grund: links angepasst | ||
| |
| | Nach oben #2 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 1, Programmierstile Zitat aus der Einleitung Zitat:
Nach dem Lesen behaupte ich, dass dieses Kapitel für die meisten Möchtegernprogrammierer das wichtigste Kapitel des Buches sein könnte. Der Autor geht detailliert, aber nicht pingelig auf die unterschiedlichen Möglichkeiten ein, wie man Code strukturiert schreiben kann. Dabei geht es vom konsequenten Einrücken, über die Vergabe und Struktur von Methoden-, Variablen- und Klassennamen bis hin zur richtigen Dokumentation mittels phpDocumentor. Die Contra-Beispiele sind gut gewählt und letztlich stimme ich in den meisten Punkten mit ihm überein. Ich bin kein großer PHP-Entwickler, also heißt das nicht so viel. Allerdings finde ich, dass dieses Kapitel für den Einstieg sehr angenehm war. Der Autor stellt im ersten Kapitel keine wirkliche Anforderungen an den Leser, nichtsdestotrotz habe ich große Lust direkt weiterzulesen. Gleichzeitig finde ich aber nicht, dass ich mir das Kapitel hätte sparen können, da es für mich doch hilfreich war zu sehen, wie solche "Dinge" in professionellen Kreisen gehandhabt werden. Fazit: Ich habe Lust auf mehr! Geändert von Ben (05.06.2006 um 22:58 Uhr). | |
| |
| | Nach oben #3 | |||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 2, Objektorientierte Programmierung mit Entwurfsmustern Zitat aus der Einleitung: Zitat:
In diesem Unterkapitel 2.1 (Einführung in die OOP) muss ich anmerken, dass der Übersetzer bzw. seine Korrekturleser doch einige Fehler in das Buch eingebaut haben. Es sind nicht viele Tipp- und Zeichensetzungsfehler, aber doch genug, um etwas nachdenklich zu werden. Jedenfalls war das bei mir so! Weiterhin taucht ein kleiner inhaltlicher Fehler auf Seite 64 (Kap. 2.1.1, Vererbung) auf Zitat:
Generell zeigt sich auch in diesem Buch, dass es schwer ist zu erklären, was objektorientierte Programmierung auszeichnet bzw. was an ihr "so toll" ist. Die Herangehensweise ist gut, aber ich vermisse teilweise .. hmm .. sagen wir mal die Entschlossenheit das Wissen auch wirklich "rüber zu bringen". Der eigentlich recht simple Begriff der Kapselung im Speziellen die Nutzung der modifier wird hier etwas wirr beschrieben. Zitat:
Mein "Hä?" hat sich mittlerweile geklärt. Ein Denkfehler meinerseits. Hier steht etwas dazu. Ich weiß, was die modifier machen und wie ich sie richtig einsetze, demnach sehe ich da mal drüber weg. Es soll aber hier angemerkt sein. (Ein Tippfehler und ein Zeichensetzungfehler in einem Absatz sind imho zu viel!) Ganz so schlimm ist der erste Teil des Kapitels im Ganzen nicht, aber so wirklich überzeugen tut er mich auch nicht. Das muss man so sagen. Ich hatte ehrlich gesagt etwas mehr erwartet, vielleicht war das mein Fehler. Der zweite Teil des Kapitels (2.2 Eine kurze Einführung in die Arbeit mit Entwurfsmustern) beschäftigt sich, wie der Titel schon vermuten lässt, mit Design Patterns in PHP. Es sei gesagt, dass in Kapitel 2.3 (Lesetipps) das Buch "Design Patterns" von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides empfohlen wird. Ich bin froh, dass ich es besitze, denn dieses Kapitel eignet sich vielleicht für einen Überblick, aber in meinen Augen nicht, um wirklich zu verstehen, wann man welche Entwurfsmuster verwenden kann/sollte und wann nicht. Aber das ist auch nicht das Ziel des Buches, das sei gesagt. Nichtsdestotrotz bin ich mit der ein oder anderen Passage nicht wirklich zufrieden. Es werden das Adaptermuster (Kap. 2.2.1), die Schablone (2.2.2), das Fabrikmuster (2.2.5) und das Singleton-Pattern (2.2.6) dargestellt. Die ersten beiden hätte man meiner Ansicht nach besser darstellen können. Vor allem das Schablonen-/Template-Pattern geht absolut unter. Mit den anderen beiden bin ich persönlich ganz zufrieden. Was ich mir gewünscht hätte, wäre z.B. das Facade-Pattern (Fassade). Aber nun gut, man kann schließlich nicht alles haben. Da in die Vorstellung der Entwurfsmuster noch die Erklärung des Polymorphismus und eine Einführung in die Nutzung der "magic functions" __get(), __set(), __call(), __autoload() eingefügt wird, wirkt das Kapitel auf mich ehrlich gesagt etwas wirr. Ich würde da eine 3+ verteilen, weil ich die Beispiele (die ich nicht alle durchgetestet habe) ganz nett und interessant fand. Gerade weil Kapitel 2.1.4 den Titel "Spezielle Methoden" trägt (__construct(), __destruct(), __clone()) hätte man eventuell die Struktur auch etwas anders wählen können. Nun gut, der Autor hat einen anderen, sicherlich akzeptablen, Weg gewählt und damit ist gut. Ich hätte es anders gemacht, aber mich fragt keiner. Auf geht es ... Kapitel 3, ich komme! Geändert von Ben (27.07.2006 um 13:35 Uhr). | |||
| |
| | Nach oben #4 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 3, Fehlerbehandlung Zitat aus der Einleitung Zitat:
Dieses Kapitel war auch ein Grund, warum ich dieses Buch überhaupt gekauft habe. Es steht als Leseprobe auf der offiziellen Produktwebseite von Addison-Wesley zur Verfügung. Schaut ruhig mal hinein. Ich habe nun den ersten Teil fertig (Kapitel 3.1 und Kapitel 3.2). Dieser Teil beschäftigt sich mit den grundlegenden, in PHP integrierten Fehlerroutinen und bietet einen, in meinen Augen, sehr gelungen, umfassenden Überblick über die Fehlerbehandlung in PHP. Neben Erläuterungen zu den unterschiedlichen Fehlerebenen (E_NOTICE, E_WARNING und E_ERROR (ab PHP 5 noch E_STRICT)) findet man auch gut dargestellte Beispiele, warum man sich überhaupt mit der Behandlung von Fehlern befassen sollte. Ich habe das bislang immer so gehandhabt, dass ich ein PHP-Code: Die Informationen werden sehr gut "an den Mann gebracht". Jedenfalls geht es mir so. In Kapitel 3.1.3 (Fehler ignorieren) wird die @-"Syntax" angesprochen. Diesbzgl. habe ich hier einen Thread eröffnet. Ich würde das Kapitel als "der Vollständigkeit halber hinzugefügt" beschreiben. Da es sich nur über eine halbe Buchseite erstreckt ist das sicherlich in Ordnung so! Bevor ich mich Kapitel 3.3 bzw. dem Bericht über dasselbe zuwende möchte ich noch ein kurzes Zitat aus Kapitel 3.2 anbringen Zitat:
So. Nach einer kleinen Pause bin ich nun am Ende des dritten Kapitesl angekommen und kann sagen, dass ich durch das Studium fortführender Quellen (z.B. das PHP-Manual) doch auf diesem Sektor, zumindest theoretisch, verbessert habe. Der Autor erklärt recht detailliert, was Ausnahmen sind und wie sie syntakisch in PHP angewendet werden. Einige Codeschnipsel sind nicht ganz korrekt, so ist natürlich eine Klasse PHP-Code: Dies sind aber Sachen, die man sich - sofern man es nicht weiß - mittels try & error und dem Nachschlagen im Manual selbst beibringen kann. In meinen Augen könnte das sogar ein taktisch gesetzter Fehler sein, damit man mal sein Hirn einschaltet. Es wird auf die Möglichkeit eingegangen ausführliche Fehlermeldungen zu produzieren bzw. sich diese von den Exceptions liefern zu lassen. Dies ist an einem Beispiel sehr gut erklärt und leicht verständlich. Ich möchte an dieser Stelle nicht auf das Beispiel eingehen. Es sei nur auf die Seiten verwiesen: Seite 115 bis Seite 118 in Kapitel 3.3.2, Beispiel für eine typisierte Ausnahme. Für mich war dann noch das Kapitel 3.3.4 (Fehler im Konstruktor behandeln) interessant. Das Kapitel ist sehr kurz gehalten vermittelt aber eine für mich wichtige Sache. Wenn eine Exception innerhalb des Konstruktors geworfen wird, wie z.B. in diesem Beispiel PHP-Code: Dies war mir nicht bewusst und hat somit einen Wissensmangel bei mir ausgeglichen. Kapitel 3.3.5 geht dann auf die Einrichtung eines Standard-Exception-Handlers ein. Sehr interessant, wie ich finde. Das Kapitel geht allgemein an die Sache heran, vermittelt aber einen guten Eindruck, warum solche ein Standard-Handler sinnvoll sein kann. Es wird ein Beispiel für eine mögliche Implementierung geboten, allerdings denke ich, dass diese Implementierung auch vom System abhängt, indem der Handler verwendet werden soll. Auch an dieser Stelle sei auf das PHP-Manual verwiesen! Kapitel 3.3.6 passt meiner Ansicht nach nicht wirklich zum Kapitel "Fehlerbehandlung". Der Titel "Daten überprüfen" machte mich neugierig, was denn Exceptions noch alles so zu bieten haben. Letztlich wird hier aber nur oberflächlich beschrieben, wie man Cross-Site-Scripting vermeidet bzw. Daten auf Ihre Validität prüft etc. In meinen Augen an dieser Stelle absolut unpassend, weil in keinem Zusammenhang mit der Fehlerbehandlung, die man zuvor erläutert bekam. Im Ganzen bin ich aber doch zufrieden mit dem Kapitel, da ich sehr viele neue, interessante Punkte kennengelernt habe, welche ich auch teilweise direkt umsetzen konnte. Da ich Exceptions an sich schon aus Java kenne, ist das nichts Neues für mich. Nichtsdestotrotz war es für mich hilfreich zu sehen, was für Möglichkeiten einem Ausnahmen in PHP bieten. Kritikpunkt ist neben dem unpassenden Kapitel über Cross-Site-Scripting und einigen kleineren Fehlern, das Fehlen von ein paar leckeren Tricks und Kniffen zur Anwendung von Ausnahmen in PHP. Dies liegt aber eventuell daran, dass der Autor selbst nicht der absolute Liebhaber von Ausnahmen ist .. so kam es mir zumindest vor. Geändert von Ben (06.06.2006 um 00:12 Uhr). | ||
| |
| | Nach oben #5 | |||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 4, Templates und das Web: Implementierung mit PHP Zitat aus der Einleitung Zitat:
Smarty ist für mich absolut uninteressant, da ich immer an eigenen Lösungen interessiert bin, die nur genau das machen, was ich brauche. An dieser Stelle sei auf folgende Themen in diesem Forum hingewiesen: Nun gut. Der Autor beginnt das Kapitel mit folgender Aussage Zitat:
Im Verlaufe des Kapitels wird darauf eingegangen wie Smarty installiert wird, wie man das erste "Hello world"-Template erstellt und wie man fortgeschrittene Techniken, wie spezielle Funktionen und den Smarty-Cache (Kapitel 4.2) verwendet. Für Interessierte eventuell gut, mich hat es nicht interessiert! Zum Schluss wird sehr kurz darauf eingegangen, wie man eine eigene Lösung implementieren könnte. In meinen Augen hätte man sich das aber auch sparen können, da die Beschreibung eher mager ist. Fazit: Uninteressantes Kapitel für mich, welches zum Glück sehr kurz gehalten war. Kritikpunkt ist, dass der Autor kein gutes Beispiel für eine eigene Template-Engine bringt. Er schreibt auf Seite 136 Zitat:
Aber nun gut .. sei es drum! Geändert von Ben (06.06.2006 um 11:33 Uhr). | |||
| |
| | Nach oben #6 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 5, Standalone-Skripts mit PHP implementieren Zitat aus der Einleitung Zitat:
Zum Einen habe ich derzeit keinen wirklich Verwendungszweck und zum Zweiten steht dort folgende Anmerkung Zitat:
Ich hoffe, dass ich irgendwann mal auf dieses Kapitel zurückgreifen kann. Im Moment muss ich aber leider den Bericht für Kapitel 5 zurückstellen. Danke für Euer Verständnis. Geändert von Ben (06.06.2006 um 11:34 Uhr). | ||
| |
| | Nach oben #7 | |||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 6, Unit-Tests Zitat aus der Einleitung Zitat:
Als zentrale Aussage möchte ich einen Satz zitieren, der gleichzeitig der erste Satz und auch der erste Absatz in diesem Kapitel ist. Zitat:
Bevor ich mit dem Bericht über dieses Buchkapitel beginne sei gesagt, dass es mir aufgezeigt hat, warum Tests wichtig sind! Der Autor geht sehr intelligent an das Problem heran, welches ich oben beschrieben habe. Der Großteil der Programmierer versucht sich vor Tests zu drücken. Er untersucht, warum es so ist und wo der Trugschluss in den Argumenten der Entwickler liegt. Dabei sei noch ein Zitat angefügt, welches ich unkommentiert stehen lassen möchte Zitat:
Schlossnagle verweist auch kurz auf das Extreme Programming und die Verbindung zu Unit-Tests. Die schrittweise Heranführung an den ersten Unit-Test und die effektive Nutzung von PHPUnit finde ich sehr gelungen. Ich bin wie gesagt totaler Neuling auf diesem Gebiet und somit kann ich wohl behaupten, dass die Vermittlung der theoretischen Grundlagen gut gelungen ist .. in meinem Empfinden jedenfalls. Die Tests, die als Beispiel durchgeführt werden sind sicherlich nicht wirklich auf ein wirkliches System übertragbar, aber man erkennt schon, in welche Richtung dieses Tests laufen. Automatisierte Tests, die eine komplette API einer Unit/eines System-Teilbereichs auf Korrektheit und Konsistenz überprüft. Schlossnagle geht dabei auf verschiedene Wege ein, wie man größere Applikationen testen kann. So beschreibt er z.B. die Ansätze der inline Unit-Tests (Tests, die in den zu testenden Dateien implementiert sind) und der ausgelagerten Unit-Tests (Tests in separaten Dateien) ein. Sehr interessante Gedankengänge, wie ich finde. Vor allem gibt der Autor an dieser Stelle auch ein persönliches Statement ab, was mich sehr freut. Gerade das war ja auch ein Mitgrund, warum ich mir dieses Buch gekauft habe Ich möchte erfahren, wie ein Profi arbeitet! Am Rande sei erwähnt, dass Schlossnagle den Weg der ausgelagerten Unit-Tests bevorzugt. Ab Kapitel 6.3, Zusätzliche Features in PHPUnit, wird die Anwendung der Testsuiten fortgeschrittener. Es werden individuelle Fehlermeldungen erstellt, Testbedingungen hinzugefügt und erklärt, wie man weitere Effektivität in die Verwendung der Tests hineinbekommt. Dieses Kapitel bringt meines Erachtens einen sehr guten Ausblick auf das, was man mit PHPUnit alles machen kann. Den Rest kann man dann z.B. hier nachlesen: (die aktuelle Version des Buches ist noch nicht auf deutsch verfügbar!) In Kapitel 6.4, Durch Tests beeinflusstes Design, wird auf die Methode des Test-Driven-Development (TDD) eingegangen. Sehr interessantes Thema, über welches ich nochmal in Ruhe nachdenken muss. TDD geht nach dem Prinzip vor, dass man vor der ersten Codezeile des Systems den ersten Test schreibt, der dieses System testet. Klingt paradox, ist aber genau so gewollt. Der Test schlägt natürlich fehl, weil ja gar nichts existiert, was man testen könnte. Da man aber durch die Konzeption des Systems feste Resultate im Test erwartet, ist man also nun in der Lage Code zu implementieren, der letztlich den Test besteht. So verfährt man mit allen Testbereichen und erhält am Ende ein komplett getestetes System. Ist jetzt nicht gut erklärt, aber das Prinzip sollte schon klar geworden sein. Der Autor bringt diesbzgl. ein recht nettes Beispiel, welches ausführlichst besprochen wird. Ich habe nun immer noch keinen wirklichen Test geschrieben. Ich bin also praktisch gesehen kein bisschen schlauer, als vorher. Nichtsdestotrotz hat mir das Kapitel etwas gebracht, nämlich das Verständnis, warum es überhaupt wichtig ist - vor allem bei großen Applikationen - zu testen! Nächster Anlaufpunkt diesbzgl. wird dann wohl oben verlinktes OpenBook sein. Wirklich klasse. Habe eben auch schon dort etwas quergelesen und muss sagen, dass ich dieses Thema doch interessanter finde, als ich mir das gedacht hätte. Fazit: Das Kapitel hat seinen Zweck in meinem Fall mehr als erfüllt. Es hat mir eine sehr gute Einleitung gegeben, aufgepeppt mit einer Menge Beispielen, die auch zu Ende implementiert und besprochen wurden. Es wurde auf fortgeschrittene Möglichkeiten hingewiesen, welche man sich dann selbst aneignen kann. Perfekt! Das war ein geniales Kapitel! Schulnote: 1! Auf die Richtigkeit der Quellcodes gebe ich an dieser Stelle nicht Acht, weil es für mich keine Bedeutung hat. Geändert von Ben (06.06.2006 um 11:34 Uhr). | |||
| |
| | Nach oben #8 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 7, Entwicklungsumgebungen verwalten Zitat aus der Einleitung Zitat:
George Schlossnagle geht zwar intensiv auf die Handhabung von CVS ein, nichtsdestotrotz sind die Ausführungen aber sehr gut für das generelle Verständnis einer solchen Software zu gebrauchen. Hat mir doch weitergeholfen! Ich habe mich aufgrund dieses Kapitels auch dazu entschlossen ab sofort generell alle meine Projekte mittels Subversion zu verwalten, wobei es da egal ist ob Subversion, CVS oder eine andere Anwendung. Ein Zitat Zitat:
Ich will an dieser Stelle gar nicht so tief darauf eingehen, was dort alles beschrieben wird. Kurzgesagt reicht der Überblick von simplen commit bis zum branchen, symbolischen Tags und der Verwaltung von Produktiv- und Entwicklungsumgebungen! Der Autor geht dabei öfters davon aus, dass man kein SharedServer verwendet, allerdings ist das auch gut so, da wir hier ja von "PHP im Unternehmen" sprechen und nicht von irgendwelchen SharedHosting-Möchte-Gern-Webentwicklern, die gar nicht wissen, dass man ein Gewerbe anmelden muss, wenn man gegen Geld arbeitet. In Kapitel 7.2, Verwalten von Paketen, wird auf die Problematik eingegangen, dass Applikationen auf unterschiedlichen Systemen unterschiedliche Fehler produzieren können, und das man aus diesem Grund Komplettpakete inkl. dem Apachen, PHP, ... ausliefern sollte. Auch hier merkt man, dass von einem kompletten Root-Zugriff ausgegangen wird. Generell gilt, wie auch in Kapitel 6, dass der Autor hier sehr gute Arbeit geleistet hat, was die Darstellung von grundlegenden Problemen, Argumenten, Vor- und Nachteilen des Projektmanagements angeht. Auch hier habe ich bislang nichts ausgetestet. Das kommt später. Ich nehme aber auch aus diesem Kapitel folgende Informationen mit
Wiederum kann ich nur sagen: Herzlichen Glückwunsch zu einem sehr guten Kapitel, welches Lust auf mehr macht. Mal sehen, ob mir nicht noch ein Buch bzgl. Subversion zulege. Das Thema hat mich zuvor schon interessiert und das wurde nun noch gesteigert. Weiter geht es zu Kapitel 8! Geändert von Ben (06.06.2006 um 12:12 Uhr). | ||
| |
| | Nach oben #9 | |||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 8, Eine gute API erstellen Zitat aus der Einleitung Zitat:
Das Kapitel beginnt mit einer vom Autor aufgestellten Definition von "gutem Code". Zitat:
"top-down"-Design ist, wie zu vermuten, das genaue Gegenteil. Dabei wird zuerst die komplette API geplant, also alle Klassen durchkonzipiert und danach auf Basis dieser API die Implementierung der Komponenten begonnen. Es werden Vor- und Nachteile der beiden Vorgehensweisen angesprochen. Es wird klargestellt, dass eine stabile, solide API extrem wichtig ist, um produktiv entwickeln zu können. Danach wird auf unterschiedlichste Sachen eingegangen, die die Stabilität und Wiederverwend- und Wartbarkeit des Quellcodes verbessern können. Das Kapitel 8.1.1, Logik in Funktionen kapseln, war für mich eher uninteressant, da es in meinen Anwendungen sowieso keinen prozeduralen Code und keine Funktionen mehr gibt. Dieses Kapitel hat mir nichts Neues vermittelt. Im Weiteren wird darauf eingegangen, Klassen und Methoden so simpel wie möglich und nur so komplex wie nötig zu halten, um die Wiederverwendbarkeit einzelner Methoden und Klassen zu "gewährleisten". Kapitel 8.3, Namespaces, ist in meinen Augen etwas "wirr". Es geht darum in PHP ein Paketsystem oder Namespaces zu simulieren, um die Zugehörigkeit bestimmter Funktionen zueinander darzustellen. Ich glaube, dass dieser Abschnitt aussagen soll, dass man eine konsistente Namensgebung bei z.B. Klassen verwenden soll, um direkt sehen zu können, was eine Klasse macht. Das ist aber nur eine Vermutung von mir. So wirklich erklärt wird dies dort nicht. Sollten dort Vorkenntnisse irgendwelcher Art nötig sein, so wird man nicht darauf hingewiesen, weder direkt noch indirekt. Nun gut. George Schlossnagle sagt danach aus, dass er an Dateien, die er per include einbindet immer ein .inc anhängt. Ähm .. ja. Damit man den Quelltext sieht oder wie? Ich denke mal, dass da sicherlich irgendwas am Apache eingestellt wird, dass die Dateien nicht im Browser angezeigt werden, aber das wird im Buch nicht angegeben. Danach wird kurz darauf eingegangen, wie man am besten Dateien per include einbindet. Soll man viele Dateien einbinden oder nur wenige mit mehr Code? Interessiert mich insofern nicht, da ich mit __autoload() arbeite und nur das einbinde, was ich brauche. In Kapitel 8.3, Kopplung, wird auf die Abhängigkeit von Klassen, Methoden untereinander eingegangen. Eine zu starke Abhängigkeit sollte ja vermieden werden. Das ist ja einer der Kernpunkte der Definition von gutem Code. Nichtsdestotrotz kann es nach Schlossnagle auch stabile Punkte in einer Anwendung geben, die Sinn machen. So z.B. Klassen, die den Datenbankzugriff ermöglichen. Diese Basisklassen sollten im Voraus lang und intensiv geplant werden bevor zu viel Code der Applikation geschrieben wurde, damit Änderungen an der API der Basisklassen nicht zu einem riesigen Arbeitsaufwand führt, der durch die Aktualisierung aller Codepassagen hervorgerufen werden würde, die die alte, nicht mehr aktuelle API der Basisklasse nutzen. Das letzte Unterkapitel beschreibt was mit "defensivem Programmieren" gemeint ist. Es geht dabei um die Programmierung von Code ohne unbegründete Annahmen zu machen. Es geht z.B. um die Tatsache, dass PHP typenlos ist, eine Variable also jeden Datentyp annehmen kann. Es ist also auf jeden Fall anzuraten Type hints zu verwenden, da somit zumindeste sichergestellt werden kann, dass ein Objekt auch wirklich vom gewünschten Typ ist. Weiterhin ist es wichtig Standardkonventionen zu erstellen, die dann API-übergreifend verwendet werden. Der Autor bringt ein sehr gutes Beispiel: Zitat:
Zum Abschluss des Kapitels kommt wieder ein bisschen was in Richtung Sicherheit. Ist ja ganz nett, aber hätte man dann nicht lieber ein eigenes Kapitel dazu geschrieben, anstatt die Sachen an die Enden unterschiedlicher Kapitel zu klatschen? Fazit: Für mich war das hier ein Übergangskapitel. Habe Kenntnisse etwas aufgefrischt, aber wirklich neu war nichts bzw. wenig. Freue mich aber schon auf Kapitel 9, Externes Tuning der Performance. Geändert von Ben (27.07.2006 um 01:46 Uhr). Grund: Buchstabendreher eliminiert | |||
| |
| | Nach oben #10 | ||||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 9, Externes Tuning der Performance Zitat aus der Einleitung Zitat:
Zu Beginn ein Wort zu diesem Kapitel und meinen Vorkenntnissen auf diesem Bereich.
Nun aber zum Kapitel! Eine Aussage im Vorwort des Autors bringt es eigentlich auf den Punkt Zitat:
Allerdings fügt er umgehend an Zitat:
Als erstes werden Compilercaches behandelt. Habe ich noch nie etwas von gehört, aber es tönte ganz interessant. Letztlich ist das Prinzip, dass Quellcode-Datei, sei es Hauptskript oder "include"-Datei, nur dann kompiliert wird, wenn sie nicht im Cache vorhanden ist. Klingt meinem Eindruck nach simpel und genial. Der Autor gibt folgende Compilercaches an
Das nächste Unterkapitel gibt einen kurzen Einblick in Optimierungsverfahren. Nicht allzu interessant und auch ein recht kurzes Kapitel. Das Interesse mangelt etwas, da der Autor nur von kleinen Performanceverbesserungen spricht. Ich weiß, Kleinvieh macht auch Mist, aber der Rest von Kapitel 9 tönt da eindeutig besser. Interessant sind dann z.B. Reverse-Proxys, welche zwischen den Client und den eigentlichen Webserver mit PHP geschaltet werden. Das Problem bei großen Latenzzeiten ist es, dass die Daten, die vom Server zum Client geschickt werden müssen Zeit beanspruchen. Heißt, dass die PHP-Anwendung sozusagen im Leerlauf ist, während die Datenpakete gesendet und emfangen werden. Wird ein Reverse-Proxy zwischengeschaltet, der z.B. auf der selben Maschine wie der Webserver mit PHP liegt, so besteht zwischen diesen beiden Instanzen eine geringe Latenzzeit, was es dem "PHP-Server" erlaubt die Daten schnell zum Proxy-Server zu verschicken und dann "weiterzuarbeiten". Der Leerlauf wird umgangen! Mal grob beschrieben, wie ich das jetzt verstanden habe. Der Autor beschreibt an dieser Stelle die Änderungen in den beiden httpd.conf-Dateien der Apache-Webserver, so dass man eigentlich nur noch lostesten müsste (was ich aber gerade leider nicht machen kann. Fazit: Sehr interessante Sache, von der ich bisher noch nie etwas gehört habe. Mal sehen, was ich da noch so zu im Web finde! Danach kommt Schlossnagle zum "Tuning des Betriebssystems für gute Performance". Heißt so viel wie, dass man auch das Betriebssystem dazu veranlassen kann Daten zu buffern und somit Netzwerkverzögerungen zu minimieren. Klingt auch simpel und ist sicherlich eine Überlegung wert. Letztlich werden noch Proxy-Caches erwähnt. Eine Kombination aus Reverse-Proxys und Cachingverfahren. Das Prinzip sieht aus, wie beim Reverse-Proxy, nur dass hier zwischen dem Proxy und dem Apache mit PHP noch ein Cache liegt. Ist die Seite im Cache vorhanden leitet der Proxy die Anfrage als gar nicht an den Webserver weiter, sondern sendet die gecachte Seite an den Client! Kapitel 9.2, "Cachefreundliche PHP-Anwendungen", beschreibt, wie man PHP-Applikationen eigentlich cachebar macht. Ein nicht minder interessantes Thema, weil es hier doch einige Sachen gibt, die ich so nun nicht wusste oder kennengelernt hätte (vermute ich mal). Es geht hier primär um unterschiedliche "header", die man mit PHP senden kann. Es wird auch auf Unterschiede zwischen der HTTP 1.0- und der HTTP 1.1-Spezifikation eingangen. Gut und leicht verständlich beschrieben und somit für mich als Einstieg ausreichend. Schlossnagle gibt eine Menge Informationen, die mich zuerst etwas erschlagen haben. Ich lese für die Erstellung dieser Rezension jetzt ja nochmals quer und jetzt verstehe ich doch schon einiges mehr. Fazit: An den richtigen Stellen PHP-Code eingebracht, so dass man das Prinzip leicht versteht. Als Beispiel Zitat:
Zum Schluss wird noch kurz auf die Verwendung der zlib-Bibliothek eingegangen, Stichwort "Content-Komprimierung". Alles in allem ein sehr interessantes Kapitel, welches mir persönlich viele neue Informationen hat zukommen lassen und welches auch Interesse bzgl. dieses Themas "entfacht" hat. Fazit: Super! Auf geht es in Kapitel 10, Partielles Cachen von Daten. | ||||
| |
| | Nach oben #11 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 10, Partielles Cachen von Daten Zitat aus der Einleitung Zitat:
Nach Kapitel 9, den externen Verfahren um die Performance zu erhöhen, geht es nun sozusagen ans Eingemachte. Cachen von Daten ist überall da wichtig, wo es viele Datenbankabfragen pro Seitenaufruf gibt. So könnte man das grob umschreiben. Der Autor gibt zunächst einen Einblick in Listenform über Basiswissen bzgl. des Cachens von Daten, auf was man eben so achten muss, wie z.B. Aktualität des Cache oder Kohärenz. Danach kommen einige kleinere Subkapiteln, die Einblicke in unterschiedliche Sparten geben. Kapitel 10.4 geht z.B. kurz auf die Möglichkeiten des Output Bufferings ein. Richtig interessant wird es dann ab Kapitel 10.5, Speicher-Cache. Hier werden Möglichkeiten dargestellt, wie man Daten in Dateien cachen und somit wiederverwenden kann. Weiterhin wird hier stark auf Problematiken der einzelnen Verfahren eingegangen, so z.B. das Problem, das man bei normalen Textdateien beim gleichzeitigen Schreiben und Lesen aus einer Datei erhält. Wie sichert man ab, dass man keine korrumpierten Daten erhält? Es werden generelle Lösungswege zur Wartung der Cache-Größe, Gleichzeitigkeit und Kohärenz des Caches besprochen. Falsch! Es muss heißen: Sehr gut und ausführlich besprochen! Als Bespiel: Es wird z.B. ausführlich auf die Problematik der PHP-Funktion flock() eingangen, die man ja gerne mal verwenden möchte und es eventuell auch tut, ohne sich größere Gedanken darüber zu machen. Wirklich interessant und einleuchtend - auch für Laien wie mich - beschrieben! In Kapitel 10.6 geht Schlossnagle auf das Cachen aus DBM-Basis ein. Erstaunlich, dass ich davon noch nie etwas gehört habe. Hat mich so fasziniert, dass ich um 4:40 immer noch hier sitze, weil ich solange herumgespielt habe. In den folgenden Unterkapiteln wird wiederum auf Probleme und Ihre Lösungen bzw. Workarounds, Vor- und Nachteile eingangen. Ich bin wirklich mehr als zufrieden. Kapitel 10.8, Cachen mit Cookies, behandelt das, was der Titel besagt. Ich habe das noch nicht ausgetestet, allerdings ist allein schon diese Aussage von Schlossnagle Grund dafür mal auszutesten, wie das denn so funktioniert und wie man es theoretisch denn auch effektiv anwenden könnte. Zitat:
Eine Verbindung von Cookie-basiertem Cache und Cache via Textdatei oder DBM wäre sicherlich interessant. Schlossnagle bringt einem dieses Verfahren näher und es klingt wirklich gut. Er geht auch auf Gegenargumente wie z.B. die erhöhte Bandbreitennutzung ein. Wirklich interessant. (Ich wiederhole mich .. bin halt begeistert Die Unterkapitel 10.9.x bringen dann lediglich noch einen Einblick, wie man die Theorie auch praktisch in einer PHP-Anwendung unterbringen kann. Ist etwas ungewohnt sag ich mal, da dort eben komplett ohne Template-Engine gearbeitet wird, aber nun gut. Es wird noch kurz auf die Möglichkeiten von mod_rewrite eingegangen, welches man tricky für Cachingmechanismen ausnutzen kann und danach noch kurz auf die Notwendigkeit Abfragen zu cachen, z.B. wenn man via SOAP auf Daten zugreifen möchte. Die Prinzipien kann man erkennen - da gut beschrieben -, auch wenn Schlossnagle hier doch den ein oder anderen Tippfehler im Quelltext hat. Alles keine schlimmen Sachen, wenn man mitdenkt, aber ein wenig nervig ist das schon, weil es sich ja bislang - wenn auch in Grenzen - durch das ganze Buch zieht. Fazit zu Kapitel 10: Hat mir einen guten Einblick ins Thema Caching innerhalb von PHP-Anwendungen gegeben. Da werde ich mich auf jeden Fall noch etwas genauer mit befassen. Geändert von Ben (27.07.2006 um 06:21 Uhr). | ||
| |
| | Nach oben #12 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| Kapitel 11, Wiederverwendung von Berechnungen Zitat aus der Einleitung Zitat:
Ich halte mich mit der Beurteilung dieses Kapitels kurz, da ich an dieser Stelle gerne auf dieses Tutorial hier verweisen möchte. Dieses Tutorial enstand nur, weil Schlossnagle mich mit diesem Kapitel für diese Theorie faszinieren konnte. Das Beispiel habe ich übernommen, den Quellcode etwas umgebaut und vor allem auch berichtigt In diesem Kapitel geht er in einer Randbemerkung auch intensiv auf die Berechnung der Komplexität eines Algorithmus ein. Mir persönlich war das etwas zu viel, aber wen die Berechnung der "O"-Geschwindigkeit interessiert, der wird da schon etwas lernen können. Die Theorie der Wiederverwendung der Datenhäppchen ist sehr gut beschrieben. Mehr braucht man dazu nicht sagen. Problematisch wird es dann bei der praktischen Anwendung. Beim besten Willen, aber ich sehe die Erstellung eines Lesbarkeitsindex nicht als praktische nützliche Anwendung an. Die Frage nach dem Anwendungsbereich habe ich nicht klären können. Zu lesen hier: Letztlich geht wird noch kurz auf Wiederverwendungen von Berechnungen in PHP selbst eingegangen. Für mich eher uninteressant, aber nunja. Das Kapitel ist letztlich schwer zu bewerten. Auf der einen Seite eine, wie ich finde, geniale Theorie, aber auf der anderen Seite fehlt einfach die praktische Anwendung, die mir zeigt, wo ich das in meinen PHP-Applikationen dann auch einsetzen kann. Wirklich viele Fibonacci-Zahlen oder Lesbarkeitsindizes werde ich in meinem Leben nicht berechnen bzw. erstellen. Schulnote 2-, wegen der Theorie! Geändert von Ben (27.07.2006 um 21:32 Uhr). | |
| |