usar todas remove para listos las insertar etiquetas ejemplos codigos codigo php optimization code-generation translation

todas - remove html tags php



En serio, ¿debería escribir mal código PHP? (16)

¿Cuánta "eficiencia" necesitas? ¿Has medido? La optimización prematura es la raíz de todo mal, y la optimización sin medición SIEMPRE es prematura.

Recuerde también las reglas del Club de Optimización .

  1. La primera regla del Club de optimización es que no se optimiza.
  2. La segunda regla de Optimization Club es que no se optimiza sin medir.
  3. Si su aplicación se ejecuta más rápido que el protocolo de transporte subyacente, la optimización ha terminado.
  4. Un factor a la vez.
  5. Sin marketroids, sin horarios marketroides.
  6. Las pruebas continuarán tanto como sea necesario.
  7. Si esta es su primera noche en el Optimization Club, debe escribir un caso de prueba.

Hace poco trabajo en PHP, y en todo el código que he visto, las personas tienden a usar algunos métodos. (También tienden a usar pocas variables, pero ese es otro problema.) Me preguntaba por qué sucede esto, y encontré esta nota: "Una llamada de función con un parámetro y un cuerpo de función vacío toma aproximadamente el mismo tiempo que hacerlo 7-8 $ operaciones localvar ++. Una llamada a un método similar es, por supuesto, alrededor de 15 $ operaciones localvar ++ " aquí .

¿Es esto cierto, incluso cuando la página PHP ha sido compilada y almacenada en caché? ¿Debo evitar utilizar métodos tanto como sea posible para la eficiencia? Me gusta escribir código bien organizado y legible por humanos con métodos allí donde se repita un bloque de código. Si es necesario escribir código plano sin métodos, ¿hay algún programa que "en línea" los cuerpos del método? De esa forma podría escribir un buen código y luego ponerlo feo antes de la implementación.

Por cierto, el código que he estado viendo proviene del núcleo de Joomla 1.5 y varios plugins de WordPress, así que supongo que son personas que saben lo que están haciendo.

Nota: Me complace que todos hayan aprovechado esta pregunta para hablar sobre la optimización en general , pero de hecho estamos hablando de la optimización en los lenguajes interpretados. Por lo menos algún indicio del hecho de que estamos hablando de PHP sería bueno.


Especialmente con un intérprete rápido como PHP, no creo que la falta de legibilidad / mantenibilidad NUNCA valga la eficiencia que usted puede (o no) obtener de ella.

Y una nota sobre WordPress: he navegado mucho por el código de WordPress. No suponga que esas personas saben nada sobre el buen código, por favor.



La principal ventaja de PHP es que es rápido y fácil obtener una aplicación que funcione. Esa fortaleza proviene de la oportunidad de escribir código suelto (malo) y que siga funcionando de la manera esperada.

Si está en posición de necesitar conservar algunos ciclos de CPU, PHP no es lo que debería estar usando. Cuando las aplicaciones web PHP tienen un rendimiento bajo, es mucho más probable debido a consultas ineficaces, no a la velocidad de ejecución del código.


Para responder a su primera pregunta, sí, es cierto y también es cierto para el código de operación compilado. Sí, puede hacer que su código sea más rápido evitando llamadas de función, excepto en casos extremos en los que su código crece demasiado debido a la duplicación de código.

Debes hacer lo que te gusta "Me gusta escribir código bien organizado y legible por humanos con métodos allí donde se repita un bloque de código".

Si vas a cometer esta horrible atrocidad de eliminar todas las llamadas de función, al menos usa un generador de perfiles y solo lo hace con el 10% de tu código que importa.


Personalmente, aunque puede haber una sobrecarga para una llamada de función, si esto significa que escribo el código una vez (parametrizado), y luego lo uso en 85 lugares, estoy MUCHO más adelante porque puedo arreglarlo en un solo lugar.

Los lenguajes de scripting tienden a dar a las personas la idea de que "lo suficientemente bueno" y "funciona" son los únicos criterios a tener en cuenta al codificar.


