La lentitud de Asp.net Ajax

Hace un año os contaba mi mala experiencia con las últimas betas y release candidates de Asp.net Ajax, conocido anteriormente como codename Atlas. Pues bien, la versión definitiva, aunque planteaba sustanciales mejoras en estabilidad, usabilidad y consistencia con respecto a las betas, seguía conteniendo los mismos defectos de éstas:

Excesivo tamaño y excesivo número de los archivos a descargar por el navegador, lo cuál se traduce en una lentitud manifiesta a la hora de cargar toda la página. Si a esto le unimos el factor de tener un alojamiento compartido que no destaque precisamente por su velocidad de conexión o, en el otro lado, una conexión lenta (RDSI o módem) o saturada, acabaremos con la paciencia de nuestros valiosos visitantes, quienes probablemente se acabarán yendo a otro sitio de la competencia por aburrimiento, por mucha interactividad y vistosas animaciones que hayamos incorporado a nuestra web.

La causa de esta lentitud, como hemos avanzado antes, se debe a que Asp.Net Ajax genera de dos a tres archivos javascript, los cuáles son, incluso aunque se autocomprimen con Gzip, gigantes incluso para las conexiones de hoy día: 80kb el más grande. A ésto debemos añadir que cada carga individual de archivo produce una ligera latencia, provocándose en el navegador la sensación de que el navegador “descansa” un instante entre cada archivo descargado. Por otro lado, si probamos el proyecto en local, nos dará la falsa sensación de una gran velocidad, debido a que la carga directa desde el disco es muchísimo más rápida que cualquier red de datos, no está sujeta a las mismas saturaciones y la latencia es mínima.

De ahí el asombro de los desarrolladores cuando tras probar con gran éxito y rapidez la aplicación en nuestro querido localhost, desesperamos de lentitud al probarla por primera vez en nuestro servidor de producción con una conexión a Internet real. Las siguientes cargas son más rápidas debido a qu los archivitos gigantes de javascript son almacenados en la caché de nuestro navegador para no tener que descargarlos de la web cada vez. Sin embargo, esto no es solución puesto que ya sabemos que en la web, muchas veces la primera impresión es la que queda y algunos usuarios no tendrán paciencia suficiente para permitir la carga completa.

Si agregamos las funcionalidades adicionales que nos brinda el Microsoft Ajax Control Toolkit, nos saldrá hasta barba de esperar a que cargue la página. Esos estupendos controles facilísimos de utilizar y en algunos casos espectaculares (dropdowns que se autocompletan, animaciones, capas, etc.) nos saldrán, valga la redundancia, espectacularmente caros en cuanto a recursos de red consumidos y tiempo de espera. Incluso con la última novedad que une en un solo archivo todos los necesarios para el Control Toolkit que utilicemos, aunque no une por desgracia la funcionalidad básica, no servirá de mucho. Apenas alivia un poco las latencias.

Como en muchas otras ocasiones, Microsoft tiene el mérito de consiguir lo mismo que otros fabricantes al precio de únicamente requerir el doble de memoria y procesador y ofreciendo un producto que es al final apenas tres ó cuatro veces el tamaño de los de la competencia (sarcasmo).

No puedo menos que cerrar el artículo recomendándoos alternativas mucho más ligeras que la de Microsoft para el mismo marco de trabajo de Asp.Net.

La primera de ellas es Athem.net. Hablaré en detalle de esta magnífica librería en otra ocasión pero simplemente deciros que (al menos a mí) me parece tan fácil de usar como la de MS pero generando unos archivos muchísimo más pequeños y teniendo un rendimiento muy superior. También conviene echar un vistazo a JQuery, si bien no es específica de .Net sino multiplataforma y extremadamente útil y ligera.

Hasta nunca, WebHost4Life

WebHost4Life es el peor proveedor de alojamiento web que he sufrido en años.

Hace unos pocos días, cambié mi proveedor de alojamiento Windows de Godaddy a WebHost4Life. Los motivos para cambiar eran que, a pesar de que Godaddy me daba un rendimiento muy bueno, un precio muy barato y ninguna caída significativa en el sistema, tenía su talón de Aquiles en las nulas capacidades de administración avanzada, permisos y, lo más importante, la imposibilidad de realizar copia de seguridad de la base de datos Sql Server.

WebHost4Life ofrecía por apenas 10$ al mes toda la capacidad de administración tanto del sitio web en Asp.Net como del servidor de bases de datos que necesitaba. Sin embargo, todo ha resultado ser un enorme fracaso. Si estáis pensando en elegir un proveedor en USA, os recomiendo que huyáis de WebHost4Life como de la peste. Ha demostrado ser uno de los peores proveedores. Sus virtudes en cuanto a la flexibilidad en la administración se quedan en nada comparándolas con sus deficiencias:

  • El servidor de base de datos se cae con alarmante frecuencia, dejando mi sitio cada tres por cuatro con un feo error 500 (internal server error)
  • El primer día ya se cubrieron de gloria. Eliminaron mi sito web completamente por error.
  • El tiempo que tarda en cargar la portada la primera vez que accedo a mi sitio en un momento del día es inadmisible, oscilando entre los 15 y 30 segundos. Sin duda estoy perdiendo negocio y credibilidad. Cuando toda mi competencia y la mayoría de los demás sitios cargan instantáneamente, ningún internauta tiene paciencia para esperar a que empiece a cargar mi web, y con toda la razón del mundo. Yo mismo soy internauta antes que webmaster. Si veo que un sitio no me carga inmediatamente, accedo al siguiente en la lista de resultados o miro la página en la caché del buscador.
  • Las respuestas del soporte técnico a este problema son que no hay ningún problema y que a ellos les carga en seguida. A lo mejor viven en una dimensión diferente de la mía y tienen una noción del tiempo distinta porque si no, no me lo explico.
  • La velocidad de descarga de la red es en algunos momentos muy lenta. Los archivos estáticos como los gráficos a veces descargan con mucha tranquilidad.
  • El siguiente problema parece de juguete en comparación con los otros pero es un detalle más sobre la poca calidad del servicio: el panel de control da errores de Asp con bastante frecuencia. Además, hay secciones que directamente no funcionan y enlaces rotos. Esto último es muy significativo y denota que no son demasiado cuidadosos en general.

Como tienen una garantía de devolución en caso de no estar satisfecho antes de 45 días, voy a ejercer mi derecho. Espero que no les entre amnesia y me digan que Santa Rita, Rita, jarl.

De momento ya he contratado alojamiento en otra compañía que tiene mejores credenciales y ha sido premiada en varias revistas, aunque me sale casi el doble de caro, pero ya he aprendido la lección:

Moralejas: lo barato sale caro. No dejes que una parte tan importante de tu negocio como tu sitio web dependa compañías semidesconocidas.

Actualizado: Domingo 25 de Febrero, 00:00 horas. Hoy por fin he migrado todo mi sitio al nuevo alojamiento (que no os digo de momento hasta que no esté totalmente seguro de que es fiable para no hacerle publicidad gratuita) . Sólo llevo unas horas con este proveedor y menuda diferencia se nota. Mi web ya parece otra cosa. Bye, bye, WebHost4Life. Hasta nunca.

Por qué no me acaba de convencer Asp.net Ajax

Hace unos pocos días, por fin Microsoft publicaba la versión definitiva de sus extensiones Ajax para Asp.Net. Sobre el papel parecía algo realmente impresionante. Controles muy dinámicos e interactivos perfectamente integrables y comunicables con el servidor, relativa facilidad de uso, drag and drop, multi-navegador…

NOTA IMPORTANTE: La crítica que expongo a continuación está basada en mi experiencia con las versiones previas y beta. Es posible que los problemas que menciono desaparezcan o se mitiguen en la versión definitiva.

Todo esto es indudablemente cierto. Pero como con todo en este mundo, la perfección no existe, y Asp.Net Ajax tiene que un buen montón de problemas que resolver. El más importante de todos, que me preocupa especialmente y que hará que seguramente lo desinstale de mi proyecto, es que es lento, pesado y consume muchos recursos del servidor. Además, y esto es muy preocupante, devuelve un código diferente a los navegadores no soportados, entre los que se incluyen los robots de los buscadores. En otras palabras, Asp.Net Ajax hace cloaking.

El cliente carga demasiados archivos Javascript y eso se nota aunque tengas un ADSL de 4 megas. Estos archivos son preparados de forma dinámica por el servidor y a veces la legendaria velocidad de Asp.Net se convierte en una gran mentira por el tiempo que tarda en procesarse y devolver al cliente.

Es una pena porque Asp.net Ajax ha cumplido todo lo que prometía pero a un precio demasiado elevado. No me puedo permitir el lujo que mi página principal tarde 20 segundos en empezar a cargar sólo para tener unos dropdowns que se autocompletan, que no funcionan ni de broma en navegadores antiguos ni con Javascript deshabilitado.

Microsoft había avanzado mucho en las tecnologías de Internet con Asp.net. De hecho, sigue siendo una plataforma excelente. Muy lejos queda ya el abominable Frontpage, con su código HTML inflado inútilmente y siempre incorrecto. Sin embargo, con Asp.net Ajax, se ve ligeramente la sobra de FP y de aquello que hizo que Microsoft fuese el ejemplo a evitar en cuanto a la web: demasiado código innecesario, elevados tiempos de carga y capacidades incompatibles con los estándares.

Hoy mismo voy a probar la versión definitiva. Ya os contaré si las cosas cambian a mejor.