2010-08-02 12 views
14

Hay toneladas de frameworks PHP por ahí; algunos son bastante decentes, otros parecen hinchados e innecesarios. Después de ver Rasmus Lerdorf's presentation on PHP performance at Digg, estoy un poco más preocupado por el rendimiento de los marcos que elijo para construir mis aplicaciones.PHP Framework Overhead

Dos de los frameworks más populares que conozco son CodeIgniter y CakePHP. Por lo que entiendo, CakePHP es un terrible recurso de cerdo. ¿Qué pasa con CodeIgniter? Escuché que Zend Framework tampoco es tan delgado.

¿Hay otros marcos (más performantes) que me puedan interesar? ¿Sería mejor simplemente no usar un marco en absoluto? ¿Qué consideraciones debo tomar para elegir un marco PHP?

+0

posible duplicado de [¿Son Symphony y CakePHP demasiado lentos para ser utilizables?] (Http: // stackoverflow.com/questions/2928908/are-symphony-and-cakephp-too-slow-to-be-use) – ircmaxell

Respuesta

32

uso de un marco o no el uso de un marco significa que usted está haciendo una elección entre rendimiento de las aplicaciones

  1. defecto bajo carga

  2. velocidad/estabilidad de Desarrollo

Si usted decide no utilizar un marco, aún necesita hacer las cosas que haría un marco. Simplemente los está codificando en PHP sin procesar, o desarrollando su propio marco que puede seguir siendo liviano ya que solo tiene que hacer lo que usted quiere que haga, y no lo que el mundo quiere que haga. Obtendrá un mejor rendimiento, pero pasará más tiempo desarrollando y depurando ese código que un marco maneja automáticamente.

Lo que le compra un marco es la velocidad en tiempo de desarrollo. No tiene que escribir largas consultas SQL complicadas ni depurar las largas y complicadas consultas SQL de otra persona. Solo necesita crear una tabla y crear instancias de un modelo. No es necesario que decida dónde va a escapar sus parámetros de SQL, porque el marco define dónde sucede eso. No es necesario entrar en grandes luchas políticas sobre dónde va la lógica de negocios frente a la lógica de presentación, porque el marco define esto. Un marco de trabajo elimina la necesidad de tener un desarrollador de sistemas en su equipo, o le evita tener que pensar/perder tiempo en el desarrollo del sistema. Puede llegar a codificar su aplicación más rápido y obtener resultados medibles y visibles antes.

Aquí hay otra manera de pensarlo. PHP Frameworks son más lentos que PHP, pero PHP es más lento que C. ¿Por qué no escribir su aplicación directamente en C?

No hay una respuesta correcta aquí, es una de esas preguntas de ingeniería/desarrollo de software que es una cuestión de lo que su situación actual demanda. La opción predeterminada de la industria en estos días es utilizar un marco, porque si no lo hace, sus competidores lanzarán una aplicación que tiene un procesamiento de PHP más lento que el suyo, pero llegará al mercado tres meses antes.

Finalmente, una última cosa a considerar de esa charla. Rasmus dijo que la mayoría de las veces el rendimiento percibido de su aplicación se encuentra en la interfaz frontend. Tanto el código de Javascript como la forma en que el navegador está almacenando en caché las solicitudes que realiza a su servidor. PHP es un lenguaje espantoso y horrible que raramente es el cuello de botella. Cuando se trata del cuello de la botella, por lo general, puede hacer algunos ajustes (opción de caché de código, refactorización enfocada) que eliminarán el cuello de botella de rendimiento.

+4

Realmente disfruté leyendo su texto y no podría estar más de acuerdo. Buen trabajo. +1 –

3

En mi humilde opinión, las ventajas de utilizar un marco superan con creces las desventajas de los gastos generales que pueden venir con él. Por supuesto, siempre hay excepciones a la regla, a saber:
- El proyecto es lo suficientemente pequeño como para no justificar un marco
- El marco en sí es terriblemente diseñado

Sin embargo, para la mayoría de los casos, no debe Preocúpate por eso. He estado usando Symfony (versiones 1.2 & 1.4) en una serie de proyectos, y nunca pensé "esto es demasiado pesado para los recursos". Con mucho gusto sacrificaré algunos recursos a cambio de todas las herramientas que proporciona un marco que hacen mi vida más fácil, y el trabajo toma menos tiempo;)

+1

