Rendimiento de los scripts PHP

¿Qué se ejecuta más rápido? ¿una sentencia de if anidados o un switch? ¿es mejor usar comillas simples o dobles para trabajar con cadenas? ¿foreach, for o while? Estas preguntas nos las hemos podido hacer, o no, alguna vez trabajando con PHP. Y la respuesta es que si hay diferencias entre usar un código u otro. Muy posiblemente si trabajamos con sites pequeños no notaremos diferencia, pero cuando se trabaja a mayor escala el ahorro en el rendimiento pasa a ser fundamental.

En la página www.phpbench.com hicieron distintas pruebas y sacaron conclusiones de qué instrucciones son más rápidas o tienen un mejor rendimiento al ejecutarse. La instrucción es la misma, pero la ejecución es más óptima.

Estas son algunas conclusiones que ya comentaron en otros blogs como sentidoweb.com:

  • Realizar un foreach es siempre más rápido, y si no recuperamos la clave del array mejor aún.
  • Un for es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos, y que sizeof es más rapido que count.
  • Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia ($alias = &$aSingleDimArray[$i]).
  • No es más rápido crear un objeto como referencia ($obj =& new SomeClass();).
  • if es más rápido que switch/case, y ligeramente más rápido es usar == que ===.
  • Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.

Si quieres hacer tus propias pruebas con tu código puedes crear una pequeña clase para hacer el cálculo, como encontré en kickbill.com:

Política de Cookies

¿QUÉ SON LAS COOKIES?

Según la Wikipedia: Una cookie (o galleta informática) es una pequeña información enviada por un sitio web y almacenada en el navegador del usuario, de manera que el sitio web puede consultar la actividad previa del usuario.
Sus principales funciones son:

  • Llevar el control de usuarios: cuando un usuario introduce su nombre de usuario y contraseña, se almacena una cookie para que no tenga que estar introduciéndolas para cada página del servidor. Sin embargo, una cookie no identifica solo a una persona, sino a una combinación de computador-navegador-usuario.
  • Conseguir información sobre los hábitos de navegación del usuario, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.

Steve Jobs

Aunque en este blog no he tratado muchos temas fuera del código y el desarrollo web quería hacer una pequeña mención a un gran personaje del cambio de milenio. Steve Jobs.

Después de varios años sufriendo cáncer de páncreas y de retirarse como CEO de Apple hace poco más de un mes, Jobs deja este mundo dejando un gran legado tecnologico. Su muerte ha recorrido el mundo entero y muchas personalidades de distintos ámbitos han querido honrar su memoria de alguna forma. Entre los más destacados se encuentran Barack Obama, Bill Gates, Steven Spielberg o Mark Zuckerberg.

Todas las declaraciones se despiden de él como una de las personas que han cambiado el mundo, a mejor. Lo que está claro es que su pasión por hacer bien las cosas, por llegar a donde los demás no han llegado, sus ganas de superación y la búsqueda de la perfección, le ha hecho brillar y prácticamente convertir en oro todo lo que tocaba.

La noticia saltó a la luz en la página principal de Apple, el espacio que siempre han dedicado a enseñar sus nuevos productos, donde los fieles de Apple descubrieron el iPod, el iPhone o el iPad sin olvidar a los portátiles u ordenadores de sobremesa. En ese espacio ponían su peor anuncio. He hecho una captura para la posteridad.

Aunque es posible que no haya blogger que no haga hoy una referencia a este acontecimiento, no quería dejar de hacerlo. Para mí es un antes y un después en la tecnología.

Sit tibi terra levis

Convertir caracteres especiales a entidades de HTML en PHP

El lenguaje HTML, dependiendo la codificación que usemos, no permite usar caracteres látinos como los que se muestran en esta tabla.

Carácter Entidad HTML Carácter Entidad HTML
á á Á Á
é é É É
í í Í Í
ó ó Ó Ó
ú ú Ú Ú
ü ü Ü Ü
ñ ñ Ñ Ñ
¡ ¡ ¿ ¿

En ocasiones no podemos asegurar que codificación se va a usar donde esté contenido el texto como en algunos CMS o al maquetar emails, por lo que se decide convertir estos caracteres a las entidades especiales que les corresponde.

Para hacerlo de forma automática en PHP usaremos la función htmlentities, esta función convierte a entidades especiales HTML los caracteres latinos. Si lo que queremos es crear un formulario para copiar este texto transformado sin mirar el código fuente podemos hacer una doble llamada a la función:

Mejorar la carga de imágenes con CSS y sprites

Los diseños de nuestras páginas suelen acompañar a los textos una pequeña imagen o nuestros menús requieren que los items sean una imagen y que al hacer roll-over una  cambie por otra u otras funcionalidades. Al maquetar podemos hacer que cada item tenga una imagen asociada, esto hace que durante unos segundos el hueco del menú quede vacío durante el roll-over, esto ocurre porque las imágenes están separadas en distintas imágenes y cada una significa una carga independiente del resto, esto afecta a que la experiencia de usuario no sea la deseada y que el servidor sufra más llamadas innecesarias.