Por supuesto, no deberías escribir un código PHP malo. Pero una vez que tienes algo escrito mal, siempre puedes usar el perfomance como excusa :-)


Si estás tan preocupado por la eficiencia, ¿por qué estás usando un lenguaje de scripting? Debería programar en un lenguaje mucho más rápido (inserte aquí su idioma compilado favorito), lo que probablemente resultará en más código y menos legible, pero se ejecutará muy rápido, y aún puede apuntar a las mejores prácticas de codificación.

En serio, si está codificando la velocidad de ejecución, no debería usar PHP en absoluto.


Un ejemplo de cómo la micro-optimización lleva a macro ralentizaciones:

Si está considerando seriamente la incorporación manual de funciones, considere desenrollar bucles manualmente.

Los JMP son caros, y si puede eliminar los bucles desenrollando y eliminando todos los bloques condicionales, eliminará todo ese tiempo desperdiciado simplemente buscando alrededor de la memoria caché de la CPU.

El aumento variable en el tiempo de ejecución también es lento, al igual que extraer datos de una base de datos, por lo que también debe incluir todos esos datos en el código.

En realidad, cargar un intérprete solo para ejecutar el código y copiar la memoria a un usuario es un desperdicio exhaustivo, ¿por qué no precomputamos todas las páginas posibles y almacenamos cada página en la memoria lista para usar, así que es solo una copia de memoria? ? seguramente eso es rápido!

Ah, ahora tenemos algo lento llamado Internet entre nosotros, que está obstaculizando la experiencia del usuario y limitando la cantidad de contenido que podemos usar, ¿qué tal si precomputamos las páginas de antemano, y las archivamos todas y las ejecutamos en el usuarios de la máquina local? ¡eso será realmente rápido!

Pero eso va a desperdiciar los ciclos de CPU, muchos de ellos, con el tiempo de carga de la página y el procesamiento del contenido del navegador, etc., omitiremos al intermediario y solo les enviaremos las páginas en los medios impresos. ¡Genio!.

/ yo miro colapsar su empresa mientras gasta 10 años precomputándose (a mano) e imprimiendo páginas que nadie quiere ver.

Esto puede sonarle tonto, pero para el resto de nosotros, lo que usted propuso es simplemente así de ridículo.

La optimización es buena, pero traza la línea en algún lugar sensato para que no tengas que preocuparte de que las personas futuras que trabajan en el código te rastreen mientras duermes por tener una base de código tan desagradable que no puede ser mantenida.

nota: sí, yo uso gentoo. ¿Como adivinaste?


Si desarrolla aplicaciones web con un patrón de arquitectura MVC, puede beneficiarse enormemente del almacenamiento en caché y la serialización. Puede almacenar vistas en caché, o partes de ellas, y puede serializar modelos.

Por experiencia, los modelos a menudo analizan y generan la mayoría de los datos que se muestran. Si sabe que un determinado modelo no generará nuevos datos con frecuencia, como un modelo que analiza un canal de información RSS, puede simplemente incluirlo en algún lugar con todos los datos analizados y actualizarlo de vez en cuando.


Creo que Joomla y Wordpress no son los mejores ejemplos de buen código PHP, sin ofender. No tengo nada personal contra las personas que trabajan en él y es genial cómo permiten que las personas tengan un sitio web / blog y sé que mucha gente pasa todo su tiempo libre en cualquiera de esos proyectos, pero la calidad del código es bastante pobre (con sin ofender).

Revise los anuncios de seguridad durante el año pasado si no me cree; también suponiendo que buscas rendimiento de cualquiera de los dos, su código tampoco sobresale allí. Por lo tanto, no es un buen código, pero Wordpress y Joomla se destacan en la interfaz: bastante fácil de usar, la gente tiene un sitio web y puede hacer cosas .

Y es por eso que tienen tanto éxito que las personas no los seleccionan en función de la calidad del código, sino de lo que les permitió hacer.

