Optimizar Mootools en tu web III
Joomla! > 1.6: plugin para desactivar MooTools
Ya hemos visto lo sencillo que puede resultar desactivar MooTools. Después de haber explicado en el anterior artículo el código, ahora voy a crear un plugin para Joomla! > 1.6 que podrás modificar a tu gusto. En estos 3 tutoriales hemos conocido un poco más la carga de estas librerías. Ahora ya sabes cómo se cargan en el encabezado de tu sitio y cómo las podemos eliminar. Cuando ya estaba usando el plugin y terminé de escribir este tutorial descubrí un fallo que me ocurrió y que explico en este tutorial.
Yo creo que los puntos más importantes para la desactivación de MooTools son los siguientes:
- Back-end:
- En el back-end (zona administrador) lo voy a activar siempre.
- Front-end:
- Para los usuarios visitantes no registrados, lo voy a desactivar siempre.
- Los usuarios registrados tienen que tenerlo activado, por ejemplo para editar artículos.
- Puedes usar las vistas: featured, category, categories y article. Te puedes preguntar ¿por qué? Todos utilizamos componentes de terceros en nuestro sitio. Imagina que usas un componente para crear una cuenta de usuario y ese componente usa MooTools... ¡Se quedaría desactivado para usuarios no registrados! ¡no se podrían registrar!... imagina lo mismo para otros componentes. Por este motivo pienso que es importante usar las vistas para activar o no MooTools. Seguramente se pueda hacer de otra forma sin usar las vistas, es lo primero que se me ha ocurrido.
- Crear compatibilidad con Google AJAX Libraries y con el plugin que vimos en el artículo anterior. Esto es posible ya que dicha librería contiene la palabra mootools. Con esto conseguiremos que al activar MooTools lo hagamos con el archivo de Google y disminuya la carga de nuestra web.
El código del plugin
El código final del plugin, explicado todo en el anterior artículo, es el siguiente: (este código ya no es el original, pero la idea es la misma.)
function onAfterDispatch() {
$app = JFactory::getApplication();
$vista = JRequest::getCmd( 'view' );
$usuario =& JFactory::getUser();
if ($usuario->guest && !$app->isAdmin())
{
if (($vista == "featured") || ($vista == "article") || ($vista == "category") || ($vista == "categories"))
{
$documento = JFactory::getDocument();
$encabezado = $documento->getHeadData();
foreach($encabezado['scripts'] as $direccion=>$tipo)
{
if (strpos($direccion, 'mootools') !== false || strpos($direccion, 'js/core.js') !== false || strpos($direccion, 'caption.js') !== false)
{
unset($encabezado['scripts'][$direccion]);
}
}
$documento->setHeadData($encabezado);
}
}
Como puedes ver el código es muy sencillo y he usado el segundo código que expliqué. Repito que posiblemente no corresponda con el del plugin, ya que lo actualizaré.
Perspectiva de futuro
Realmente programar este plugin ha sido muy sencillo porque no tiene casi código (¡bueno!... realmente programarlo, testearlo y escribir los artículos ha llevado unas horas). Lo voy a nombrar como Optimizar MooTools y lo voy a poner en descarga para que los usuarios que no quieran o no sepan crear un plugin lo puedan usar y testear. He explicado todo el código para que lo entiendas y puedas modificarlo a tu gusto. De todos modos, cualquier duda o error o comentario lo agradeceré. Se pueden poner opciones como deshabilitar sólo los archivos js que queramos, algo muy sencillo de implantar que no lo creo necesario... para mi, pero si me lo propones lo haré sin ninguna duda.
No tenía pensado realizar este plugin, pero siempre he pensado que un sitio web debe estar lo más optimizado posible. La verdad que a nadie le gusta nada cargar librerías de 233 KB (como mootools-more.js). Mucha gente dice que no son necesarias, pero cuanto más indago en los códigos fuente y más pruebas hago, me doy cuenta que las librerías no se cargan porque sí aunque en algunos casos se puede evitar su uso. En mi caso desactivé MooTools y después de unas horas descubrí que algo no funcionaba, ahora hablaré de esto.
Mi intención es hacerlo compatible con el foro Kunena ya que de este modo almenos los usuarios visitantes podrán acceder mucho más rápidamente. Efectivamente como puse en el foro, y antes de poner en descarga el plugin, lo testeé en mi web y me puse muy contento: la página principal llegó a "pesar" solamente unos 120 KB y todo funcionaba correctamente ya que cuando un usuario se logeaba, automáticamente el plugin permitía la activación de MooTools... Hasta que me ocurrió una cosa curiosa: me fijé que feedburner ¡no actualizaba mis últimos artículos!. Normalmente debes esperar hasta una media hora pero ya habían pasado unas 4... fui al enlace de sindicación original de mi web (para saber esto te recomiendo que leas los tutoriales sobre redifundir contenido web) y me encontré que estaba vacío totalmente. Esto me hacía sospechar (erróneamente) que los feed en Joomla! necesitan de MooTools ya que una vez que desactivé el plugin mi enlace de sindicación original y el de feedburner volvieron a funcionar. Me puse a investigar este hecho y encontré el problema y efectivamente tenía que ver con el plugin:
- Descubrí que el plugin daba error porque el documento no tenía formato HTML y, por lo tanto, no podía acceder al encabezado del documento.
¡Ostras!... pues esto es muy importante. Claro, el formato que se crea de fuente web es el XML... ¿Cómo lo solucioné? Pues añadiendo el siguiente código:
$documento = JFactory::getDocument();
$tipo_de_documento = $documento->getType();
if(strcmp("html", $tipo_de_documento) != 0) return;
Para que esté todo más ordenado, la descarga del plugin está en el siguiente artículo.