mmofacts.com

Code optimieren / Performancefragen

gepostet vor 19 Jahre, 2 Monate von Progralixx
Hallo Leute!

Ich habe einige Fragen zu Codeoptimierungen und hoffe, ihr könnt mir helfen.

Wie handhabt ihr es, wenn ihr euren Code so schnell wie möglich laufen lassen wollt? Ich meine damit nicht das Programmiertechnische, also dass man beispielsweise darauf achtet, dass man keinen redundanten Code benutzt und so weiter.

Ich habe schon oft von Codekomprimierung und GZip gehört. Was genau ist das und wie funktioniert es?

Ich danke schon mal für eure Antworten.
gepostet vor 19 Jahre, 2 Monate von KEEN
Wenn man GZip im Apache oder per PHP aktiviert, wird der HTML Code komprimiert an den Browser gessendet, was Traffic spart und Modem Nutzer freuen dürfte.

http://www.php.net/ob_gzhandler
gepostet vor 19 Jahre, 2 Monate von Crafty-Catcher
Aber es freut deinen Server nicht so wirklich weil es schon etwas an den Ressourcen knabbert.
gepostet vor 19 Jahre, 2 Monate von Roi
@Crafty-Cratcher:
Nach meiner Erfahrung kommt das dann aber auch immer auf den Server an.
Ist der Server von der Leistung am Limit, kann man es fast vergessen.
Hat er noch genug POWER ^^ Ist es eigentlich nett und erhöht nochmals die Geschwindigkeit.

Allerdings ist gzip nicht gerade eine Optimierung an sich, man spart ja nur Traffic. Was teilweise eben die Ladezeiten reduziert...
gepostet vor 19 Jahre, 2 Monate von TheUndeadable
Es gibt noch den Zend Optimizer und Turck-Cache. Der kompiliert den Code vor (soweit wie man bei PHP von kompilieren sprechen kann).
gepostet vor 19 Jahre, 2 Monate von neit
In dem Kontext ebenfalls zu erwähnen: eAccelerator (der Nachfolger von MMCache).

Sowas bringt übrigens einiges. Einen Server mit Lasten jenseits von Gut und Böse kann man damit oft wieder in den 0.x-Bereich bekommen ....
gepostet vor 19 Jahre, 2 Monate von None
Original von TheUndeadable
Es gibt noch den Zend Optimizer und Turck-Cache. Der kompiliert den Code vor (soweit wie man bei PHP von kompilieren sprechen kann).


Das Ding von Zend ist doch aber sündhaft teuer. Glaube es war im dreistelligen Bereich...
gepostet vor 19 Jahre, 2 Monate von tc_coder
Der Zend Optimizer ist kostenlos.
gepostet vor 19 Jahre, 2 Monate von None
Stimmt, sorry habs mim Zend Encoder verwechselt...
gepostet vor 19 Jahre, 2 Monate von Roi
Naja, das ist zwar alles nett und fein, was die Tools angeht.
Trotzdem sollte aber der Code an sich schon performanceorientiert sein...

Und das sind teils schon Kleinigkeit...

Speicher, Anzahl der DB-Zugriffe usw.
gepostet vor 19 Jahre, 2 Monate von Michaelius
Als Grundsatz sollte man sich immer eines merken, proggt so simpel wie möglich, veschachtelt nicht alles zu komplex in Funktionen und mathematischen Formeln etc, denn jede Funktion jeder Befehl wird auch nur wieder ausgewertet von PHP oder einer anderen Sprache. Diese Arbeit kann man vorweg im Code machen. Also proggt so simpel wie möglich, das sollte eine wichtige Sache sein, die nächste ist die, das man nicht nur eine riesengrosse Datei hat pro Funktion, sondern diese in viele kleine Dateien erstellt. Stellt euch vor man hat ein Spiel wo jeder User immer eine riesengrosse Datei abruft, herje. Ein Spiel darf man niemals mit einem Forum oder sonst was vergleichen. Ich denke das ein Spiel sicherlich eine sehr grosse Herausforderung ist, die Sachen wie die Konstruktion eines Forums oder Shops weit in den Hintergund stellen, das sind Anfängersachen nur dagegen.

