[PHP5] Wer hat shon Erfahrungen gesammelt?
-
Ich möchte jetzt auch auf PHP5 umsteigen. Die Vorteile sind einfach zu genial.
Bevor ich aber diesen Sprung wage, möchte andere Meinungen zu diesem Thema noch gerne hören.
Ab PHP5 werden Objekte wie Referenzen behandelt. Zusätzlich gibt es Zugriffsschutz und Interfaces. Hört sich nahezu traumhaft an.
Aber wie hoch sind die Kosten? Ist PHP5 auch noch schnell, wenn ich alle Sprachfeatures ausreize? Also Exceptions werfe, mit Interfaces und abstrakten Klassen arbeite etc..
Danke für jeden noch so kleinen Hinweis!
-
OOP ist im Gegensatz zu PHP4 schneller geworden.
Allerdings ist richtig gutes OO Design in PHP immernoch zu teuer. Der richtige mix macht es aus
-
Danke!
Weißt Du vielleicht wie Accelerator/Caches ala eAccelerator, Turck und Zend den Code optimieren? Also wird einfach Zeile für Zeile in Bytecode übersetzt, oder wird auch versucht den Code zu optimieren?
Könnte man das nicht irgendwie Benchmarken?
-
Webentwickler schrieb:
Weißt Du vielleicht wie Accelerator/Caches ala eAccelerator, Turck und Zend den Code optimieren?
Der freie ZendAccelerator (keine Ahnung wie er genau heisst) cacht nur.
eAccelerator kenne ich nicht, aber
Turck mmcache und APC cachen und optimieren.Wobei turck ja scheinbar nichtmehr weiterentwickelt wird
In APC bin ich mal tief eingetaucht, der macht hauptsächlich 'primitive' optimierungen wie
5*2 in 10 umwandeln oder
i wenn möglichproblem ist, dass der PHP Bytecode nicht sonderlich ideal ist um optimiert zu werden. IMHO wäre es sinnvoller einen Optimierer über den echten PHP Code laufen zu lassen und dort zu optimieren, denn in dem Bytecode kann man eigentlich nur mikro optimierungen machen (ohne riesen aufwand).
Zend traue ich aber in der komerziellen Version sehr viel zu, das nötige Nowhow haben sie ja. Nur leider hatte noch kein Kunde den ZendOptimizer oder wollte ihn haben... Und zum selber Geld ausgeben ist es mir zu schade
Diese mikrooptimierungen bringen aber dennoch etwas. Ich habe mal den freien ZendAccelerator gegen turck mmcache antreten lassen und turck war klar schneller - das kann nicht an dem caching gelegen haben, denn soviel besser cachen kann man nicht. Muss also an den Optimierungen gelegen haben die turck mmcache macht.
Nur ob das heute und vorallem mit PHP5 immer noch gut funktioniert ist fraglich...
Also wird einfach Zeile für Zeile in Bytecode übersetzt, oder wird auch versucht den Code zu optimieren?
Simples 1:1 übersetzen macht PHP schon selber.
Ein PHP Cache schnappt sich dann lediglich diesen Bytecode und cacht ihn. Beim nächsten mal wenn PHP die Datei parsen will liefert der Cache einfach die kompilierte Version.Könnte man das nicht irgendwie Benchmarken?
APD oder XDEBUG sind recht gute Profiler, wobei ich APD zwar besser finde aber xdebug weniger overhead mitzubringen scheint.
Benchmarken mit microtime() kannst du vergessen wenn es genau sein soll
-
Shade Of Mine schrieb:
eAccelerator kenne ich nicht, aber
Shade Of Mine schrieb:
turck ja scheinbar nichtmehr weiterentwickelt wird
http://eaccelerator.sf.net ist der Nachfolger von Turck.
Aber theoretisch müsste es doch eigentlich möglich sein, bevor man den Bytecode generiert Wrapperklassen und -funktionen auflösen zu können.
Könnte man den Overhead von Basisklassen und Abstraktionsmechanismen auflösen, dann müsste doch oo vergleichbar schnell mit rein prozeduralem Code sein. Habe ich einen denkfehler?
-
Webentwickler schrieb:
http://eaccelerator.sf.net ist der Nachfolger von Turck.
Geil, den werde ich mir mal ansehen. Super!
Aber theoretisch müsste es doch eigentlich möglich sein, bevor man den Bytecode generiert Wrapperklassen und -funktionen auflösen zu können.
Theoretisch, aber praktisch nicht vernünftig - weil PHP hier keinen Hook bietet wo ein Optimierer sich einklinken kann.
Du hast im wesentlichen 2 essentielle Funktionen die du ueberschreiben kannst:
zend_compile() und zend_execute()zend_compile() kompiliert den PHP Code in Bytecode. du kannst es natürlich auch selber machen und nie zend_compile() aufrufen - dann hättest du die möglichkeit für die optimierungen, aber dann musst du auch selber lexen, parsen und sonst alles machen. Das ist doof, weil du da ja schon fast selber nen PHP interpreter schreiben kannst
Im Prinzip ersetzt man zend_compile() also nur durch eine Funktion die die Ausgabe von zend_compile() cacht und, fall eine gecachte version vorhanden ist, zend_compile() nicht aufruft sondern den bytecode direkt returned.
du hast also leider keinen ansatz punkt um so einen optimierer einzubauen.
Könnte man den Overhead von Basisklassen und Abstraktionsmechanismen auflösen, dann müsste doch oo vergleichbar schnell mit rein prozeduralem Code sein. Habe ich einen denkfehler?
Ne, ist vollkommen korrekt. Aber diese Optimierungen sind im Bytecode verdammt schwer zu machen, weil ja eben die ganze Struktur nicht mehr existiert und vor Kompilieren und nach Parsen kann man sich nicht rein hängen, da PHP das in einem schritt macht. Man müsste also selber den PHP Code parsen... Möglich ist es, da man zend_compile() komplett ersetzen kann, aber der aufwand ist halt sehr hoch...