El rendimiento de las bases de datos en PHP

¿Qué sistema de acceso a una base de datos es el más rápido en PHP?

En una situación normal, un sitio web con una carga de trabajo baja (pocos usuarios concurrentes), preocuparse por utilizar el sistema más rápido es interesante, pero no esencial. Sin embargo, en un sitio web de éxito, con miles o millones de usuarios, puede ser la clave para el éxito o el hundimiento del sitio web.

En PHP se pueden usar diferentes sistemas de acceso (nativo o a través de una capa intermedia) y en cada uno de ellos existen diferentes posibilidades. Por ejemplo, para MySQL, podemos usar:

  • Acceso nativo: ext/mysql o ext/mysqli (procedural u orientado a objetos).
  • Acceso a través de una capa intermedia: PDO, adoDB, PEAR::DB, un framework.

Un buen banco de pruebas debería tener en cuenta múltiples factores: tipo de consulta (select, insert, update, etc.), tipo de dato (numérico, cadena, etc.), modo de ejecución (sentencia preparada, con o sin buffer, etc.). No hay muchas comparativas y las que he podido encontrar no son concluyentes, ya que algunas incluso muestran resultados contradictorios. Aquí dejo algunas:

A falta de datos concluyentes, mi recomendación es sencilla: usa el método que te parezca más sencillo.

Request Quest, ¿cuánto sabes?

Pedro Díaz, un seguidor de mi cuenta de Twitter me ha pasado la siguiente página: Request Quest.

Este sitio web presenta una serie de preguntas sobre las peticiones que realiza un navegador web cuando carga una página web.

Las primeras preguntas son muy sencillas. Por ejemplo, en la primera se pregunta si el código <p>Download img.png</p> lanza una petición HTTP:

request-quest-01

Pero poco a poco se va haciendo más difícil. ¿El siguiente código lanza una petición para cargar la imagen img.png?

<div style="background: url(img.png); display: none"></div>

request-quest-02

La respuesta es que sí, tres navegadores (Chrome, Safari e IE) cargan la imagen, aunque no sea necesario porque no se va a visualizar por el display: none.

request-quest-03

Muy interesante, ya que estos pequeños detalles pueden ayudar a optimizar la carga de una página.

Lo que sucede en Internet en un minuto

Gracias a la entrada Lo que sucede en Internet en un minuto: 2012 vs 2013 de microsiervos, he llegado a la entrada A snapshot of one minute on the internet, today and in 2012 en la que podemos encontrar las siguientes imágenes.

En un minuto, ocurría todo esto en el año 2012 y ocurre ahora en el año 2013:

gpbullhound1

 

Y según What Happens in an Internet Minute?, publicado por Intel en el año, tenemos estos datos:

infographic_1080_logo

 

 

En el siguiente gráfico se muestra el crecimiento, de 2012 a 2013, de lo que ocurre en un minuto en Internet:

how-one-minute-on-the-internet-has-changed-since-march-2012-growth-in-_chartbuilder

Además, en microsiervos también tenemos ¿Cuánta gente accede a Facebook en un minuto?, que dice que se producen 227.000 logins por minutos. ¿Qué ordenadores tiene Facebook para soportar esa carga?

La velocidad de PHP

¿Existen formas mejores o peores de escribir el código en PHP?

Claro, pero todo depende del punto de vista. A veces, el código más rápido de escribir no es el más fácil de entender o el más rápido de ejecutar (eficiente) o el más fácil de mantener. El concepto de “el mejor código” depende de cómo se mida lo de mejor.

Si lo que queremos medir es el tiempo de ejecución, en The PHP Benchmark nos aclaran algunas dudas.

¿Es más rápido echo o print?

¿Es más rápido isset() o empty()?

¿Es más rápido for() o while()?

¿Es más rápido foreach(), for() o while(list() = each())?

¿Es más rápido switch() o if/elseif/else?

Muy, pero que muy interesante.

 

¿Es lento PHP?

¿Lento o rápido? Depende de con qué se compare…

En el artículo New Year’s Benchmarks podemos encontrar el resultado de una prueba que consistía en comparar el tiempo de ejecución de diferentes frameworks de PHP: Cake, Solar, Symfony y Zend. También realizaron una prueba base en la que compararon “sólo HTML” y PHP. El resultado de esta comparación fue:

framework 1 2 3 4 5 avg
baseline-html 2613.56 2284.98 2245.98 2234.94 2261.01 2328.09
baseline-php 1717.74 1321.49 1292.86 1511.40 1327.35 1434.17

Como podemos ver, PHP supone un procesamiento que hace que el tiempo de respuesta sea significativamente menor.

Cualquiera puede realizar un experimento similar con la herramienta Apache HTTP server benchmarking tool, que suele estar disponible con cualquier instalación de Apache. Con esta herramienta podemos descubrir cuántas peticiones por segundo es capaz de responder cualquier instalación de Apache.

Por ejemplo, podemos realizar un experimento para ver qué es más rápido, escribir “¡Hola mundo!” directamente en HTML o desde PHP.

Es decir, tenemos dos páginas, una sólo contiene HTML:

<!DOCTYPE html>
<html>
<head>
<title>Prueba</title>
</head>
<body>
<p>
¡Hola mundo!
</p>
</body>
</html>

La otra contiene un pequeño fragmento de PHP:

<!DOCTYPE html>
<html>
<head>
<title>Prueba</title>
</head>
<body>
<p>
<?php
 echo "¡Hola mundo!";
?>
</p>
</body>
</html>

Los resultados de HTML estático:

Apache es capaz de devolver 2280 peticiones por segundo cuando se trata de la página con HTML estático.

Los resultados de PHP:

Apache es capaz de devolver 1439 peticiones por segundo cuando se trata de la página con código PHP.

Como podemos ver, otra vez la ejecución de una página con PHP, por poco que sea, supone una gran penalización.

Google ofrecerá un servicio de aceleración de páginas

Publicado hoy en el periódico El País: Google abrirá un servicio de pago para acelerar páginas web.

Google ha presentado hoy un nuevo servicio, pero esta vez se tendrá que pagar. Se trata de Page Speed Service y promete optimizar el sitio del cliente para que su consulta se haga más rápida, dándole una aceleración entre un 25 y un 60% superior al resto de sitios.

Según explica en el blog corporativo, deberá apuntarse el sitio hacia una dirección de Google, desde la cual se reescribirá el código de los contenidos para agilizar su visionado y después se desplegarán a los visitantes del sitio desde los propios servidores de la empresa. El sitio conservará su dirección URL original.

Entre los trabajos para optimizar la página que se harán figura la compresión de imágenes, poner en caché determinadas coordenadas o aprovechar la compresión en el servidor. Google presenta algunas pruebas para documentar sus promesas. Con todo, el servicio avisa de algunas importantes limitaciones. No podrá trabajar con sitios https cuya conexión está securizada y se emplea, por ejemplo, por los bancos para dar acceso a sus clientes a las cuentas personales. Tampoco se podrá probar el servicio en sitios albergados en Blogger, entre otros, ni opera sobre contenidos Flash o con archivos que se consulten en streaming.

Desde hace tiempo, Google ha propuesto diferentes soluciones para mejorar la velocidad de consulta de las páginas web desde la publicación de un módulo para el servidor Web Apache a herramientas para que el creador de la página pueda evaluar su resultado y realizar modificaciones aconsejadas. Pero la novedad ahora es que el servicio es de pago. De momento, Google no ha suministrado tarifas y lo ofrece selectivamente a una serie de desarrolladores.

Consejos para mejorar el rendimiento de una página web: el cliente

La mejora del rendimiento de una página web es un elemento clave en el desarrollo de un sitio web, pero muchas veces se descuida. Cuando un sitio web soporta una gran carga de peticiones y se “hunde” su tiempo de respuesta, optimizar las páginas web puede ser la única solución ya que puede ser difícil o imposible optimizar el servidor web (está perfectamente configurado y no hay dinero para comprar otro).

Mejorar el rendimiento de una página web es muy importante porque influye en la experiencia de usuario y puede ser la clave para que un usuario retorne a nuestro sitio web o no vuelva nunca más.

En Internet podemos encontrar numerosos artículos sobre cómo mejorar el rendimiento de una página web. Los siguientes artículos se refieren a optimizan en el lado del cliente, aunque también hay algunos consejos que se tienen que aplicar en el lado del servidor:

Yahoo! Best Practices for Speeding Up Your Web Site

35 consejos (best practices) ordenados en 7 categorías (contenido, servidor, cookie, CSS, JavaScript, imágenes y móvil). Algunos ejemplos de los consejos:

  • Minimiza las peticiones HTTP: cuantos menos ficheros, menos peticiones al servidor, mucho mejor. Por ejemplo, combina los CSS y los scripts en uno solo.
  • Coloca CSS y JavaScript en ficheros externos: cuando un CSS o un código en JavaScript sea empleado en muchas páginas, colócalo en ficheros externos. De este modo, el navegador los podrá guardar en la caché y se reducirá la descarga de infomación.
  • Utiliza GET en las peticiones AJAX: si se usa POST, se envía dos paquetes TCP. Con GET se puede reducir, pero recuerda que las URL tienen un tamaño limitado (sobre 2 Kb).

14 Rules for Faster-Loading Web Sites

Orece los siguientes 14 consejos, algunos muy parecidos a los de Yahoo! (o quizás fue al revés):

  • Rule 1 – Make Fewer HTTP Requests
  • Rule 2 – Use a Content Delivery Network
  • Rule 3 – Add an Expires Header
  • Rule 4 – Gzip Components
  • Rule 5 – Put Stylesheets at the Top
  • Rule 6 – Put Scripts at the Bottom
  • Rule 7 – Avoid CSS Expressions
  • Rule 8 – Make JavaScript and CSS External
  • Rule 9 – Reduce DNS Lookups
  • Rule 10 – Minify JavaScript
  • Rule 11 – Avoid Redirects
  • Rule 12 – Remove Duplicate Scripts
  • Rule 13 – Configure ETags
  • Rule 14 – Make AJAX Cacheable

Estos consejos están escritos por Steve Souders, autor de dos libros sobre este tema: High Performance Web Sites y Even Faster Web Sites.

Exploremos la Web de forma más rápida

Consejos, ejemplos y artículos de Google. También podemos encontrar artículos destinados a dispositivos móviles, como Make the mobile web faster.

Yahoo! YSlow

Yahoo! YSlow es un plug-in para el navegador Firefox que analiza el rendimiento de una página web y ofrece consejos para mejorar su rendimiento. En concreto, en la página web de Yahoo! podemos leer:

YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages. YSlow is a Firefox add-on integrated with the Firebug web development tool. YSlow grades web page based on one of three predefined ruleset or a user-defined ruleset. It offers suggestions for improving the page’s performance, summarizes the page’s components, displays statistics about the page, and provides tools for performance analysis, including Smush.it™ and JSLint.