Codeoptimierung ? Ich schrieb schon so oft alles um, nur um alles primitiver zu schreiben, so dumm sich das auch anhört. Je primitiver man proggt, sprich die Arbeit des Servers vorweg macht, desto schneller geht alles, eigentlich auch logisch. Das ist wie mit dem Schulenglisch, du kommst nach England und stellst fest, du kannst gar kein Englisch, nur die Wörter übersetzen ;-)

Tools wie PHP Accelerator, MMCache oder Zend Optimizer sind nice, ja, aber bringen wirklich nur was vom Traffic. Wenn man einen Server besitzt der eine lahme Netzanbindung hat merkt man sicherlich auch noch einen Geschwindigkeitsvorteil, ja, aber dann weiss man auch das man beim falschen Hoster/Houser sitzt. Den ob_gzhandler kann ich nur empfehlen, bei wem das schon Probleme macht, der hat wirklich einen zu kleinen Server, bzw RAM darin. RAM ist das A und O im Server, die CPU weniger. Die Festplatte wäre auch sehr wichtig. Unter 1 GB RAM vergesst alles, Besser 2GB sogar oder mehr.
gepostet vor 19 Jahre, 2 Monate von Crafty-Catcher
@Michaelius
Für wie viele Spieler sind deine Werte ausgelegt?
gepostet vor 19 Jahre, 2 Monate von RedMax
Original von Michaelius
Tools wie PHP Accelerator, MMCache oder Zend Optimizer sind nice, ja, aber bringen wirklich nur was vom Traffic.

Die Tools haben nicht das Geringste mit Traffic zu tun. Sie senken die CPU-Last, und das sehr erheblich. Es gibt NICHTS, was gegen den Einsatzt spricht, ansonsten verschenkt man halt Ressourcen.
gepostet vor 19 Jahre, 2 Monate von woodworker
jop eAccelerator ist wirklich nett

für alle die nicht wissen wie die arbeiten:
php ohne so ein tool:

php nimmt die datei und liest sie ein überprüft sie auf fehler
dann wird sie in php bytecode umgewandelt und dann wird der bytecode ausgeführt

diese tools nehmen nun beim übersetzen des scriptes in bytecode und speichern ihn zwichen, d.H. die scripte sind beim ersten aufrufen natürlich etwas langsamer weil ja der bytecode gesichert wird aber beim nächstne aufruf kann sich php das einlesen des quelltextes und das überprüfen auf fehler im quelltextsparen und nimmt dierkt die vorher übersetze kopie des scriptes

und dadurch kann es schon zu performancegewinnen von bis zu 400% geschwindigkeitverbesseurng führen im mittel bei schon vorher optimierten code so bei 130 - 180%
gepostet vor 19 Jahre, 2 Monate von Temruk
Jau oder man schnmeißt eben den Code nur als Bytecode auf den Server. Damit schlägt man quasi zwei Fliegen: zum einen kann man den Bytecode auch so mal ausliefern (LAN-Versionen etc) ohne dass man n Tag später nen Clone hat und zum anderen fällt das compilieren weg.

Zend hat da mit dem Encoder und Optimizer ne schöne Lösung. Ja, Zend kostet tatsächlich fürs "Small Business" (< 1/4 Mio $) 295 US$ aber wenn man mal von nem Speedup von sagen wir 20% ausgeht heißt das ja wenn man ne Milchmädchenrechnung macht 20% mehr User pro Server bei gleicher Speed. Schon bei einem Server mit 1000 Usern und 5 Eurocent pro Spieler und Monat an Einnahmen lohnt das.

Wir haben selbst diese Lösung noch nicht im Einsatz, sie aber mal mit der Testversion getestet und kamen in etwa auf die angegeben 20% Speedup.
gepostet vor 19 Jahre, 2 Monate von HSINC
man kann sich das von zend kaufen, man kann aber auch einfach die kostenlos verfügbaren alternativen benutzen, welche (zumindest im fall des eaccelerators) genau die selbe leistung bringen (laut werbung sind sie sogar schneller als der zend ^^)
gepostet vor 19 Jahre, 1 Monat von Temruk
Ja aber der eAcc setzt das ja erst zur Laufzeit in Byte um und cached es dann. Ich suche für mich noch ne Lösung, wo ich eben nur Bytecode ausliefern muss...
gepostet vor 19 Jahre, 1 Monat von woodworker
Original von Temruk
Ja aber der eAcc setzt das ja erst zur Laufzeit in Byte um und cached es dann. Ich suche für mich noch ne Lösung, wo ich eben nur Bytecode ausliefern muss...


