Contenido

Un mal llamado script.aculo.us

19 Mar

+ 32

Los blogs son la revolución de Internet y últimamente se están convirtiendo en una plaga que amenaza con crecer más y más, pero esto ha cambiado mucho desde los principios (como comenta nuestro amigo Daniel).

Daniel comenta que los blogs están mutando, y que parece que la cantidad de herramientas que tenemos para nuestros sidebar hacen de nuestros blogs algo cargante e incluso marea a los visitantes. Una forma de hacer esta zona algo más clara y disminuyendo la cantidad de información (abrumadora) es el uso de efectos javascript como acordeones o deslizantes. Para ello podemos usar miles de librerías, pero nunca nos paramos a pensar cual es la que más nos conviene.

En mi caso, me inicie con script.aculo.us, una librería fantastica, con miles de efecto y muy facil de usar, realmente es algo asombroso lo que se puede llegar a hacer con ella, pero ¿a que precio?.

Un poco de teoría de redes:

La programación web se divide en 2 capas, servidor y cliente. Llamamos servidor a la capa en la que las operaciones se transmiten y se ejecutan dentro del servidor, construyendo la respuesta para enviar al cliente la página que nosotros vemos en nuestro navegador. Y cliente al navegador, donde se ejecutan aplicaciónes como javascript, CSS…

El problema reside en que script.aculo.us es una libraría en Javascript, y como hemos explicado el Javascript se ejecuta en el cliente, por lo tal ha de viajar al cliente, a cada usuario. La librería sola, ocupa 76kb, sin contar la página, imagenes y ficheros de estilos. Esto por desgracia hace que quizas nuestra web en total pese más de 100kb facilmente, lo cual me parece algo realmente exagerado.

Teniendo en cuenta esto, hagamos cuentas. 100kb*N(visitas) = Muuuchos KB / 1024 = menos MB.

En definitiva, cargamos mucho el tiempo de carga de nuestra página. Es cierto que con las conexiones de hoy en día 100kb no son nada, pero imaginar una web como Microsiervos con una web de 100kb la cantidad de información que debe estar transmitiendo por minuto.Esto obliga a tener que buscar servicios con mayor ancho de banda, con su consecuente aumente de precio.

Alguno ejemplos de sobrecarga de web he visto en los tiempos de carga de Vidablog y Proletarium, que usan esta librería. Yo he notado diferencia desde que he dejado de usarla.

Script.aculo.us, es una gran librería, pero tienes demasidas opciones y efectos que no usamos, y eso a mi punto de vista es basura. Por ello tenemos otras librerías con las que podremos hacer cosas muy similares en mucho menos espacio.

Alternativas
moo.fx
jquery
wz_dragDrop 
wz_jsGraphics 
MochiKit 
overLIB 

Gracias por las alternativas, les daré una mirada. Por mientras ya he bajado de 55 sec a 39 sec eliminando varios estilos y js realmente innecesarios.

Lo suyo para estas librerias seria currarse una forma que solo se cargaran las que se necesitaran, o cargarse en el momento de pedirlas.

Hay que andar con cuidado como tu dices, porque sacrificar un peso por un efecto acordeon tiene mucha tela.

Si pues según esa utilidad me llevo el premio a web de más peso. xDD

¿Va lento mi blog?

Show, no veo que tengas muchos efectos, ¿que le has puesto?
Por que según esto te tarda 101 segundos en cargar!!!!!

Pues yo no puedo estar más en desacuerdo, pues la gran mayoría de los lectores de mi blog, y casi todos los que a mí me interesa que me lean, tiene ADSL básico en casa como mínimo, 1 Mb/s que se convierte en unos 700 Kb/s. Haciendo los pertitentes cálculos:

(700 Kb/s) * (1000 b/Kb) = 700.000 b/s
(700.000 b/s) / (8 b/B) = 87500 B/s
(87500 B/s) / (1024 B/KB) = 85,45 KB/s

b = bits, B = bytes

Respuesta: 85,45 KB/s

Si la librería pesa 76 kB, el usuario tarda menos de 1 segundo en cargarla, con lo que no es para tanto. Y eso en España, que en el resto de países desarrollados del mundo esa transferencia es muchísimo mejor. Sí, será una pérdida todo ese código que no se utiliza, pero scrip.aculo.us NO es la razón por la que una página se ralentiza excesivamente.

Antes que mirar ahí, échale un vistazo a los plugins que tienes instalados, como por ejemplo PopStats, que causan gran parte de esa pérdida por ser código PHP que realiza llamadas a base de datos MySQL, lo cual requiere tiempo, aunque muchos nos merece la pena por los beneficios que nos traen estos plugins.

Por otra parte, las librerías que mencionas son excepcionales todas, pero la mayoría te ofrecen un ahorro ínfimo que no se nota practicamente a la hora de la carga.

Es mi impresión.

Luis, tienes razón en que las conexiones de los usuarios Españoles de media es ADSL, y no es lo mismo que las antiguas conexiones.
Lo que me refiero es que esos 85,45kb has de multiplicarlo por el número de conexiones simultáneas que tengas, asi ya obtenemos un tamaño mucho mayor. Sin contar el texto, las imagenes y además las llamadas a BD.

Por eso que tu web pese 323kb, que ya no son los 85kb del principio.

De todas formas, siempre dependerá del servidor y franja horaria en la que te conectes, dependiendo de lo colapsado que esté el servidor.

Las llamadas MYSQL, sobre tablas medias (las grandes son un poco especiales) son un mal menor y necesario, ya que al hacerse generalmente sobre el mismo servidor el tiempo de respuesta suele ser algo insignificante. Pero tambien influyen ;)

Así sólo cargas lo que se necesita.
[script src="scriptaculous.js?load=effects,dragdrop" type=...][/script]

Echo off, conocía esta opción y la he sado en algún theme. Pero continuo pensando lo mismo.

Por ejemplo, si cargas effects para un simple FadeOut, estas cargando todos los otros efectos que no usas para nada…. Y son ficheros muuuuy grandes.

He estado mirando las alternativas. Y algunas de las opciones estan bastante bien. Además de ser prácticas.

He estado mirando moo.fx y tiene una pinta bastante buena. Aunque he echado de menos las demos que se pueden encontrar en los otros sites.

¿Hay en algún sitio de moo.fx, donde se pueda ver demos de las diferentes funcionalidades ?

Bueno… yo soy más de la opinión de 5. Además hay que contar con la caché de los navegadores.

En cualquier caso hay que pensar que cada vez más se demandan contenidos visuales con efectos de todo tipo y es lógico que también se necesiten recuros mayores (como el ancho de banda por ejemplo). Pero en eso consiste un poco todo este mundillo no?. ;-)

Un saludo.
Pablo

Si análizas el trafico con algun sniffer o proxy HTTP vas a ver que el request para ese .js lo transfiere únicamnete la primera vez. Después de eso queda en el caché del browser y lo único que hace es verificar si hay una versión nueva en el server.
A lo sumo lo está transfiriendo una vez por usuario por sesión.

@Diego: Estoy de acuerdo, pero si tienes 1.000.000 de usuarios, estás enviando 200kb de javascript a cada usuario, lo que hace la friolera de 200.000.000kb. La transferencia se resentiría :D

Amigo, esto refleja no mucho conocimiento de la cuestión. Los js se transfieren solo la primera vez, luego, sale del cache. Con lo cual tu teoria, al tacho!
Es mas, te diria que el problema pasa por otro lado! Es la cantidad de cosas que se le obliga a hacer al navegador del lado del cliente. Y en eso, en ancho de banda no tiene nada que ver. Quizás deberias considerar actualizar tu PC!

@joselo: Si tienes 100.000 visitas únicas diarias estás enviando casí 200kb cada una de las 100.000 visitas que entran… matemática básica.

Saludos, gracias por comentar.

No se en que versión te basastes para escribir este artículo. Pero a día de hoy las librerias de scriptaculous se pueden cargar de forma que sólo se usan las que se necesitan en cada página. Otra cosa es que por perrería la gente no ponga sólo las necesarias.

También existe la opción en el servidor para que estos archivos JS se cacheen, también disminuye el tiempo de respuesta, con lo que esos k’s perdidos de los que tanto haces incapié solo se pierden la primera vez que entres en la página y no “n” veces.

Y esto ya gracias a prototype, te permite realizar un “Ajax.request” lo cual también reduce la carga de una página ya que solo actualiza una parte de ella. Pero usando scriptaculous también se puede cargar toda la página ocultando ciertas capas y mostrarla solo cuando sea necesario ahorrando el coste de transferencia de una recarga de página.

Y por último Google ha incluido estas librerias en sus servidores ver más aquí ->
http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure Y esto aún proporciona muchisimas más ventajas aún si quiera y desvirtúa complemtamente tu artículo.

@Deathtime: ¿has leido los comentarios? ¿te has molestado en buscar? ¿O simplemente has llegado a soltar lo primero que te pasa por la cabeza?

Te explico (por enésima vez), por mucho que solo se descargue la primera vez y que el navegador lo reutilize, bla bla,… si tienes 1.000.000 de visitas únicas, estás descargandolo 1.000.000 de primeras veces, lo que a nivel de servidor implica un alto rango de transferencia, lo que en la mayoría de servidores se traduce en dinero.

El que puedas elegir que porciones de script.aculo.us quieras o no, no soluciona los 80kb (mínimos) de Prototype. Además, si has echado un vistazo al código de script.aculo.us verás que casi todo está relacionado y si como mínimo necesitas, además, Element lo que significa 15kb más.

Osea que como mínimo estarías sirviendo 95kb por visita única…

Evidentemente (2 años despues de este post) Google se dió cuenta de que es la única empresa que puede hacer frente a dicho tráfico, así que lanzó el Google Ajax Libraries.

Saludos

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo