PHP mit Modulen kompilieren vs. gemeinsame Module verwenden?

8

Gibt es einen Unterschied zwischen dem kompilieren von PHP mit dem Parameter:

%Vor%

anstatt es einfach als ein gemeinsames Modul zu kompilieren und es so zu integrieren? Gibt es einen Leistungsvorteil? Wenn nicht, warum sollten Sie das tun?

    
ryeguy 10.08.2009, 13:57
quelle

5 Antworten

0

Jeder Leistungsvorteil wäre vernachlässigbar. Es ist einfach eine weitere Option, um Ihren PHP-Build zu verpacken.

Auf meinem Mac verwende ich Marc Liyange's PHP-Build , der unter anderem in PostgreSQL-Unterstützung. Es wurde mit dem Flag --with-pdo-pgsql erstellt. Daher muss es nicht mit der gemeinsam genutzten Bibliothek pdo-pgsql verteilt werden.

Wenn er nicht mit --with-pdo-pgsql erstellt hätte, hätte er die freigegebene Bibliothek pdo-pgsql verteilen und eine Anweisung in php.ini einfügen müssen, um sie zu laden. Sicher, es ist nur ein kleiner Unterschied, aber wenn Sie wissen, dass Sie diese Funktionalität verwenden werden, ist es in Ordnung, es in PHP selbst zu bauen.

    
Nate 10.08.2009, 16:32
quelle
2

Vielleicht ein Unterschied im Speicherbedarf?

Korrigiere mich, wenn ich falsch liege, aber ein eingebautes Modul wird bei jedem Prozess im Speicher dupliziert (weil es statisch verknüpft ist), während ein geteiltes Modul nur einmal geladen und von allen PHP-Prozessen geteilt wird.

    
quelle
1

Vielleicht ist es keine vollständige Antwort auf Ihre Frage, aber hier ist, was ich bisher finden konnte: Es gibt eine Art von Teilantwort in dem Buch " Erweitern und Einbetten von PHP ", geschrieben von Sara Golemon ( amazon ; einige Teile sind auch in Google-Büchern verfügbar).

>

Der relevante Teil (ein Hinweis oben auf Seite 56) ist:

  

Überhaupt sich wundern, warum einige Erweiterungen sind   konfiguriert mit --enable-extname und   einige werden mit konfiguriert   %Code%? Funktionell gibt es keinen Unterschied zwischen den beiden. Im   Übung ist jedoch --with-extename gemeint   für Funktionen, die aktiviert werden können   ohne dass ein Dritter benötigt wird   Bibliotheken. --enable ist dagegen   gemeint für Features, die solche haben   Voraussetzungen.

Also, kein einziges Wort über die Leistung (ich denke, wenn es einen Unterschied gibt, ist es nur eine Sache von Laden einer weiteren Datei vs Laden einer größeren Datei "); aber es gibt einen technischen Grund für diese Möglichkeit.

Ich nehme an, das ist so, weil PHP aufgrund einer Erweiterung keine zusätzliche externe Bibliothek benötigt; Mit der richtigen Option können Benutzer die Erweiterung selbst aktivieren oder deaktivieren, je nachdem, ob sie diese externe Bibliothek bereits besitzen oder nicht.

    
Pascal MARTIN 10.08.2009 16:31
quelle
1

Ich habe bemerkt, wenn alle Funktionen als shared Module geladen werden PHP-Seiten laden schneller und CPU-Auslastung ist niedriger, jedoch einige Kommandozeilen-PHP-Funktionen nicht richtig funktionieren. Es ist logisch anzunehmen, dass ein gemeinsam genutztes Modul-Setup effizienter ist als ein großes statisches Binary, da die Module nur bei Bedarf geladen würden.

    
Chris 31.07.2011 03:06
quelle
0

Ich nehme an, Nate hat recht mit der Leistung und dass diese Optionen nur zum Packen helfen.

Grundsätzlich kann PHP mit einem kompilierten Modul die Modulfunktionen direkt aufrufen, diese Aufrufe werden aber nach der Übersetzung in anzurufende Speicheradressen übersetzt.

In der ladbaren Modulversion ruft PHP einen dl_open auf, um die Bibliothek zu laden und ruft dann die Funktionen nach ihren Adressen auf, wie die kompilierte Version tut. Ich nehme an, dass dieser dl_open-Aufruf nur einmal ausgeführt wird, wenn der Webserver gestartet wird, damit Sie ihn ignorieren können.

    
Renato Aquino 11.08.2009 15:30
quelle

Tags und Links