eben nicht der eaccelerator kann auch dierekt sein bytecode laden
hat sogar ne eigene datei mitgeliefert mit dem man ganze verzeichniss verschlüsseln kann.
gepostet vor 19 Jahre, 1 Monat von The_Alien
Hm, also wie mache ich das nun wenn ich es am liebsten so hätte das ich auf meinem win PC den Code habe, diesen aber dann nur fertig compiled auf den linux server laden will?

Sprich wie und was muß ich dazu machen / was ist zu beachten?
Kann man das dann evtl auch über die FTP Funktion von Maguma automatesieren?
gepostet vor 19 Jahre, 1 Monat von woodworker
automatisieren gleube ich eher nicht

und wie du das machen kannst? schau do in die encoder.php datei die der eaccelerator mitliefert
gepostet vor 19 Jahre, 1 Monat von Progralixx
Danke für die vielen Antworten und Beiträge!
Ich werde mal einiges ausprobieren.
gepostet vor 19 Jahre, 1 Monat von knalli
Codeoptimierung - in PHP?
Das war ja die grundsätzliche Frage im Eingangspost..

Was ich in den letzten Monaten gelernt habe, war viel Performance. Ich werfe mal so Sachen ein wie..

- Benutze einfache Hochkommata statt der doppelten; durch das Beispiel
$var = 'test'; echo '$var'; echo "$var$"; 
kann man sich schnell denken, wieso..
- ebenso vermeide inlinesachen wie eben oben genanntes.. also
statt
echo "Hallo $name!"; 
schreiben wir besser
echo 'Hallo '.$name.'!';
- Benutze keine komplexen Algorithmen, wenn es vordefinierte (PHP-)Funktionen gibt
- Benutze die jeweils einfachste oder schnellste Methode, beispiel: 10x str_replace würde ich lieber durch ein strtr mit array ersetzen..
- Benutze keine Konstanten, also
$var = test; oder $var = $data[i];

- Schreibe im guten Layout, das deine spätere Bearbeitung strukturell fördern kann..
- Schreibe Funktionen um Probleme abstrakt zu lösen und nicht Problemorientiert; schreibe aber nicht für jeden Scheiß eine Funktion, vor allem nicht in sensiblen Scripten wie zB "login"..
- optimiere SQL-Query.. also vermeide SELECT *, verwende die korrekte, optimierte von Rechts nach Links aufschlüsselung (wenn man eine unique-id im where hat, sollte man die logischerweise am Ende schreiben) und verwende richtige joins, Nutze Relationstabellenstrukturen, IDs etc..

Man lernt das meistens aus Erfahrung.. ich hab manches davon früher auch gehandhabt.. wenn man jung und unschuldig ist .. aber man lernt den Unterschied kennen und achtet dann umso mehr drauf.
gepostet vor 19 Jahre, 1 Monat von Kallisti
Original von knalli
[...]
schreiben wir besser
echo 'Hallo '.$name.'!';



Besser benutzt du bei echo Komma statt Punkte, dann gibst du die Dinger einfach sequentiell aus und sie werden nicht vorher im Speicher concatenated...

Wenn schon, denn schon. ;-)

Ansonsten stimm ich dir zu.
gepostet vor 19 Jahre, 1 Monat von knalli
echo 'Hallo', ' ', 'Welt';


Ergibt also das grandiose Ergebnis? Okay, was gelernt
gepostet vor 19 Jahre, 1 Monat von Gaheris
80% der Zeit wird in 20% des Codes verbracht, verschwendet also nicht eure Zeit mit Microoptimierungen.
gepostet vor 19 Jahre, 1 Monat von elzair
- optimiere SQL-Query.. also vermeide SELECT *, verwende die korrekte, optimierte von Rechts nach Links aufschlüsselung (wenn man eine unique-id im where hat, sollte man die logischerweise am Ende schreiben)

