fyi: 63+ Tipps für Performance in PHP-Scripts

So, auf de Hinweis von ComFreek (danke!) habe ich ein Projekt bei github gestartet: https://github.com/saftmeister/php-performance-kompendium

Das Projekt basiert auf der Tatsache, das github Markdown (http://de.wikipedia.org/wiki/Markdown) unterstützt.

Hier eine Anleitung, wie man Markdown in Notepad++ integriert: http://www.stimmelopolis.com/blog/2010/02/16/markdown-in-notepad-2/

Ich freue mich und danke hiermit schon mal für eure Unterstützung.

PS: Da es sich um ein öffentliches Projekt handelt, ist die Lizenz auf CC-SA-BY festgelegt. Ich hoffe, damit hat keiner ein Problem.
 
Zuletzt bearbeitet:
Die ganzen Tipps sind meiner Meinung nach zu 90% unbrauchbar. Teilweise verschlechtern sie sogar den Code, da sie ihn schlechter lesbar machen oder sogar gegen die (leider nicht allgemein gültigen) Regeln guten Softwaredesigns verstoßen. Der Artikel auf phplens, auf den des öfteren verwiesen wird, ist außerdem schon einige Jahre alt und noch für PHP 4 geschrieben worden. Vieles davon ist also schon nicht mehr gültig. Abgesehen davon sind einige Punkte sogar falsch wiedergegeben worden:
Useless Optimizations:

Here are some common PHP legends:
echo is faster than print
[...]

Vieles aus dem Artikel würde ich vernachlässigen und einiges sogar genau umgekehrt machen. Wenn ich sowas lese:
Do not implement every data structure as a class, arrays are useful, too
oder sowas
Avoid magic like __get, __set, __autoload
geht mir echt der Hut hoch.

Oder sowas:
Just declaring a global variable without using it in a function also slows things down
Hallo?! Globale Variablen? Nutzt das noch einer? Diesen Quatsch braucht man nicht und sollte ihn deshalb vermeiden.

Ich würde mal sagen, dass die gängigen Frameworks wie Symfony oder Zend sich an so ziemlich nichts aus dem Artikel halten. Trotzdem werden beide Frameworks für Hochlastwebseiten eingesetzt.

Wenn man sauber programmiert und ein vernünftiges Caching benutzt (wenn es denn nötig ist) ist man wesentlich besser bedient. Desweiteren sollte man immer erst optimieren, wenn Bedarf dazu besteht.
 
Hallo?! Globale Variablen? Nutzt das noch einer? Diesen Quatsch braucht man nicht und sollte ihn deshalb vermeiden.

Na selbstverständlich, wenn du irgendwelche Konfigurationsarrays bentzt, die in Funktionen verwendet werden sollen! Den Quatsch benutzen noch Leute (ich ;)) für kleine Scripte, bei denen ich kein Framework oä einsetzen will.

Wenn man sauber programmiert und ein vernünftiges Caching benutzt (wenn es denn nötig ist) ist man wesentlich besser bedient. Desweiteren sollte man immer erst optimieren, wenn Bedarf dazu besteht.

Ich finde dennoch, dass man mit dieser PHP-"Optimierung" nichts gewinnt, da diese Ausführungszeit von anderen Sachen kommt. Wenn nun - sagen wir - PHP 5% der Laufzeit eines Scripts ausmacht (5% ist schon zu hoch gegriffen) und man gewinnt durch diese ganzen Optimierungen 30%, so hat man einen Reingewinn von 1,5% der Laufzeit. Und wie gesagt, mit den 5% ist es schon sehr großzügig kalkuliert. Das lohnt sich überhaupt nicht, dann bau ich mir lieber irgendeine MySQL-Klasse, die alle Abfragen im Script sammelt, diese in so wenig Queries wie möglich abhandelt und dann erst das Script durchläuft. Sowas würde viel mehr Sinn machen.

Grüße
 
@xCondoRx:
Es war ja auch nie die Rede davon, schönen Code zu machen,
es geht nur um die Geschwindigkeit :rolleyes:

Und zu den globalen Variablen:
Ja, die gibts tatsächlich auch noch in 2012. Und 2013.
Und ich rede nicht (nur) von irgendwelchen Halb-Assembler-Exoten,
sondern auch zB. von bestimmten Anwendungsgebieten des so sehr objektorientierten Java.
(na gut, nicht global im PHP-Sinn, aber: Nur Klassenvariablen erlaubt.
Keine eigenen Variablen pro Methode und so.)
(Zugeständnis 2: Exotisch bleibts trotzdem.)
 