Para solucionar estos problemas se usan los sprites en css. Los sprites son simplemente imágenes de gran tamaño que contienen imágenes más pequeñas. Este concepto viene de los antiguos videojuegos, donde los personajes se movían gracias a estas imágenes, en la imagen se contenía al personaje en todas sus posiciones, luego, mediante código hacemos que esas imágenes parezcan movimiento. Pongo un ejemplo de como es el sprite con los movimientos de Super Mario 3.

Con este concepto vamos a ver como llevarlo a web. Lo que hacemos es crear una imagen con los distintos iconos que tendrá la web o con cada item del menú y su respectivo roll-over, en el siguiente ejemplo tenemos 4 items de menú el lado derecho corresponde al item en reposo y el lado izquierdo representa a cada item activado:

De esta forma hacemos que el servidor entregue una sóla imagen y nuestro visitante también, lo único que tendremos que hacer es cambiar la posición de fondo de la imagen para que se vea cada item donde debe.

También podemos usar los sprites para todos los iconos o bullets que encontramos en la web. En la página de youtube.com, usan la siguiente imagen que contiene a las imágenes que se usan como iconos o fondos en la web:

En este ejemplo, todos los items que van a usar una de esas imágenes de fondo tienen por css la orden de que su imagen de fondo sea esta. En el ejemplo que os voy a poner queremos que todos los vínculos tengan una imagen de fondo.

Así todos nuestros vínculos van a tener la misma imagen de fondo y un hueco a su izquierda para que la imagen se vea sin que el texto aparezca encima, también dejamos una posición genérica para los vínculos. Ahora vamos a diferenciar entre vínculos.

Con esto lo que queremos ahora es que los vínculos que sean de media muestren de la imagen de fondo que les hemos dado la que está a 0px de la izquierda y 25px del top de la imagen. A continuación un ejemplo mejor desarrollado:

Código

En funcionamiento:

Firefox 3.5 el más usado según StatCounter

StatCounter, uno de los sistemas de medición de visitas más conocidos permite ver estadísticas globales. Filtrando la búsqueda por versión de navegador usado y las estadísticas de este año, podemos ver que la versión 3.5 de Firefox ha empezado a encabezar la lista de los navegadores más usados:

Source: StatCounter Global Stats – Browser Version Market Share

Como podemos observar IE7, que tenía un gran monopolio en este listado, ha tenido una grave caída y que IE8 está experimentando un muy buen ascenso igualándose casi con Firefox 3.5. IE6, pese a sus malísimas características, tiene un descenso constante pero muy lento (cuándo conseguiremos quitárnoslo de en medio?), curiosamente entre el 11 y 17 de mayo tiene un pico de popularidad que Firefox 3.0 sintió.

Si cambiamos la vista a la de barras podemos ver que Safari y Chrome están en plena pelea que aún gana Safari, aunque de esto no le queda mucho al navegador de Apple, ya se dice que la pelea la está ganando ahora Chrome, podemos comprobarlo cambiando las fechas en el filtro, este nuevo año el navegador de Google le saca un 2% a Safari.

Visto en: alt1040

Google goggles, una imágen vale más que mil palabras

Google no deja de sorprendernos, ha lanzado una nueva aplicación para su sistema operativo Android con la que con hacer una simple fotografía puedas obtener muchas más información.

¿Queires buscar la dirección de una tarjeta y no quieres escribirla? hazle una foto, la aplicación obtendrá la info, te hará una búsqueda en Google de la dirección, separará el email, los teléfonos y te dará el link a Google Maps. Y si quieres podrás añadir este como un nuevo contacto :D

goggles_contact

¿Un amigo tiene un libro que quieres saber donde comprarlo? ¿Quieres más info de un edificio o un monumento? ¿Quieres saber a que empresa le pertenece ese logo? Haz una foto la aplicación hará el resto :)

Visita el sitio de Google Goggles.

Puedes conseguir la aplicación para tu Android en el Market, la aplicación funciona a partir de la versión 1.6 (Donut o Eclair).

Estilo de inputs basados en su tipo con CSS

Muchas veces cuando le doy estilo a un formulario utilizo la etiqueta input para dar un estilo general a todos los elementos del formulario, pero estos elementos comprenden todos los input, incluso el botón de submit o los checkbox o radiobutton.

Para evitar darle un borde, por ejemplo, a los radiobutton daremos el estilo de otra forma (en IE6 esta selección de elementos no es válida):

De esta forma podemos definir que estilo dar a cada tipo de input y nos ahorramos poner clases que definan las CSS de cada elemento en el HTML. Hay que tener presente el detalle de que al dar el estilo sólo a las cajas de texto y definamos input[type="text"] tenemos que dar el mismo estilo a los input tipo password (input[type="password"]), ya que también son cajas de texto. También podríamos aprovechar a dar el estilo a los textareas (recuerda que es uno de los elementos que no heredan, por ejemplo el font-family ;)).