stop.. das geht von rechts nach links?!
und ich idiot achte immer drauf, dass ich alles schön von links nach rechts schreibe?!
oh man das is ja grausam
gepostet vor 19 Jahre, 1 Monat von arnonuehm
wundert mich auch gerade, dass von rechts nach links besser sein soll, als von links nach rechts. wo ist da der genaue unterschied? handelt sich doch hier um die spaltennamen der tabelle oder hab ich was falsch verstanden?
gepostet vor 19 Jahre von knalli
Mysql schlüsselt/wertet von rechts nach links aus

80% der Zeit wird in 20% des Codes verbracht, verschwendet also nicht eure Zeit mit Microoptimierungen.

Also mal abgesehen davon, dass ich nicht so ganz die Grundlage für diese Behauptung hier sehen kann; gerade dann sollte man diese 20% mehr optimieren als die anderen 80%. Gerade deswegen.. Eigentorargument..
gepostet vor 19 Jahre von Derpendja
Mal ganz unabhängig von den Optimizern, gibbt es wirklich verlässliche Performancevergleiche zwischen PHP, C++ und Java unter Linux? Wobei man wirklich konkret sagen kann: der Quellcode mit dem gleichen Ergebnis läuft mit C++ 3x schneller als mit Java und 6x schneller als mit PHP.
Klammert mal 'das kommt darauf an, was man machen möchte' und 'kommt auf die Qualität der Source an' aus. Wirklich nur im Schnitt und als Background-Jobs.
Hat das jemand mal verglichen?
gepostet vor 18 Jahre, 11 Monate von Sarge
O.b.d.A. kannst du sagen
php (und jede andere interpretierte sprache) << java <= c++
gepostet vor 18 Jahre, 11 Monate von taker
Sarge warum nur ein Usa

machst doch by Travian die Server dinge da :wink:
gepostet vor 18 Jahre, 11 Monate von OranGe
java <= c++


also ohne das gleichheits-zeichen korrekt...
halt ich nämlich für ein gerücht das in irgendeiner form c++ gleichzusetzen
gepostet vor 18 Jahre, 11 Monate von Kampfhoernchen
In Verbindung mit ASP.NET glaube ich das schon.
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
Java in Verbindung mit ASP.Net???
Wenn dann JSP.

C#, J# oder VB oder viele andere ist ASP.Net.

Ich persönlich würde Java, C# und C++ gleichsetzen. Insbesondere ist unter C# alles möglich, was mit C++ möglich ist. C# besitzt aber noch einige Vorteile, wie unter anderem Reflection.
gepostet vor 18 Jahre, 11 Monate von Derpendja
Das ist genau der Punkt, der mich interessiert, der Vergleich C++ und Java. Es heisst ja immer, dass durch die VM Java deutlich langsamer ist. Aber ist der Unterschied so groß? Unter Windows würde ich sagen ja, aber der Webserver läuft unter Linux und da fehlen mir schlicht die Vergleichsmöglichkeiten.
Für auwendige Berechnungen ist PHP zu langsam (auch noch nah eAccelerator und Co.?), aber im Backendbereich liegen halt beide zur Diskussion vor mir.
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
Die Java VM liegt wie jede moderne VM bei puren Numbercruncher Aufgaben nur noch um den Faktor 2 bis 3 hinter C++ oder C hinterher. Bei klassenlastigen Aufgaben kommen die VMs teilweise an C++ heran oder überholen dies sogar (auch unter Win, es gibt keinen Unterschied zwischen der Win-VM und der Unix-VM).

Natürlich gibt es immer wieder Spezialfälle, wo C++ schneller ist, aber als Hinweis: Ein kompliziertes Kampfsystem unter C++ machte bei mir etwa 2 Millionen Einheiten die Sekunde. Die Portierung unter C# macht etwa 1,5 Mio pro Sekunde. Java verhält sich ähnlich.

Probier es einfach aus. Java und GUI ist etwas langsam, aber Java als Konsolenapplikationen oder Dienste sind ebenbürdig. Aber teste es am besten selbst, da gerade in diesem Bereich viele 'Weisheiten' existieren.

Auf diese Diskussion antworten