PHP / MySQL - Optimierungen
-
Original erstellt von junix:
Nichts für Ungut, aber ich glaube, alleine schon das System ist etwas am Sinn vorbei... Wenns sich nur um einen Template-Parser gehandelt hätte, ok. Aber was erhoffst du dir davon, von einem Script das interpretiert wird (zeitverlust) ein anderes Script zu interpretieren (noch mehr zeitverlust)?Unsere Kunden schreiben ein Template:
zB so:
auth = yes
db=tabelle
data.read = id
data.list = some_html_templateund schon bekommen sie eine fertige seite dass daten aus einer datenbank liest und die seite exakt so erstellt wie sie sein soll + etliche features
alle unsere webportale basieren darauf.
das ding ist mehr als eine eigene sprache
-
Original erstellt von Loggy:
[QB]So pauschale Tipps kann ich jetzt nicht geben, außer vielleicht nicht mysql_fetch_array zu benutzen, sondern gleich mysql_fetch_assoc.
[QB]Was kann man denn da groß ander Preformace ändern
-
Braucht weniger Speicher und deshalb weniger Speicherzugriffe. Ist normalerweise nicht viel, bei 130 Queries mit etlichen Daten kann es aber schon was bringen.
-
@Loggy:
sollten wir besser
mysql_fetch_row
oder
mysql_fetch_assoc
verwenden?Momentan verwenden wir beides ziemlich häufig!
was kostet ein array lookup? also arr[key]=val;
wie teuer sind globale variablen? (also wie teuer ist der zugriff darauf im vergleich zu lokalen in der funktion - und übergabe per param?)
werden arrays per value übergeben? sprich, wird das ganze array kopiert? (zB. wenn ich ein riesiges array mit return zurück gebe -> macht PHP da was intelligentes mit zeigern oder brutales kopieren?)
wie teuer sind split/join im gegensatz zu substr - wenn man zB hallo.du hat und man beim . trennen will in hallo und du - besser substr+strpos+strlen verwenden oder ein split?
wie teuer ist count() auf große arrays?
gibts was schnelleres als: for(i<count(i++)PS:
danke für eure Tipps:
das Ding läuft Momentan mit 1/3 der queries und in nur 2/3 der Zeit
ZendOptimizer habe ich meinem Chef vorgeschlagen... mal sehen was er macht.
-
btw, hier findet man auch ein paar gute Tipps: http://www.rent-a-database.de/mysql/mysql-127.html
-
Shade: Nochmal die Frage: Hast du dich um die am längsten dauernden Funktionen welche dir der Profiler ausspuckt nun gekümmert? ich denke du solltest dich erst mal dahinter machen statt um die Arrayverwaltung zum zu bauen.
Ein Arraylookup dürfte recht zügig gehen. Arrays sind eine der Stärken von PHP. Schau auch mal im Framework ob du nicht einige Funktionen welche du in PHP gecodet hast nicht fertig im framework findest. (Hab mir vor Urzeiten mal meine eigene array_unique() und so weiter gebastelt weil ich sie nicht kannte... was natürlich erheblich langsamer war.)
Zeig mal die Funktion die am meisten Zeit frisst.
-junix
-
sollten wir besser
mysql_fetch_row
oder
mysql_fetch_assoc
verwenden?mysql_fetch_row ist natürlich schneller, aber aufgrund der Wartbarkeit des Codes, würde ich mysql_fetch_assoc vorziehen (außer es passt Semantisch mysql_fetch_row zu benutzen). Der Unterschied wird in diesem Fall wohl auch nicht so groß sein.
Bei Übergabe "by Value" muss natürlich brutal kopiert werden, da ja eine Kopie erforderlich ist (aber es gibt ja in PHP auch "Call by Reference"). Bei der Rückgabe könnte das anders sein, da es in PHP ja keine Zeiger gibt. Sowas wirst du wohl mit einem Profiler ausprobieren müssen.
Kennt denn irgendwer einen PHP Profiler (Freeware oder Opensource)?
-
Original erstellt von Loggy:
Kennt denn irgendwer einen PHP Profiler (Freeware oder Opensource)?Ich kenn nur den der beim Maguma-Studio integriert ist....
-junix
-
Original erstellt von Loggy:
Bei Übergabe "by Value" muss natürlich brutal kopiert werden, da ja eine Kopie erforderlich ist (aber es gibt ja in PHP auch "Call by Reference").sehr gut, das kann performance bringen.
aber was passiert hier:
function foo()
{
$array=array( ganz viele members, so ca. ~1KB );
return &array;
}ist das wie in C wo dann die referenz tot ist, oder ist PHP da intelligenter?
@junix:
ja, ich habe ein paar teure funktionen versucht zu kürzen - aber das problem ist, das geht nicht wirklich viel wenn das design nicht geändert wird.aber es hat durchaus etwas gebracht.
ich habe vor die script laufzeit auf die hälfte zu drücken - 1/3 habe ich ja schon gekürzt
-
Original erstellt von Shade Of Mine:
**aber was passiert hier:function foo()
{
$array=array( ganz viele members, so ca. ~1KB );
return &array;
}**Wie sich das verhält weiss ich nicht genau, was ich dir aber sicher sagen kann ist, dass du $array oben als call by reference übergeben könntest... (musst die Variable ja eh irgendwo deklarieren. Nur kannst du sie hald eben nicht gleich mit dem Returnwert initialisieren.
-junix