2009-08-10 17 views

Respuesta

0

Cualquier beneficio de rendimiento sería insignificante. Es simplemente otra opción para empacar su compilación de PHP.

En mi Mac utilizo Marc Liyange’s build of PHP, que incluye, entre otras cosas, soporte PostgreSQL incorporado. Fue construido con la bandera --with-pdo-pgsql. Como resultado, no es necesario que se distribuya con la biblioteca compartida pdo-pgsql.

Si no compiló con --with-pdo-pgsql, habría tenido que distribuir la biblioteca compartida pdo-pgsql e incluir una directiva en php.ini para cargarla. Claro, es solo una pequeña diferencia, pero si sabes que vas a utilizar esa funcionalidad, está bien construirla en PHP.

1

Tal vez no sea una respuesta completa a su pregunta, pero esto es lo que he podido encontrar hasta ahora: hay una especie de respuesta parcial en el libro "Extendiendo e incrustando PHP", escrito por Sara Golemon (amazon; algunas partes también están disponibles en los libros de google).

La parte (una nota en la parte superior de la página 56) correspondiente es:

Alguna vez se preguntó por qué algunas extensiones son configurado utilizando --enable-extname y algunos están configurados utilizando --with-extename? Funcionalmente, no hay diferencia entre los dos. Sin embargo, en la práctica , --enable significa para las características que se pueden activar sin requerir ninguna biblioteca de terceros . --with, por el contrario, es destinado a funciones que sí tienen requisitos previos de .

Por lo tanto, ni una sola palabra sobre el rendimiento (supongo que, si hay una diferencia, que es sólo una cuestión de "carga otro archivo" vs "carga un archivo grande"); pero hay una razón técnica detrás de esta posibilidad.

Supongo que esto se hace para que PHP no requiera una biblioteca externa adicional debido a alguna extensión; El uso de la opción correcta permite a los usuarios habilitar o deshabilitar la extensión ellos mismos, dependiendo de si ya tienen esa biblioteca externa.

0

Supongo que Nate tiene razón sobre el rendimiento y que esta opción solo ayuda para el embalaje.

Básicamente con un módulo compilado, PHP puede llamar directamente a las funciones del módulo, pero, después de la compilación, estas llamadas se traducen a direcciones de memoria a llamar.

En la versión del módulo cargable, PHP llamará a dl_open para cargar la biblioteca y luego llamará a las funciones por sus direcciones, como lo hace la versión compilada.Supongo que esta llamada dl_open se realiza solo una vez cuando se inicia el servidor web, por lo que puede ignorarlo.

2

¿Quizás una diferencia en la huella de memoria?

Corrígeme si me equivoco pero un módulo integrado se duplicará en cada proceso cargado en la memoria (porque está estáticamente vinculado) mientras que un módulo compartido se cargará solo una vez y será compartido por todos los procesos de php.

1

He notado que cuando todas las funciones se cargan como módulos compartidos, las páginas de php se cargan más rápido y el uso de la CPU es menor, sin embargo, algunas funciones de línea de comando php no funcionan correctamente. Es lógico suponer que una configuración de módulo compartido es más eficiente que un gran binario estático, ya que los módulos solo se cargarían cuando sea necesario.