Frameworks PHP

txandy

#90 algún aspecto a destacar de Yii?

1 respuesta
F

#91 Bueno, te genera un admin (controlador y modelos) pasandole la base de datos ( que no migraciones, lastima ), Orm decente , MCV super claro y sistema de rutas fácil, Autentificación a su manera, de echo en el controler puedes poner que solo puedan entrar usuarios registrados, o pasarle incluso un nombre en plan, si es admin que tenga acceso etc.
Trae muchos helpers y widgets, aunque algunos no funcionan muy eficiente, aquí ejemplos :http://www.yiiplayground.com/index.php.

Un ejemplo de modelo y sus validaciones :

<?php

/**
 * This is the model class for table "imagenes".
 *
 * The followings are the available columns in table 'imagenes':
 * @property integer $id
 * @property string $nombre
 * @property string $time
 * @property integer $item_id
 *
 * The followings are the available model relations:
 * @property Item $item
 */
class Imagenes extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Imagenes the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'imagenes';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array(' nombre, time', 'required','on'=>'create'),
			array(' item_id', 'numerical', 'integerOnly'=>true),
			array('nombre', 'length', 'max'=>250),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
                        array('nombre', 'unique', 'attributeName'=> 'nombre','className'=>'Imagenes'),
                        array('nombre', 'file', 'allowEmpty' => true, 'types' => 'jpg, jpeg, gif, png'),
			array('nombre, time, item_id', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'item' => array(self::BELONGS_TO, 'Item', 'item_id'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			
			'nombre' => 'Nombre',
			'time' => 'Time',
			'item_id' => 'Nombre Item',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id',$this->id);
		$criteria->compare('nombre',$this->nombre,true);
		$criteria->compare('time',$this->time,true);
		$criteria->compare('item_id',$this->item_id);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
}

Esta pensado para ir por faena, ahora bien, yo no lo recomiendo por que tiene poco "mercado" en españa, pero para "aprender" mvc y demás va genial.

HispanicO

Me encanta este hilo. Pero tengo una duda relacionada con lo de #75. ¿Qué ocurre si no prevés mucho tráfico y luego la cosa se desborda, cuando ya tienes todo para un framework específico? No sé que supondría para symfony no poder dar a basto, es decir, qué valores maneja. Y cuanto llegaría a suponer una migración.

Por otra parte lo de #63, ¿Crees que los frameworks se notarían mucho más en proyectos grandes? Aunque estén enfocados a distintos "mercados", ¿se supone que esos benchmarks cambiarían cuando las proporciones del proyecto no sean "quick start"?

Me ha sorprendido el bajo rendimiento sobre PHP (comparándolo con otros lenguajes), y la diferencia de phalcon con symfony en todos los tests (totalmente opuestos).
Pedazo de link, por cierto.

1 respuesta
elkaoD

#93 si la cosa se desborda pues vas a tener más latencia, menor throughput... y eso te hace perder clientes (¿cuantas veces has cerrado una página que tardaba mucho en cargar?) O peor aún, que directamente te eche por demasiadas conexiones, es decir, la columna "Errors" de los benchs en #63 (vuelva más tarde = en 5 minutos me he olvidado de ti o me he ido a la competencia).

En cualquier caso creo que el problema no es que se desborde por conexiones: siempre puedes lanzar dinero al problema y poner más servidores, especialmente ahora con cloud... Si has pensado tu arquitectura para ser elástica pues es cuestión de lanzar más instancias.

Para mí la clave no es cuánto puede aguantar simultáneamente sino cómo escala en cuanto a rendimiento según añades funcionalidad y tu aplicación crece. Como leí por ahí: añadir más servidores no hace tu aplicación más rápida sino que evita que se vuelva lenta, el throughput base es el que es y punto.

Igual no hice hincapié en #63 y debería: mirad los resultados también del tab de "Latency" y la columna "Errors" que al menos a mí me parece más importante que la cantidad de requests servidos (aunque uno depende del otro, en Latency puedes ver también la desviación típica). Igual eres rapidísimo enviando requests pero si hay 6000 fallos como en algun bench que he visto pues apaga y vámonos.

Por supuesto, si evito tener que escalar pronto mejor que mejor (puedes lanzar dinero al problema, pero mejor ahorrarlo y gastarlo en desarrollo).

Aún así, lo del quick start no lo criticaba porque sea un proyecto simple, sino porque (según he entendido) cada benchmark de #62 estaba hecho con el "quick start" incluído en cada framework... y cada "quick start" es un mundo. Apples and oranges. Y la justificación bastante pobre: porque así refleja el baseline de cada framework (lo cual me la suda, quiero comparar objetivamente). Si un quickstart imprime "Hello world" y otro es la típica ToDoList, pues el framework del "Hello World" va a ganar obviamente...

En cualquier caso y aunque compartieran "quick start" sigo creyendo que el problema real es cómo escala cuando añades funcionalidad. Si con el proyecto de ejemplo va follado pero al meterle trabajo de verdad se vuelve lento... pues eso no lo salvas de ninguna forma.

Por supuesto, cómo se comporta al principio suele ser un buen indicador, pero habría que ver. P.ej. los frameworks con ORM van a ser inevitablemente más lentos que los que tiren a pelo (la típica discusión entre tiempo de desarrollo/mantenimiento y rendimiento).

Lo de que te sorprenda el bajo rendimiento en PHP... joder, ¡que es PHP! :P

EDIT: confirmado leyendo los comentarios del enlace de #62. Está probando el quickstart de cada proyecto.

Lo dicho, apples and oranges. Esos test no valen una mierda. Los de #63 son el mismo baseline... y además puedes contribuir y todo (van mejorando el código específico de cada FW).

EDIT2: coño me acabo de fijar que Node (bueno, y la mayoría que no necesitan server HTTP) va a pelo en los benchs, sin Nginx por delante sirviendo lo estático. Con un Nginx delante seguro que revientan incluso más a PHP y compañía.

EDIT3: lo de Symfony2 es criminal de verdad, no entiendo cómo puede ir tan mal el framework incluso en el test mínimo... También habría que ver cómo está programado, porque hay varios de Node y uno en concreto es pésimo.

1 1 respuesta
M

#94 qué es una ToDolist?

1 respuesta
elkaoD

#95 una lista de tareas (To-do list). Es el tipiquísimo proyecto de muestra que suelen poner en los frameworks.

1 respuesta
M

#96 Joder, lo leía en español, "todo" y por eso no me encajaba xd

Por cierto, por no abrir otro hilo, sabes de buenos manuales de Symfony? Sé que en un min. puedes buscar en google min, pero lo pregunto por si alguien tiene buenas referencias de alguno

Sé utilizar Laravel o CodeIgniter. Symfony siempre lo he visto muy complejo y siempre me ha dado "cosa" el ponerme a aprenderlo.

2 respuestas
elkaoD

#97 me lo imaginaba, y eso que lo puse con CamelCase :P

Si me dieran 1€ cada vez que leo la frase "por no abrir otro hilo" os juro que sería rico xDDD

1
MrTurbo

La diferencia notable de rendimiento en symfony2 es que es prácticamente obligatorio usar symfony en un servidor que tenga instalado APC.

En una de las webs que he hecho con symfony2 el servidor sin APC la web tardaba en generarse entre 0,5 y 1,5 segundos. Con APC se servia en apenas 0,1 y 0,3 segundos. Estoy hablando de exactamente la misma web, el único cambio fue la instalación del APC.

2 respuestas
APOCa

#97 http://www.symfony.es/libro/ lo recomiendan por aquí. Lo pille hace 2 semanitas y cuando tengo tiempo voy leyendo y haciendo las prácticas. Esta todo muy bien explicado.

Aquí tienes un capitulo para ver el formato http://issuu.com/javier.eguiluz/docs/libro-symfony2-apendice-twig?e=2541453/2628739

1
elkaoD

#99 los tests van con APC (todos), lo dice en la parte de environment.

http://www.techempower.com/benchmarks/#section=environment

M

#99 APC? qué es un APC?

1 respuesta
MrTurbo

#102 una libreria para cachear php

http://php.net/manual/es/book.apc.php

1
txandy

#93 No creo que llegues a desbordar a Symfony o al menos conozco un caso de una web muy grande, con muchísimo trafico...

Aquí esta el link: http://www.genbetadev.com/desarrollo-web/las-tripas-tecnologicas-de-un-gigante-del-porno

1 1 respuesta
elkaoD

#104 el caso es que desbordar no vas a desbordar nada. Replicas y punto. El cuello de botella suele ser la BD más que el framework.

La cuestión es la latencia media y cuántos dólares lanzas al problema.

En cualquier caso... tienes toda la razón.

PD: ¡PHP! Lo explica todo. Así va de mal YouPorn :P

1
B

Quizás lo más importante que comentó el amigo Pickup fue que en 2011 la web fue reescrita al completo en PHP con el framework Symfony y la base de datos NoSQL Redis, sustituyendo la anterior arquitectura Perl + MySQL en la que fue construido el sitio en el ya lejano 2006 y obteniendo unas mejoras de rendimiento del 10%.

Pues si solo tienen un 10% de mejora miedo me da ver ese código.

1 1 respuesta
elkaoD

#106 y más metiendo Redis que es una puta bala frente a MySQL. Juzguen ustedes mismos:

http://colinhowe.wordpress.com/2009/04/27/redis-vs-mysql/
http://ruturaj.net/redis-memcached-tokyo-tyrant-and-mysql-comparision/

El código no ha debido mejorar sino desmejorar. También hay que ver cómo queda Symfony en los benches de #63.

15 días después
elkaoD

Ronda #6 de frameworks: http://www.techempower.com/benchmarks/#section=data-r6

2

Usuarios habituales