2009-08-10 18 views

Antwort

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 build of PHP, die unter anderem integrierte PostgreSQL-Unterstützung enthält. Es wurde mit der --with-pdo-pgsql Flagge gebaut. Daher muss es nicht mit der gemeinsam genutzten Bibliothek pdo-pgsql verteilt werden.

Wenn er nicht mit --with-pdo-pgsql erstellen würde, hätte er die pdo-pgsql shared library verteilen und eine Anweisung in php.ini einfügen müssen, um es 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.

1

Vielleicht wird es keine vollständige Antwort auf Ihre Frage sein, 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 auf Google Bücher verfügbar).

Der relevante Teil (ein Hinweis am oberen Rand der Seite 56) ist:

schon einmal gefragt, warum einige Erweiterungen sind konfiguriert --enable-extname und mit einigen konfiguriert verwenden --with-extename? Funktionell gibt es keinen Unterschied zwischen den beiden. In der Praxis ist jedoch --enable bedeutet für Funktionen, die eingeschaltet werden können, ohne dass Bibliotheken von Drittanbietern erforderlich sind. --with, im Gegensatz dazu ist für Features, die solche Voraussetzungen haben.

Also, kein einziges Wort über die Leistung (ich glaube, wenn es einen Unterschied gibt, ist es nur eine Frage der „Laden eine weitere Datei“ vs „Laden eine größere Datei“); aber es gibt einen technischen Grund für diese Möglichkeit.

Ich denke, das ist so getan, dass PHP selbst nicht erfordert eine zusätzliche externe Bibliothek wegen einer Erweiterung,; Mit der richtigen Option können Benutzer die Erweiterung selbst aktivieren oder deaktivieren, je nachdem, ob sie diese externe Bibliothek bereits besitzen oder nicht.

0

Ich denke, Nate hat Recht mit der Leistung und dass diese Optionen nur zum Packen helfen.

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

In der ladbaren Modulversion ruft PHP eine 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.

2

Vielleicht ein Unterschied im Speicherbedarf?

Korrigieren Sie mich, wenn ich falsch liege, aber ein integriertes Modul wird in jedem Prozess im Arbeitsspeicher dupliziert (weil es statisch verknüpft ist), während ein freigegebenes Modul nur einmal geladen und von allen PHP-Prozess geteilt wird.

1

Ich habe festgestellt, wenn alle Funktionen als shared Module laden 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.