De vegades, en el desenvolupament d’una web, ens podem trobar amb misteris estranyament resolubles. La resolució dels problemes està lligada a la consciència de la seva existència i tot plegat pot esdevenir en hores d’investigació perdudes… o no.
Aquest és justament el cas amb que ens vam trobar en un darrer desenvolupament. La navegació per la web era fluida amb Firefox i Internet Explorer, però passava a ser excessivament lenta en el segon després d’algunes interaccions.
Després de diverses proves, vaig trobar quelcom interessant a IE: Where’s my memory?. Segons sembla, Internet Explorer no manega correctament els closures a Javascript de forma que el garbage collector automàtic emprat per l’ECMAScript no funciona com cal al navegador de Microsoft. Podem trobar una bona explicació de què és un closure a IE: Where’s my memory? o a Javascript Closures.
Un cop dutes a terme les diferents solucions proposades a ambdós llocs, la navegació era lleugerament més fluida, però el problema seguia existint. Què podia ser llavors? Finalment, a força del que es podria considerar com isolate-your-code-developing, vaig donar amb el problema i, com passa sovint, resultava ser menys important del que podríem pensar (ai, ara és fàcil dir-ho…). A la web s’emprava un javascript amb un tag d’inici com ara aquest:
<script language="javascript">
En canvi, segons les especificacions de l’W3C l’atribut language està en desús i, en el seu lloc, insten a utilitzar l’atribut type que, d’altra banda, és obligatori. Així, el tag d’inici correcte «mínim» hauria de ser
<script type="text/javascript">
Aquest canvi resol, finalment, el problema plantejat.
Aquest és un bon exemple de com un error aparentment simple pot provocar més d’un maldecap, de la importància de seguir les especificacions i els estàndards, i de com, en la resolució d’un problema, hom pot aprendre coses que, en principi, no sempre han de estar relacionades amb ell.