Am inceput acest articol cu un citat, pe care fiecare developer trebuie sa il tina minte. Este raspunsul la multe intrebari pe care si le pun atat cei ce fac aplicatii in JavaScript cat si cei care le testeaza ( in cel mai nefericit caz, clientii).
De curand am facut o aplicatie care foloseste AJAX, si testand-o pe mai multe browsere, in faza finala am avut si eu de a face probleme de acest gen.
Ieri am realizat un script care sa faca o cerere http utilizand AJAX, ca sa ma conving asupra timpului de interactiune cu serverul pe diferite browsere. Rezultatele sunt graitoare:
Incepem cu Internet Explorer 7, care spre surprinderea mea este campion la viteza. Foloseste un obiect ActiveX (ActiveXObject), care a fost optimizat fata de versiunea Msxml2.XMLHTTP. Conexiunea este deschisa foarte rapid si raspunsul este incarcat instant.
Pe locul doi, desi nu ma asteptam sa fie diferente fata de Firefox 3 se pare totusi ca Opera 9.5 deschide foarte rapid conexiunea dupa care trimite la fel de rapid datele. Mai asteapta putin raspunsul, ceea ce se pare ca ii ia o secunda.
Firefox 3 in acest moment este pe ultimul loc. La acest capitol nu l-a intrecut pe IE. Se observa ca raspunsul trece prin toate cele 3 stari dupa trimiterea cererii, iar o secunda este timpul pierdut pentru trecerea de la starea 1 la 2 adica de la deschiderea conexiunii pana la trimiterea efectiva a cererii. Probleme cu stabilirea conexiunii au fost si in Firefox 2, unde refolosirea la intervale mici de timp ale unui obiect duce la 408, adica „Request Timeout” si accesarea campului status da o eroare, care binenteles duce la blocarea obiectului.
Cel mai simplu mod, dar nu si garantat 100% de rezolvare a erorii este distrugerea si reinitializarea obiectului inainte de a face o cerere.
Cea mai buna insa si garantata totodata este folosirea unui bloc try{}catch(){}, ascunzand astfel eroarea browserului. Putem sa recreem obiectul si in acest caz, sau putem sa apelam metoda abort().