Banear

sábado, 1 de febrero de 2014

Reflexión en Java

Aunque a veces nos olvidemos de nuestra amiga la "reflexión", de vez en cuando nos puede ser muy útil.

Por ejemplo, cuando tenemos n clases que implementan un método abstracto cuyo nombre de bean configuramos en BD para hacer que la configuración sea sumamente flexible.

Si mañana queremos añadir un nuevo bean y queremos invocar su método, sin necesidad de añadir más código "copypasteado", podemos acordarnos de nuestra amiga la reflexión y hacer algo de este estilo:

GenericProcess instanciaProceso = Util.getBean(paramsEjecucionBatchUtil.getDescripcion());/* Obtenemos una instancia de una clase hija de GenericProcess */
                    Util.getBean(paramsEjecucionBatchUtil.getDescripcion()).getClass().getMethod("doProcess").invoke(instanciaProceso);/* Invocamos el método doProcess */

Minimizando el tiempo de latencia

Lo que queremos es minimizar el tiempo que tarda la petición en llegar al usuario final. Si nuestra aplicación web tiene un carácter más bien local, en general no será crítico (aunque sí recomendable).

Pero si queremos que desde China nos vean rapidito, quizás sería bueno revisar en nuestra aplicación unas cuantas cosillas. Básicamente tenemos que centrarnos en reducir el número de peticiones y minimizar su tamaño, para ello:

  • Minimizar el peso de nuestras imágenes: Si vamos a usar una imagen en tamaño de 32x32, no tiene sentido que tengamos una original de 1024x1024 si no la vamos a mostrar a ese tamaño. Podemos usar esta herramienta: http://www.smushit.com/ysmush.it/ => Reducimos peso peticiones
  • Usar sprites: Esto no es más que una imagen "mosaico" que contiene nuestras imágenes. Cuando queramos usar una de nuestras imágenes contenidas en el mosaico, lo haremos vía estilos indicando su desplazamiento dentro del mosaico. Podemos usar esta herramienta: http://csssprites.org/ => Reducimos número de peticiones
  • Compactar y minimizar ficheros .js y .css. => Podemos usar YUI compressor, que tiene un plugin para Maven (http://yui.github.io/yuicompressor/) => Reducimos número de peticiones y peso global 
  • Uso intensivo de caché de navegador e intermedia. Podemos usar CloudFlare o Varnish Caché. En HTML5 podemos hacer uso también de ApplicationCache (http://www.html5rocks.com/es/tutorials/appcache/beginner/) => Reducimos el número de peticiones
Una vez hayamos tomado algunas de estas medidas (las tres primeras no son costosas y deberían notarse bastante, con latencias significativas), podemos evalúar nuestras páginas con: Google Page Speed y Yahoo YSlow