¿Cómo optimizar tu sitio web? (Parte 2)

February 22nd, 2012

Para optimizar un sitio web a fondo, a priori, hay que entender realmente cómo funciona un navegador web (browser). Internamente, un browser se compone de varios componentes con distintos objetivos pero trabajan en conjunto, uno debería saber cómo es todo este proceso para entender dónde uno puede hincar el diente para aprovecharlo al máximo en su sitio web.

A muy alto nivel y sin entrar en detalle por ahora, podemos describir el proceso en forma abstracta desde el “enter” del usuario hasta la visualización completa de la página, de la siguiente forma:

  1. Networking: Todo lo relativo a la resolución de nombres, conectarse al servidor, generar el pedido HTTP y esperar la respuesta.
  2. Parser HTML: A esta altura, el browser detecta el charset y va parseando el html en ‘pedazos’ de 8KB, generando una estructura intermedia llamada DOM (Document Object Model), que es lo más fidedigna al código html.
  3. Parser CSS/JS: Parsea tanto el código CSS como el código JavaScript. En esta fase se genera el Render Tree, es la representación visual del documento, esta acción se llama Render Tree Construction.
  4. Style Computation: El Render Tree requiere las propiedades visuales de cada objeto, es en este punto donde se matchea los datos de la CSS con el DOM. Siempre el browser siempre tiene un CSS por defecto, lo cual, siempre hay algo para matchear. Este es un proceso complejo y pesado, ya que el matcheo es una tarea que consume mucha CPU,  por ende, Firefox lo agrega dos tree para alivianar la tarea, los arboles son: Rule Tree y Style Context Tree.
  5. Layout: Cuando se haya terminado de realizar el render, todavía no se tiene las posiciones ni los tamaños de los objetos. El cálculo de estos valores es lo que se llama layout o reflow. También es un proceso caro, lo cual se trata de minimizarlo, como escribí algo en mi post anterior sobre reflow.
  6. Painting: Este es el último punto, donde el browser se para en la raíz del árbol y recursivamente con los datos exactos de la etapa anterior (posición y tamaño), invoca a su método “paint” para desplegarse en la pantalla.

Ahora que sabemos lo que realiza un browser, iremos explicando qué se puede optimizar en cada uno de las etapas.

Algo que no mencioné, y es algo importante a definir es, cuándo hablo de optimizazión… ¿qué optimizo? Aquí puede haber varias respuestas si vamos al detalle técnico, pero la idea que quiero dejar es: dar al usuario la sensación de que la página va “más rápida”.

Dicho esto, seguiremos más adelante con otro post con más info. para compartir. Cualquier crítica es bienvenida!

¿Cómo optimizar tu sitio web? (Parte 1)

February 21st, 2012

Algo muy divertido, para mi, es optimizar un sitio web. Hay muchos puntos para hablar sobre el tema, pero uno importante es saber el concepto de Reflow. Reflow es el proceso donde el browser calcula la posición, todo lo relativo a la geometría de los elementos del DOM, necesario para la presentación visual. Notar que hasta que este proceso no se complete, no se muestra ningún elemento al usuario!

Cualquier cambio en el DOM, puede generar un reflow, es decir recalcular casi todo el árbol (recalculando todos los elementos padres), lo que causa un uso intensivo de CPU. Cuando el browser hace esto, utiliza operaciones bloqueantes, lo que conlleva a una mala experiencia al usuario, dandole una sensación de lentitud.

Entonces, la primera idea que salta a la vista, es minimizar la profundidad del árbol para gastar poca CPU, en caso que se haga un reflow.

Otra idea, es evitar selectores CSS complejos para que el pattern matching con los elementos no sea más costo de lo que actualmente es.

Espero que haya servido de algo… :)

 

Salió Apache httpd 2.4 !!

February 20th, 2012

Salió hace poco la nueva versión del servidor web de Apache Foundation (a.k.a httpd): 2.4.1

Tiene varias cosas interesantes, pero a resaltar algunas:

1) Varios módulos MPM pueden ser compilados y cargados dinámicamente (claro, un módulo a la vez).
Antes podía ser compilado uno solo por binario! Lo que resultaba tener 3 binarios distintos si querias probar distintos módulos MPM, por ejemplo httpd.eventhttpd.prefok.

2) Un nuevo módulo deja de ser experimental: Event MPM. Este módulo es totalmente asíncrono, trabaja de forma parecida a nginx. El prósito es evitar el problema del “KeepAlive”, sucede cuando existen muchas conexiones en estado KeepAlive, y cada conexión es tratado por un hilo del proceso. Lo cual desperdicia recursos si el cliente “tarda” en enviar la prox. petición.

3) La directiva LogLevel es soportada en nuevos contextos, por módulos y por directorios.

4) El timeout del KeepAlive se puede expresar en milisegundos.

Esto es a nivel del core, también se agregan muchos nuevos módulos, a nombrar:

1) mod_heartmonitor + mod_lbmethod_heartbeat
2) mod_ratelimit
3) mod_sed
4) mod_proxy_html
5) Entre muchos otros, y muchas mejoras a los ya existentes.

Ahora falta probarlo!! :)

XSS en la página oficial del CEI

January 9th, 2012

Uno por naturaleza es muy curioso, lo cual, puede descubrir (“sin querer”) cosas como estas:

http://www.cei.fing.edu.uy/notas/archivo.php?search=bydate&day=12&month=1&year=%3Cscript%3Ealert%28%27XSS%27%29;%3C/script%3E
:)

Pequeña prueba sysadminiesca (bash)

November 21st, 2011

Todos los días se aprende algo nuevo… a ver, si alguien esta atento.. ( y me lee :P )

Piensen qué debería devolver este comando, y luego ejecutenlo….

cat /etc/passwd | read linea; echo $linea

 

….comentarios?

Como ir de Repente a Kagar

October 3rd, 2011
Como ir de Repente a Kagar

Como ir de Repente a Kagar

Samba 3.0 a 3.5

September 23rd, 2011

En mi actual trabajo, tuve la tarea de migrar de un Samba 3.0 a 3.5.

Entre varios líos diversos, el que quiero hablar ahora es sobre el formato de la DB. Menuda sorpresa me llevé.

Algún administrador de Samba ya debe saber lo que voy a escribir, pero igual lo hago para contextualizar el panorama.
Para que Samba y MS operen, Samba implementa algunas funcionalidades extra.
Particularmente, el mecanismo que usa para mapear los identificadores locales en las dos plataformas, los SIDs en Windows y los UIDs/GIDs en Linux.
Esta claro, que para operar sobre el mismo recurso en una plataforma u otra, debemos identificarlos de manera única. Para esto, samba tiene varias formas (dependiendo de la configuración, etc) de hacer este “mapeo” en los identificadores de Windows y Linux. A este mapeo, Samba lo llama IDMAP.

Como mencioné, hay varias formas de hacer este mapeo. La configurada es la de Winbind/NSS con una Db local en formato TDB (Trivial Database). El servidor a actualizar, actúa como file server y no tiene cuentas locales. Por lo cual, Samba obtiene las credenciales desde el controlador de dominio.
Para esto, Samba reserva un espacio (rango) de UIDs y GIDs para realizar el mapeo con los SIDs.
Algo que me enteré en el testeo de la migración, fue que el mapeo entre SID y UID/GID no es determinístico! Depende del orden en que el controlador devuelva los datos (!) :S
Recordar que el control de acceso a los archivos/directorios se hacen en base a estos UID/GID. Por lo que, si el mapeo se pierde, por alguna razón cualquiera, me quedé sin control de acceso, o peor aún, podría pasar que se entrevere todo.. caos total.

Yendo más al grano y lo más destacable: al actualizar Samba (yum install samba3x), se rompe la DB con el mapeo! :O ¿wtf!??

Parece que cambiaron el formato de la DB, antes se usaba TDB, y ahora LDB (L de light). Un nuevo formato más “LDAP-like”, más rápido, “más mejor” con todos los chuchis, como siempre…

Bien, pero… y mi DB anterior?? parece que samba no se da cuenta que existe un DB y no la migra :S
Debe ser porque se instala como un paquete aparte? y no es parte de un ‘update’ formalmente hablando? No lo sé.

Al final, lo que tuve que hacer fue:

# net idmap dump /var/cache/samba/winbindd_idmap.tdb > /root/idmap.backup
[...]
Paso i) Eliminar samba3.0
Paso i+1) Instalar samba 3.5…
[...]
# net idmap restore /root/idmap.backup

Es decir, exportarlo e importarlo.

No estoy muerto

February 5th, 2010

Hola, hola… sí, todavía sigo vivo. Acá estoy escribiendo para mostrar que no me olvidé de mi blog :)

En cualquier momento, se viene un cambio….

Flasheando mi WRT54GL v1.1 !!!

July 19th, 2008

Exactamente, le cambié el firmware a mi Linksys!

Que pasos segui?

Que cuidados hay que tener?

  • El único cuidado que tuve fue…
    • Primero instalar el ‘mini‘ y después el ‘std
    • Después que instalé el ‘miniesperé 5 minutos antes de cliquear en “Continuar

Realmente la interfaz web esta mucho mejor, y trae muchisimas funcionalidades extra! Además de la flexibilidad de poder instalar cualquier paquete que quieras! :)

Los años pasan…

March 21st, 2008

Pasa el tiempo y uno se va poniendo cada vez más viejo va aprendiendo los mensajes de la vida misma.

Cuando uno nace es “igual” a los otros recién nacidos como uno.. en el correr de la vida estos caminos van tomando bifurcaciones y quedan en el camino, otros tratamos de seguir.

Las señales que le da la vida a uno son inrefutables. Paso a explicar.
Cuando somos todos niños no pasa nada.. “todo bien” ..todo es alegría y diversión. Cuando pasamos a la etapa de la juventud (etapa liceal) aparecen las “novias”, esas cosas raras que no muchos tienen a esa edad… pero se ve que muchos transitan por ese momento de estupidez :P
Después viene la etapa de la facultad, a esa altura terminamos el liceo (la mayoría, algunos quedaron por ahí varados en el camino) y también en la misma facultad algunos se van quedando y tratan de conseguir algun oficio para insertarse en el mercado laboral. En esta misma etapa, se llega (generalmente) a un nivel de “novias maduras”, es decir.. tenemos pareja estable, mientras estudiamos y tratamos de recibirnos. He aquí la cuestión, donde quería llegar.
En esta etapa de la vida, algunos conocidos/amigos empiezan a recibirse… y algunos muy pocos (en mi caso, uno solo y por eso la causa de estas líneas) se casan con la novia de hace ya muchos años.

Si, si… llegó el momento que un amigo se casa.. (y no estoy hablando del verbo caZar!…). Lo primero que me viene a la mente en un momento así es… ¿y yo? Pues claro, cuando todos tus amigos tenian trabajo, vos eras el próximo a tener trabajo.. eras el último, en otros casos no, eras del montón que conseguia novi, al mismo tiempo que tus amigos.
Esto es una pregunta sin respuesta, yo todavía no me voy a casar ni cazar. Mejor, cambio la pregunta a esta: ¿Quién será el siguiente en casarse? ¿Quién es el próximo en la lista? uff…

Al fin y al cabo, casarse no es tan malo.. no hay porque asustarse.
Ahora que me pongo a reflexionar un poco más, creo que me tengo que asustar cuando alguno de mis amigos se muera…. (espero no ser el primero :P )

Slds.-

PD: Si, vieron? Dos post en un día!!!!
PD-2: JJ y MJ: Felicidades!!!! :D (¿para cuando el hijo? je, perdón, pero cuando alguien se casa se pregunta eso, viteh’ :P )