Die Spiele-Entwicklung mit JavaScript und dem Canvas war eine wirklich gute Zeit... man fühlte sich wie ein Künstler.. man war kreativ und hat kein Geld verdient damit.
Momentan steht bei mir an ein Plugin für Shopware zu entwickeln.
Das erste Problem dabei ist nicht mal, wie das funktioniert, weil das ist im Internet mehrfach gut erklärt, sondern wie man seine Entwicklungsumgebung aufsetzt.
Shopware ist schnell installiert. Aber man will für ein Plugin ja nicht immer das gesamte Shopware mit im Projekt haben. Also wird nur das Verzeichnis aus custom/plugins/ als Projekt-Verzeichnis gewählt.
Bei Eclipse kann man Projektverzeichnisse außerhalb des Workspaces anlegen.
Nun hat man das Problem, dass einem die ganzen Klassen von Shopware fehlen und man so viele Warnings und keine Autovervollständigung hätte.
Über Properties > PHP > Source Paths > Build Path kann man externe Source-Verzeichnisse verlinken.
ich habe das engine-Verzeichnis von Shopware gewählt und noch zusätzlich dessen vendor-Verzeichnis.
Die PHPUnit Tests werfen dann zwar noch Fehler. Aber die Plugin-Klasse von Shopware wird schon einmal gefunden und damit ist der erste Schritt schon getan.
Damit kann meine Arbeit an meinem ersten Shopware-Plugin jetzt anfangen.
Gerade in der letzten Zeit mit PHP7 hat sich wieder einiges in der PHP-Welt getan und einiges hat damit einen großen Schritt nach vorne gemacht. Betroffen davon sind z.B. die Bereiche der PHP-Arrays (was im GRunde ja eigentlich HashMaps sind) und der Objekte. Es gibt ein paar wirklich gute und Ausführliche Artikel zu den Themen, die sich mit den Grundlagen beschäftigen. Dies sind keine Grundlagen für Anfänger sondern gehen wirklich in die Tiefe und man sollte beim Lesen auch keine Angst vor etwas C-Code haben.
Besonders der Bereich mit den Packed Hashmaps ist sehr interessant, weil dort erklärt wird, wie man ein fast echtes Array in PHP bekommt, das ohne Translation-Table und die Erzeugung von Hashes auskommt sondern wird einfach 0-n als Index verwendet und dies direkt auf ein entsprechendes C-Array umsetzt. Das spart etwas Speicher, aber auch sehr viel CPU-Zeit und bringt mehr Performance. Bevor man also als Index irgendwelche Ids oder so verwendet sollte man noch mal überlegen, ob man das wirklich benötigt oder ein einfaches und schnelles Array doch von Vorteil wäre.
Was haben PHP und Java gemeinsam? Deren unterste Schicht der VM/Engine ist in C geschrieben. Aber was interessiert die VM oder Engine? Irgendwann kommt man an den Punkt wo man Performance-Probleme hat und dann muss man verstehen warum etwas Langsam ist. Die Frage dann sollte auch nicht lauten: "Wie bekomme ich die Anwendung schnell?" Sondern eher: "Wie habe ich sie langsam bekommen?" Denn erstmal muss man die Gründe kennen, um dann Lösungen zu finden. Lösungen sind nicht immer so einfach zu finden, weil manche Dinge sind einfach langsam und manchmal muss man sein ganzes Vorgehen ändern. Assoc-Arrays sind toll, aber es sind eigentlich keine Array sondern Hash-Maps und die sind nun mal nicht ganz so performant.
Aber warum das so ist und warum die in PHP7 viel besser implementiert sind, erschließt sich aber nicht einfach so, wenn man nicht weiß, wie die Engine arbeitet. Auch einen Garbage-Collector gibt es in PHP, der genau wie in Java zu 98% super läuft. Aber wenn er Probleme macht, muss man wissen wie er arbeitet um ansatzweise überhaupt das Problem zu verstehen. Zirkel bei Referenzen sind ein großes Problem, wenn er die Objekte zum freigeben markieren will. Reference-Count gibt es auch dort.
Jedem der sich auch für die Interna der Zend Engine 5.x und 7 interessiert und sich etwas über Performance informieren möchte kann ich diese Artikel empfehlen: