May 13th, 2010 Category: Optimizing Zend Framework
10 Comments »

Puff hace mucho no escribo nada mi nuevo proyecto (http://www.dondejugarpaintball.com) Me esta llevando todo mi tiempo libre.

Voy a mostrarles como implementar de forma simple dos tips de velocidad para tus paginas, el primero es gzip, la idea es que toda la salida de nuestra aplicacion al browser no tenga espacios inecesarios, tabulaciones, y saltos de lineas, en pocas palabras, si vemos el codigo fuente de nuestro sitio vamos a ver solo una linea con todo el contenido html, como pueden ver en http://www.dondejugarpaintball.com. Esto es muy util para ahorrarnos ancho de banda, y obviamente aumentar la velocidad con la que se descarga nuestro contenido.

Esto a simple vista pareceria ser un trabajo de horas, pero como nosotros usamos Zend Framework y toda la info de nuestra aplicacion pasa por nuestro public/index.php con solo editar este archivo podemos conseguir esta mejora en segundos.

Si tienen un archivo index.php standar sin modificaciones, puden copiar y pegar este codigo y es suficiente.

//Con esta linea le indicamos que queremos obtener toda la salida generada
ob_start();
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
            realpath(APPLICATION_PATH . '/../library'),
            get_include_path(),
        )));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap();
$application->run();

// A partir de esta linea conseguimos toda la salida generada y la comprimimos
$cntACmp =ob_get_contents();
ob_end_clean();
$cntACmp=str_replace("\n",' ',$cntACmp);
$cntACmp=ereg_replace('[[:space:]]+',' ',$cntACmp);
ob_start("ob_gzhandler");
echo $cntACmp;
ob_end_flush();

Si guardan y ejecutan su aplicacion, ya tendrian que tener todo su contenido html en una sola linea.

El segundo tips, ya requiere un poco mas de conocimeintos sobre apache.
La idea es que cada vez que alguien pida un contenido estatico como una imagen, o css el apache responda lo mas rapido posible, esto se hace diciendole que nuestro contenido tiene una fecha de expiracion x, y por lo tanto si esa fecha no vario, hay que entregar el mismo contenido que se entrego anteriormente, esto reduce mucho los recursos de nuestro sistema para entregar un contenido estatico. Podemos definir tiempos para cada extension.

Para realizar este cambio necesitamos saber si tenemos el modulo expire de Apache activado.

En caso contrario entramos como sudo y escribimos

sudo a2enmod expire

Reiniciamos apache

/etc/init.d/apache2 reload

Y ya queda activado.

Despues de confirmar que el modulo expire esta activado, editamos nuestro archivo public/.htacces, y agregamos las lineas correspondientes.

#empezamos a definir los tiempos de expiracion de cada contenido
ExpiresActive On
ExpiresDefault A0
ExpiresByType image/gif A25920000
ExpiresByType image/png A25920000
ExpiresByType image/jpg A25920000
ExpiresByType image/jpeg A25920000
ExpiresByType text/css A25920000
ExpiresByType text/javascript A259200000

#estas son nuestras directivas por default
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Seguir leyendo

March 10th, 2010 Category: Optimizing Scalabillity Zend
4 Comments »

Revisando algunos problemas que tuve hoy con un servidor me volvi a plantear el uso de Zend Server.

Zend Server es un administrador para servidor de aplicaciones web siempre que trabajen con PHP. Este nos permite administrar extensiones, logs, extensiones. Ademas viene con Zend Optimizer+, Zend Data Cache, y Zend Debugger. Este producto de la gente de Zend nos promete manejar una mayor cantidad de usuarios, de datos y codigo.

Dentro de sus principales objetivos es la de proveer una herramienta para escalar y aumentar la performance de nuestro servidor.

En estas diapositivas, la gente de Zend hace una introduccion a Zend Server.

Tambien nos hablan de Performance y Escalabilidad.

Tambien nos brinda un servicio de Colas.

Aca nos muestran como hicieron para optimizar magento el software open source para crear tiendas online.

Instalacion en Debian.

$ sudo vim /etc/apt/source.list

agregamos la siguiente linea

#Zend Server Respository
deb http://repos.zend.com/zend-server/deb server non-free

Agregamos la clave publica del repositorio

$ wget http://repos.zend.com/deb/zend.key -O- | sudo apt-key add -

Actualizamos el repositorio

$ sudo aptitude update

Si queremos instalar php 5.2.x

$ sudo aptitude install zend-server-ce-php-5.2

Si queremos php 5.3.x

$ sudo aptitude install zend-server-ce-php-5.2

Cuando termine la instalacion podemos entrar en https://localhost:10082/ZendServer/ o http://localhost:10082/ZendServer/

Despues de completar el formulario de administracion, sino tuvimos ningun problema vamos a ver la siguiente pantalla.

Con estas diapositivas podemos ver un poco las virtudes de Zend Server un producto totalmente gratuito y facil de instalar. Si necesitan soporte tambien, pueden contratarlo, hay planes para todos los gustos.

Zend Server

Seguir leyendo