Script-Performance-Test? Optimierungsmöglichkeiten?
Hallo,
Ich habe für eigene Projekte und Kunden eine Art Framework oder mini-CMS geschrieben, welches mir aus ein paar Datenbanktabellen mit Inhalt ne Seite "errechnet" und ausgibt. Das funktioniert wunderbar und eine Seite mit 150 einzelseiten läuft auch bis jetzt ganz gut... Ich frage mich nur, ob das ganze auch noch so "gut" läuft, wenn dann zum Beispiel mal 100 Benutzer (man ist ja bescheiden ;)) gleichzeitig darauf zugreifen...
Ich freu mich auf ein paar aufschlussreiche antworten...! :) Grüße, pixelbird |
AW: Script-Performance-Test? Optimierungsmöglichkeiten?
Das ist mal ein super Thema :daumen:
Allgemein: Wir leben in einer Zeit in der Entwicklungsgeschwindigkeit (Komfort der Website-Entwicklung) wichtiger geworden ist als Performance. Achtung, hier geht es nicht nur um den Rechenaufwand (Rechenzeit) sondern auch um den Speicherverbrauch! Das ist wirklich nur wichtig wenn mit >50000 Seitenaufrufen pro Tag zu rechnen ist. Deshalb verfolgt jeder gute Programmierer folgenden Grundsatz: Wir schreiben schnellen Quellcode, aber nehmen nur bedingt Umwege zu gunsten besserer Performance in Kauf. (Das trifft natürlich nicht auf jede Situation zu.) === Zu deinem Framework/miniCMS (JA WAS DENN NUN?): Erkläre mal bitte etwas genauer was das System macht. === Zu den Fragen: Sicher gibt es so ein Tool, aber ich kenne keines, weil ich keines verwende. -------------------------- Die Seitenausführungszeit kannst du berechnen. Allerdings darfst du nicht vergessen das PHP selbst auch eine gewisse Startzeit besitzt (wenn als CGI) und das Script erst "parsen" (= PHP Datei verarbeiten) muss bevor die Seitenausführung beginnt. Ebenso gibt es Bibliotheken wie die von Regex die auch eine Startzeit haben. (Weshalb man Regex nicht für jede Kleinigkeit verwenden sollte.) Hier etwas Quellcode frich aus unserem Framework: PHP-Code:
Ebenfalls lässt sich jederzeit der aktuell verwendete Arbeitsspeicher anzeigen. => http://de2.php.net/memory_get_usage Tipp: Bei einem Script das ziemlich lange läuft lohnt es sich Variablen die viel Speicher verbrauchen (UND NUR DIE!) und sich im globelen Namensraum befinden sobald sie nicht mehr verwendet werden mit unset() zu löschen: => http://de2.php.net/unset -------------------------- Thema "Seiten cachen". Da ist ersteinmal zu unterscheiden zwischen: Html-Quellcode cachen und PHP Seite cachen. Ausnahme: Sowas wie die Technik hinter Smarty (Smarty erzeugt aus Templates eine PHP Datei, damit das Template nicht bei jedem aufruf übersetzt werden muss und stattdessen die erzeugte PHP Datei ausgeführt werden kann, was natürlich viel schneller ist.) -------------------------- PHP Seiten zu cachen ist DER PERFORMANCE GEWINN SCHLECHTHIN! Lasst mich das kurz erklären: Bei Sprachen wie C wird aus dem Quellcode eine Binarcode Datei erzeugt die der Prozessor ultraschnell ausführen kann. Bei Sprachen wie Java, .NET oder Python wird zwar keine Binarcode Datei erzeugt, aber immerhin wird, der "Token" der beim "Parsevorgang" (Parsen = Quellcode verarbeiten und in einen Stapel von Befehlen ("Token") umwandeln, welcher nur noch abgearbeitet werden muss) in eine Datei geschrieben und von nunan immer direkt ausgeführt. Nicht so bei PHP. Bei PHP wird immer der Quellcode neu eingelesen, verarbeitet ("geparst") und dann der erzeugte "Token" abgearbeitet. Was für eine Verschwendung von Resourcen! Und warum das? Damit Firma Zend (http://zend.com) aka "The php company" Geld mit ihren PHP Beschleunigern machen können. Selbst verständlich hat sich das die PHP Community nicht gefallen lassen und so entstanden ein paar GPL lizenzierte Produkte. Unter anderem: http://pecl.php.net/package/APC Das bringt richtig viel Performance! -------------------------- So und nun zum Html-Quellcode cachen: Vor ein paar Jahren hat man das gemacht. Dann hat man gemerkt das dynamische Websites den Rechenaufwand wert sind auf statische Seiten zu verzichten. Html-Quellcode cachen ist UNSINN! -------------------------- Zum Browser: Viel JavaScript kann Seiten langsammer machen. Tabellendesign macht Websites langsamer, weil der gesammte Quellcode erst geladen werden muss bevor die Tabelle korrekt dargestellt werden kann. Was macht websites im Browser schneller? Schlanker Quellcode! (Den erhält man durch eine fette CSS Datei die auf jeder Seite einfach eingebunden wird => Einmal geladen immer geladen.) Websiten komprimieren: => http://us3.php.net/ob_gzhandler -------------------------- Zu MySQL: 1. So wenig Querys wie möglich. 2. Möglichst alles auf der Seite des Datenbank Servers berechnen. Im uralten OFP-Center Version 1 stand mal folgender Quellcode drin: (Das ist nicht der Originalquellcode!) $result = mysql_query("select * from news"); $news_count = mysql_num_rows($result); echo "<h3>Statistiken</h3> Anzahl an News: ".$news_count; => Um die Anzahl an News für die Statistiken im rechten Menü (welches auf jeder Seite sichtbar ist) zu berechnen wurde DIE GESAMTE NEWSTABELLE, mit allen Zeilen und allen Spalten heruntergeladen! o_O Das ist natürlich BULLSHIT³. 3. Gutes Tabellendesign So und jetzt noch etwas wo ich mir nicht so schlüssig bin: Das speichern von Einstellungen. Für mich gehören Einstellungen in PHP Dateien. Aber mit Blick auf diese Forensoftware hier: Es scheint auch zu gehen wenn man sie in Tabellen ablegt. -------------------------- Schleifen und Konstrukte Das hier ist extrem langsam: for($i=0; $i<count($array); $i++){ //... } Das hier ist das Gegenteil: $y = 0; $max = count($array); while($y<$max){ $y++; } Einfach etwas genauer bei den schleifen hinschauen und überlegen was da wohl im Hintergrund vor sich geht. Oder einfach mal einen kleinen Benchmark erstellen mit 1000 Schleifendurchläufen. SIEHE: Wir schreiben schnellen Quellcode, aber nehmen nur bedingt Umwege zu gunsten besserer Performance in Kauf. === Am meisten kann man jedoch sparen in dem man gute Software-Lösungen entwirft. |
AW: Script-Performance-Test? Optimierungsmöglichkeiten?
Danke für die außerordentlich ausführlich antwort. :)
Zitat:
Gib mir 2 Kurzdefinitionen, wie du sie verstehst, dann sag ich dir obs reinpasst... ----------- Script-Ausführungszeit: Schön, so sieht meine Funktion auch aus. ----------- Zitat:
Zitat:
1. tpl/html-datei einlesen (load) 2. bestimmte tags ersetzen (str_replace) 3. ausgeben (echo) Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
vorteil datei / datenbank? Zitat:
1000mal das array nachzuzählen ist natürlich langsamer als nur einmal davor. Zitat:
Noch ein Link von mir, den ich gefunden habe: auf der seite werden verschiedene konstrukte/schleifen getestet... http://www.blueshoes.org/en/developer/php_bench/ gute nacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:28 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias