Gibt es einen Grund, PHP zu minimieren?


101

Ich weiß, dass Sie PHP minimieren können , aber ich frage mich, ob es irgendeinen Grund gibt. PHP ist eine interpretierte Sprache und läuft daher etwas langsamer als eine kompilierte Sprache. Meine Frage ist: Würden Kunden eine sichtbare Geschwindigkeitsverbesserung beim Laden von Seiten und dergleichen sehen, wenn ich mein PHP minimieren würde?

Gibt es auch eine Möglichkeit, PHP oder ähnliches zu kompilieren?


Ein offensichtlicher Punkt ist die Verschleierung, um Ihren Code weniger portabel zu machen, was ein gültiges Ziel sein kann.
John

Antworten:


161

PHP wird in Bytecode kompiliert, der dann auf etwas interpretiert wird, das einer VM ähnelt. Viele andere Skriptsprachen folgen demselben allgemeinen Prozess, einschließlich Perl und Ruby. Es ist nicht wirklich eine traditionell interpretierte Sprache wie zum Beispiel BASIC.

Es würde keine effektive Geschwindigkeitssteigerung geben, wenn Sie versuchen würden, die Quelle zu "minimieren". Sie würden eine erhebliche Steigerung erzielen, wenn Sie einen Bytecode-Cache wie APC verwenden .

Facebook hat einen Compiler namens HipHop eingeführt , der PHP-Quellen in C ++ - Code umwandelt. Rasmus Lerdorf, einer der großen PHP-Leute, hat Anfang dieses Jahres eine Präsentation für Digg gehalten , die die Leistungsverbesserungen von HipHop behandelt. Kurz gesagt, es ist nicht viel schneller als die Optimierung von Code und die Verwendung eines Bytecode-Cache. HipHop ist für die Mehrheit der Benutzer ein Overkill.

Facebook hat kürzlich auch HHVM vorgestellt , eine neue virtuelle Maschine, die auf der Arbeit von HipHop basiert. Es ist noch ziemlich neu und es ist nicht klar, ob es der Öffentlichkeit einen großen Leistungsschub bringen wird.

Bitte lesen Sie diese Präsentation vollständig durch , um sicherzustellen, dass sie ausdrücklich angegeben ist . Es werden zahlreiche Möglichkeiten aufgezeigt , wie Code mithilfe von Tools wie xdebug und xhprof , ebenfalls von Facebook, bewertet und profiliert und Engpässe identifiziert werden können .


2
Beachten Sie, dass das gesamte Bytecode / VM-Ding Ihnen nichts ohne einen externen (!) Bytecode-Cache kauft. Ich verstehe nicht, warum PHP den Bytecode standardmäßig immer wieder

Ich stelle mir vor, dass es sich um ein Shared-Hosting-Problem handelt. APC ist ab dem alten 6.0-basierten Trunk standardmäßig in PHP enthalten. Ich bin mir nicht sicher, ob wir es standardmäßig in 5.4 sehen werden oder wie auch immer der neue Trunk heißt ...
Charles

Vielen Dank für die Info. Leider habe ich keine tiefe Kontrolle über meinen Server (er ist vermietet). Ist es wahrscheinlich, dass Webhosts APC verwenden?
Bojangles

3
Die meisten Shared Hosting-Anbieter verwenden APC nicht. Sie sollten sich einen Virtual Private Server ansehen, damit Sie die Konfiguration steuern können. VPS sind oft teurer als normales Shared Hosting, aber weitaus günstiger als ein echter dedizierter Server. Beliebte VPS-Anbieter sind Slicehost und Linode. Vergessen Sie nicht, dass Sie zuerst Ihren Code vergleichen und profilieren sollten !
Charles

15

Verzichten Sie auf die Idee, PHP zu minimieren, um einen Opcode-Cache wie PHP Acceleratoroder zu verwenden APC.

Oder so etwas wie memcached


18
Ich sagte "etwas anderes".
Stephen

3
Es ist nicht klar, dass Sie etwas anderes als einen Opcode-Cache meinen.
Treffynnon

5
memcached ist ein perfekter Weg, um die Leistung zu verbessern ... nachdem Sie Benchmarking und Profiling durchgeführt und festgestellt haben, dass das Caching selbst der bestmögliche Leistungsgewinn ist.
Charles

1
Wenn Sie PHP 5.5 verwenden, müssen Sie keinen Opcode-Cache installieren, da dieser jetzt standardmäßig mitgeliefert wird.
Firewall

1
Ich habe tatsächlich cromulent nachgeschlagen :(. Ich stimme den anderen zu, die Verwendung von memcached in diesem Kontext ist irreführend. Das Zwischenspeichern von Daten als Teil des Kompilierungsprozesses ist nicht dasselbe wie der resultierende Operationscode.
Mike Purcell

3

Mit etwas Umschreiben (kürzere Variablennamen) könnten Sie ein paar Bytes Speicher sparen, aber das ist auch selten von Bedeutung.

Ich entwerfe jedoch einige meiner Anwendungen so, dass Include-Skripte miteinander verknüpft werden können. Damit php -wkann es erheblich komprimiert werden, wodurch ein kleiner Geschwindigkeitsgewinn für den Skriptstart hinzugefügt wird. Auf einem Opcode-fähigen Server werden dadurch jedoch nur wenige Datei-Mtime-Checks gespeichert.


3

Dies ist weniger eine Antwort als eine Werbung. Ich habe an einer PHP-Erweiterung gearbeitet, die Zend-Opcodes übersetzt, um sie auf einer VM mit statischer Typisierung auszuführen. Es beschleunigt keinen beliebigen PHP-Code. Sie können damit Code schreiben, der viel schneller ausgeführt wird als es normales PHP zulässt. Der Schlüssel hier ist die statische Eingabe. Auf einer modernen CPU frisst eine dynamische Sprache die Strafe für die Fehlvorhersage von Zweigen links und rechts. Die Tatsache, dass PHP-Arrays Hash-Tabellen sind, verursacht ebenfalls hohe Kosten: viele Fehlvorhersagen für Zweige, ineffiziente Verwendung des Caches, schlechtes Vorabrufen des Speichers und keinerlei SIMD-Optimierung. Insbesondere die Fehlvorhersage von Zweigen und Cache-Fehler sind für die heutigen Prozessoren eine Achillesferse. Meine kleine VM umgeht dieses Problem, indem sie statische Typen und ein C-Array anstelle einer Hash-Tabelle verwendet. Das Ergebnis läuft ungefähr zehnmal schneller. Dies verwendet die Bytecode-Interpretation. Die Erweiterung kann optional eine Funktion über gcc kompilieren. In diesem Fall erhalten Sie zwei- bis fünfmal mehr Geschwindigkeit.

Hier ist der Link für alle Interessierten:

https://github.com/chung-leong/qb/wiki

Auch hier ist die Erweiterung kein allgemeiner PHP-Beschleuniger. Sie müssen dafür spezifischen Code schreiben.


1

Es gibt PHP-Compiler ... eine Liste finden Sie in dieser vorherigen Frage . Aber (es sei denn, Sie haben die Größe von Facebook oder zielen darauf ab, dass Ihre Anwendung clientseitig ausgeführt wird), sind sie im Allgemeinen viel schwieriger als sie wert sind

Durch einfaches Zwischenspeichern von Opcodes erhalten Sie mehr Nutzen für den Aufwand. Oder profilieren Sie Ihren Code, um die Engpässe zu identifizieren, und optimieren Sie ihn anschließend.



1

Ja, es gibt einen (nicht technischen) Punkt.

Ihr Hoster kann Ihren Code auf seinem Server ausspionieren. Wenn Sie es minimieren und hässlich machen, ist es für Spione schwieriger, Ihre Ideen zu stehlen.

Ein Grund für die Minimierung und Hässlichkeit von PHP kann der Spionageschutz sein. Ich denke, hässlicher Code sollte ein Schritt in einer automatischen Bereitstellung sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.