Hay otra excepción. El proyecto tiene un nivel de tráfico lo suficientemente alto como para garantizar un mayor tiempo de desarrollo a cambio de menos recursos de servidor (este es un nivel muy alto, pero es una excepción válida) ... – ircmaxell

+3

Creo que siempre es más barato lanzar más hardware en problemas de rendimiento que pagar a los desarrolladores para optimizar el código y luego aumentar los costos de mantenimiento debido a un código menos legible. Por supuesto, se deben hacer pasos evidentes y sencillos como el almacenamiento en caché, pero además de las cosas obvias. –

+2

No siempre es más barato ... Cuando tienes cientos o miles de servidores, dedicar un programador a problemas de rendimiento va a ser mucho más barato que tirar más hardware. Ah, ¿y desde cuándo no usar un framework === código menos legible? No estamos hablando de un desarrollador junior que escribe toda la aplicación (supongo que es un desarrollador competente en todos los aspectos) ... – ircmaxell

8

es posible que desee consultar la categoría de estructuras livianas. hay fat-free, doophp, limonade, etc. son livianos, pero no menos poderosos de lo que piensas. no confíe en los puntos de referencia publicados. en cambio, comparativa con sus propios objetivos.

+0

+1 para los enlaces. :) – cbednarski

0

Por lo que yo sé, CodeIgniter es un marco un poco más ligero. La mayoría de las personas que conozco usan CodeIgniter frente a CakePHP. Pero he estado usando CakePHP durante varios años.

Si realmente te preocupa la escala, échale un vistazo al uso de una solución NOSQL como MongoDB o CouchDB desde el principio. (Utilizo MongoDB y para la mayoría de las aplicaciones, mongo puede reemplazar MYSQL). Además de la interfaz, las llamadas a la base de datos son a menudo lo que lo hace más lento.

Otra cosa a considerar es tener una cola de trabajo retrasada. Para esto, como el procesamiento de imágenes en miniaturas, a menudo es mejor tener un proceso separado que trate esto y evitar que el usuario espere.

Casi todos los sitios web a gran escala utilizan el almacenamiento en caché. Almacenamiento en caché de la base de datos y HTML. Puedes mirar MEMCACHED que casi todo el mundo usa y almacena tu caché en la memoria. MongoDB también ha informado de una velocidad de memcached como cuando llama datos.

Como todos los demás dicen aquí, en su mayoría no es el marco el que no escala. Es toda tu arquitectura. No he analizado otros frameworks livianos, pero si seleccionas CakePHP y CodeIgniter, yo personalmente iré con CodeIgniter. Además, solo asegúrese de continuar refactorizando su código a lo largo del tiempo, esto le dará la oportunidad de realizar cambios que aceleren su aplicación.

1

Solo he usado CakePhp con enojo durante varios años. Sí, es grande y puede parecer hinchado, pero, para ser honesto, creo que si hubiera utilizado cualquier otro marco sería tan grande para cuando agregue todo lo que tengo y uso con Cake.

En términos de velocidad, estamos hablando de pequeñas fracciones de diferencia de segundos entre los contendientes. La optimización de su sitio utilizando herramientas como Yslow y gzip y, por supuesto, un diseño sensato, logrará mayores mejoras que la elección del marco.

http://www.grasset.es es un sitio que construí hace aproximadamente 4 años con Cake. Es grande y complejo, pero no creo que sea lento.

3

He creado algunas aplicaciones grandes con el framework PHP Yii. Es bastante rápido porque tiene clases de autocarga "vagas". Tengo no performance complaints.

Si ejecuta un código de operación PHP caché/acelerador como APC o eAccelerator, y hace todo lo habitual para best practicespage loading speed en configuraciones de LAMP, a continuación, utilizando un marco de PHP será bien vale la pena el tiempo de desarrollo salvado. ¡El rendimiento no será realmente un problema a menos que esté atendiendo una cantidad astronómica de solicitudes!

+0

Creo que he leído en algún lado que hay grandes tiempos de sobrecarga para las clases de carga diferida. Tal vez esta era una versión anterior de PHP o tal vez lo estoy inventando. A menos que estén haciendo algo personalizado (es decir, no autoloading clase PHP nativa). – mattbasta

+0

Yii2 exprimió el rendimiento hasta sus límites. La sobrecarga de rendimiento apenas se nota. Aquí definitivamente vale la pena leer APC y otras preguntas relacionadas. Gracias :) – LihO

Cuestiones relacionadas