Funciones que hacen que Firefox cargue el plugin Java
El titulo del articulo original es “Here comes the sun” y lleva el subtexto: “Propiedades mágicas hacen que Firefox cargue de manera síncrona el plugin de java”. A continuación traduzco la nota:
Por ejemplo, veamos esta pagina de ejemplo:
<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
function sun() {}
</script>
</head>
<body>
</body>
</html>
Inocua, no? En realidad, no. Resulta que Firefox trata window.sun como una propiedad mágica de LiveConnect (Lo probé con Firefox 3.0.6 en Windows). Que es LiveConnect? Fue introducido en Netscape 4 para permitir controlar plugins a través de scripts. Acceder a cualquier propiedad mágica de LiveConnect lanzara el plugin de Java, incluso aunque tu codigo no tenga nada que ver con Java. Y usar el plugin de Java implica cargar la JVM. Ah! Y he mencionado que todo esto ocurrirá de forma síncrona? Y que Firefox dejara de cargar la pagina y se quedara esperando a que la JVM cargue? Y todo eso simplemente por acceder a la propiedad window.sun.
“Pero, pero, pero…” Te oigo tartamudear. “No estoy accediendo a la propiedad window.sun!”. Si, si lo estas haciendo. Declarar una función global es como asignar una propiedad al objeto window (el valor de la propiedad es la función en si). Y para asignar esa propiedad, Firefox la busca antes de reasignarla. Y cuando la busca… carga la JVM. De forma síncrona.
La lista de estas propiedades mágicas de LiveConnect que matan el rendimiento está enterrada dentro de la documentación del código fuente de Mozilla. Son las siguientes:
* java
* Packages
* netscape
* sun
* JavaClass
* JavaArray
* JavaMember
En otras palabras, no defináis una función a nivel de ventana que se llame sun(). Matara el rendimiento de tu pagina porque al menos un navegador moderno pensara que quieres usar Java, gracias a una “característica” que invento Netscape en 1997.