Para responder a su pregunta de rendimiento, sí, es cierto que todas las cosas buenas (funciones, clases, etc.) ralentizan su aplicación. Así que supongo que si su aplicación / script está todo en un solo archivo, que así sea. Siéntete libre de escribir un código PHP malo entonces.

Tan pronto como expandas y comiences a duplicar el código, deberías considerar el trade off (en velocidad) que trae consigo el código de escritura mantenible. :-)

En mi humilde opinión, este intercambio es bastante pequeño debido a dos cosas:

  1. La CPU es barata.
  2. Los desarrolladores no son baratos.

Cuando necesite regresar a su código dentro de seis meses, piense si esos nanosegundos ahorrados lo ejecutan, aún se acumulan cuando necesita corregir un desagradable error (tres o cuatro veces, debido a un código duplicado).

Puedes hacer todo tipo de cosas para que PHP funcione más rápido. En general, las personas recomiendan un caché, como APC . APC es realmente increíble. Ejecuta todo tipo de optimizaciones en el fondo para usted, por ejemplo, el almacenamiento en caché del bytecode de un archivo PHP y también le proporciona funciones en userland para guardar datos.

Entonces, por ejemplo, si analiza un archivo de configuración cada vez que ejecuta ese script, el disco de E / S es realmente crítico. Con un simple apc_store () y apc_fetch () puede almacenar el archivo de configuración analizado en un caché basado en archivos o en memoria (RAM) y recuperarlo desde allí hasta que el caché expire o se elimine.

APC no es el único caché, por supuesto.


Si miras el código php de WordPress, entremezcla las etiquetas php entre su html que lleva a espagueti en mi mente.

Phpbb3 sin embargo es mucho mejor en ese sentido. Por ejemplo, tiene una división estricta entre la parte php y la parte styles, que son archivos formateados xhtml con etiquetas {template}, analizados por un motor de plantilla. Que es mucho más limpio.


Escriba un par de ejemplos de 10 minutos y ejecútelos en su generador de perfiles.

Eso te dirá cuál es más rápido al milisegundo.

Si no tienes un generador de perfiles, publícalos aquí y los ejecutaré en mi generador de perfiles PHPEd.

Sospecho que gran parte de la diferencia de tiempo, si la hay, proviene de tener que abrir el archivo en el que está almacenada una clase, pero eso también debería probarse.

Luego pregúntese si le importa unos pocos milisegundos frente a tener que mantener el código de spaghetti. ¿Alguno de sus usuarios lo notará?

Editar

El generador de perfiles no simulará grandes volúmenes de tráfico, pero le indicará qué método es más rápido para un solo usuario y qué partes del código están usando cuánto tiempo. Especialmente si perfila las operaciones que se realizan repetidamente, digamos 1000 veces cada una en un bucle.

Podemos suponer (aunque no siempre) que un código más rápido utilizado por muchas personas será más rápido que un código más lento utilizado por muchas personas.


Aquellos que le darán una conferencia acerca de la micro-optimización del código generalmente son los mismos que tendrán 50 consultas SQL por página, tomando un total de 2 segundos, porque nunca escucharon sobre el perfil. ¡Pero su código está optimizado! (y lento como el infierno)

Hecho: agregar otro servidor web no es difícil. Replicar una base de datos es. La optimización del código del servidor web puede ser una pérdida neta si agrega carga en el DB.

Nota: 2-3 ms para páginas simples (como un tema del foro), incluido SQL es un buen objetivo para un sitio web PHP. Mi antiguo sitio web solía hacer eso.


En el 99% de los casos, debería preocuparse más por la comprensibilidad del código. Escribir código fácil de probar, comprender y mantener.

En los pocos casos en los que el rendimiento es realmente crítico, los lenguajes de scripting como PHP no son su mejor opción. Hay una razón por la cual muchas funciones básicas de la biblioteca en PHP están escritas en C, después de todo.