So, auf de Hinweis von ComFreek (danke!) habe ich ein Projekt bei github gestartet: https://github.com/saftmeister/php-performance-kompendium

Das Projekt basiert auf der Tatsache, das github Markdown (http://de.wikipedia.org/wiki/Markdown) unterstützt.

Hier eine Anleitung, wie man Markdown in Notepad++ integriert: http://www.stimmelopolis.com/blog/2010/02/16/markdown-in-notepad-2/

Ich freue mich und danke hiermit schon mal für eure Unterstützung.

PS: Da es sich um ein öffentliches Projekt handelt, ist die Lizenz auf CC-SA-BY festgelegt. Ich hoffe, damit hat keiner ein Problem.

Für Windows würde ich unbedingt MarkdownPad empfehlen. Nutze ich seit einiger Zeit und tut wofür es programmiert wurde ;)

CC-SA-BY: Ich würde davon aber den Quelltext ausschließen. Den Quelltext würde ich in die Public Domain stellen.


PS: Projekt gefollowed auf GitHub, bei Gelegenheit erstell ich mir ein Fork und mach ein paar Pull Requests.
 
@xCondoRx
oder sowas
Avoid magic like __get, __set, __autoload
geht mir echt der Hut hoch.

Naja vielleicht sollte man es mal von folgendem Blickwinkel betrachen, wie du schon schreibst sind das alles Vorschläge für PHP 4, da wir soweit ich das mitbekommen habe mit PHP 5 arbeiten kann man schön die Unterschiede herausarbeiten und dafür sorgen das diese pseudo Optimierungsvorschlage verschwinden.

Generell würde ich die Vorschläge nur als Basis betrachten, es gibt bestimmt auch die Möglichkeit eigen Vorschläge einzubringen und zu testen.

@ComFreek
Ich hatte mal eins mit 5 Sekunden, welches HTML von einer anderen Seite geparst (diese hatte keine API) und in die Datenbank eingefügt hat.
Da hat z.B. das [phpf]unset[/phpf] eines sehr großen Arrays eine große Zeitverminderung erbracht!

Wie du sicherlich schon gesehen hast besagt Vorschlag fünf genau den von dir beschriebenen Effekt, wäre es vielleicht möglich das du eine veränderte bzw. abgeänderte Version zu Projekt beisteuerst? Ich weiß das hört sich sehr dreist und fordernd an aber warum alles doppelt und dreifach "Entwickeln" bzw. überlegen wenn es schon so etwas ähnliches gibt?

P.S. Föhliche Weinachten euch allen

Mit freundlichen Grüßen
Leon Bergmann
 
holzmensch hat gesagt.:
Hast du das Script noch, kannst du den mal profilen? Würde mich persönlich interessieren, was da denn tatsächlich 5s gedauert hat.
Ein ganz großer Teil wurde vom Herunterladen der Daten (externer Server, sehr langsam!) und als Parsen des HTMLs beansprucht!
Das Senden an die Datenbank war dahingegen gar nichts.

SkyDevMent hat gesagt.:
Wie du sicherlich schon gesehen hast besagt Vorschlag fünf genau den von dir beschriebenen Effekt, wäre es vielleicht möglich das du eine veränderte bzw. abgeänderte Version zu Projekt beisteuerst? Ich weiß das hört sich sehr dreist und fordernd an aber warum alles doppelt und dreifach "Entwickeln" bzw. überlegen wenn es schon so etwas ähnliches gibt?
Zu welchem Projekt denn beisteuern? Meinst du die Quelle, von der ich die Daten erhalte und parse?
Dies ging leider aus diversen Gründen nicht. So musste ich leider alles auf eine sehr unprofessionelle Art lösen ;)


PS: Ja, euch auch fröhliche Weihnachten heut' ;)
 
Achso das Git-Archiv dort.

Meinst du allerdings jetzt einen Auszug aus meinem Code oder des Profiling?! Ich meine, ich habe ja u.a. nur [phpf]unset[/phpf] verwendet, die Verwendungsweise sollte doch klar sein.

Die Verwendung von [phpf]unset[/phpf] ist mir soweit schon klar allerdings fällt mir momentan kein Besispielcode ein wie man den Performance Zuwachs belegen könnte. Deshalb dachte ich das du vllt. eine abgeänderte Version beisteuern köntest.
 
Zurück