Pagina 1 din 2 12 UltimulUltimul
Rezultate 1 la 10 din 15

Subiect: Bug Javascript

  1. #1
    Avatarul lui Dan.Rades
    Dan.Rades este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    3rd March 2006
    Locaţie
    Bucuresti
    Vârstă
    42
    Posturi
    275
    Putere Rep
    35


    Implicit

    Mda, nu credeam sa sa-nvat/a muri vreodata.
    De fapt nu credeam sa fiu pus in postura de a cere ajutor legat de limbajul javascript. cel mult ajutor lui google.

    Dar, am disperat. Lucrez la un proiect personal(un framework javascript).
    Prima belea, acum vreo 2 luni, mi-am sters sursele din greseala(reinstalare windows, eu credeam ca salvasem htdocsul din apache, dar nu l-am salvat pala bun). Mai aveam ceva surse mai vechi, in fine, am zis sa o iau aproape de la 0, si sa structurez un pic altfel codul. Problema e ca am scris sute de linii(ma rog peste 1000) de cod pana sa ma apuc de testat mai in amanunt. Atunci a aparut nenorocirea. Daca cream numai un obiect dintr-o clasa era ok(pana atunci asa testasem, scriam clasa, instantiam un obiect daca era ok meream mai departe).
    E, porcaria e cand cream 2 sau mai multe obiecte din aceeasi clasa... In fine hai sa nu o mai lungesc si sa dau un exemplu cel mai simplu exemplu posibil:

    aClass = function(){}
    aClass .prototype = {
    privateProperties : {
    text:'seo is good'
    },
    anotherProperty:'spam is bad'
    };

    obj1 = new aClass;
    obj2 = new aClass;

    obj2.privateProperties.text='seo sucks. i do spam';
    //ar trebu sa reflecte doar proprietatea obiectului obj2

    obj2.anotherProperty='why do you think spam is bad?';

    alert(obj1.privateProperties.text);//rezultat: seo sucks. i do spam in loc de seo is good
    alert(obj1.anotherProperty);//rezultat spam is bad, asa cum e normal

    alert(aClass.prototype.privateProperties.text);//rezultat: seo sucks. i do spam in loc de seo is good
    alert(aClass.prototype.anotherProperty);//rezultat: spam is bad, asa e normal
    Concluzia e: atunci cand prototipul unei functii(clase) contine un obiect(aClass.prototype.privateProperties):
    - orice instantiere a clasei respective(sa zicem obj1) nu va crea proprietateaobj1.privateProperties ca obiect de sine statator(cum ar fi normal) ci ca referinta catre aClass.prototype.privateProperties, ceea ce e total anormal deoarece:
    -> orice modificare a proprietatilor obiectului respectiv(adica privateProperties.text) de catre o instanta a clasei, se va reflecta global si nu local(scope-ul instantei)

    Deci, ce sa zic, numai de bine familiilor(le-am asigurat carnea pentru 3 revelioane) alora de au implentat javscriptul(se manifesta la fel si in FF si in IE). Ma mir cum naiba nu a mai observat nimeni bugul asta
    Ma rog, acum ca am identificat problema, solutii se gasesc, nu mai ca s-a dus dracu eleganta codului, plus ca presimnt ca va fi o chestie foarte error-prone. Voi ce parere aveti? Gresesc cu ceva in interpretarea mea?

    Ca sa intelegeti mai bine de ce sunt asa de nervos, ganditi-va ca la debugging javascriptul sucks rau, chiar testand in FF cu extensii de developer instalate.
    Codul de mai sus e doar un exemplu simplu, eu implementasem un sistem de packages, clase aproape ca in Java: proprietati/metode statice, un sistem de mostenire destept, proprietati private etc. Asa ca mi-a fost foarte grfu sa imi dau seama de unde naiba apare eroarea(am tot modificat si rasmodificat si refactorizat sistemul de clase si pachete, pana sa imi vina azi ideea sa fac testul asta)

  2. #2
    Avatarul lui Cristian Mezei
    Cristian Mezei este deconectat Administrator
    Reputatie:
    63
    Data înscrierii
    20th February 2005
    Locaţie
    Everywhere
    Posturi
    6.975
    Putere Rep
    63


    Implicit

    Si morala ?
    Co-founder of Deepstash. Tech lover. Dinosaur. Dad. Chef.

  3. #3
    Avatarul lui Dan.Rades
    Dan.Rades este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    3rd March 2006
    Locaţie
    Bucuresti
    Vârstă
    42
    Posturi
    275
    Putere Rep
    35


    Implicit

    Citat Postat în original de Cristian Mezei @ May 7 2006, 04:17 AM) [post=14430
    Quoted post[/post]</div><div class='quotemain'>
    Si morala ?
    Morala e ca acum folosesc apache2triad.
    Inainte instalasem Apache2 pe urma am revenit la o varianta mai veche si cand am salvat htdocsul l-am salvat din Apache2.

    Ideea e ca i-am dat de cap la problema si cum am prezis mai la deal a fost foarte error-prone. Din pacate pentru sanatatea mea mintala au aparut altele si nu din vina mea:
    - in Firefox 1.5.3.0 XMLHttpRequest se pare ca vrea sa functioneze numai in mod asincron oricat cat i-as explica ca nu e bine mereu sa faca asta. Ceea ce e de-a dreptul nasol. Culmea, in IE merge brici.
    Pai sa nu ii iubesti pe la spate pe programatorii browserelor cu ]
    Si morala ?
    [/QUOTE]
    Morala e ca acum folosesc apache2triad.
    Inainte instalasem Apache2 pe urma am revenit la o varianta mai veche si cand am salvat htdocsul l-am salvat din Apache2.

    Ideea e ca i-am dat de cap la problema si cum am prezis mai la deal a fost foarte error-prone. Din pacate pentru sanatatea mea mintala au aparut altele si nu din vina mea:
    - in Firefox 1.5.3.0 XMLHttpRequest se pare ca vrea sa functioneze numai in mod asincron oricat cat i-as explica ca nu e bine mereu sa faca asta. Ceea ce e de-a dreptul nasol. Culmea, in IE merge brici.
    Pai sa nu ii iubesti pe la spate pe programatorii browserelor cu tot cu familiile lor :finger:

  4. #4
    Avatarul lui Cristian Mezei
    Cristian Mezei este deconectat Administrator
    Reputatie:
    63
    Data înscrierii
    20th February 2005
    Locaţie
    Everywhere
    Posturi
    6.975
    Putere Rep
    63


    Implicit

    Citat Postat în original de Dan.Rades &#064; May 10 2006, 12&#58;52 PM) [post=14570
    Quoted post[/post]</div><div class='quotemain'>
    Culmea, in IE merge brici.
    Probabil asta e un bug in IE.

    O sa il corecteze curan]
    Culmea, in IE merge brici.
    [/QUOTE]

    Probabil asta e un bug in IE.

    O sa il corecteze curand, daca merge, stai linistit.
    Co-founder of Deepstash. Tech lover. Dinosaur. Dad. Chef.

  5. #5
    Avatarul lui Dan.Rades
    Dan.Rades este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    3rd March 2006
    Locaţie
    Bucuresti
    Vârstă
    42
    Posturi
    275
    Putere Rep
    35


    Implicit

    Hahaha, Cristi nu m-ar mira sa ai dreptate, cu noua versiune de IE. Problema vine, dupa cum banuiesc, de la cum face Firefoxul multithreading(mai bine zis sincronizarea intre threaduri) cand incarca un document:
    - pentru fiecare(ma rog nu chiar fiecare, exista o limita) element(imagine/stil etc) din pagina ce trebuie incarcata se deschide un thread nou
    - threadul principal e cel care incarca documentul propriu zis, si nu asteapta ca celelalte threaduri sa termina ca sa randeze pagina(de ex: de-aia cand incarci o pagina cu adsense pe ea, mai intai apare pagina fara reclama).
    Totul normal pana aici, asa functioneaza orice browser modern, insa atunci cand incarc un document folosind XMLHttpRequest, e de dorit uneori(chiar foarte dorit, ultradorit) ca putza de thread principal sa astepte sa termine threadul ce incarca documentul respectiv.
    E, IE face sincronizarea aparent bine intre threaduri(imi retrag cuvantul brici din postul de mai sus ca nu am testat cu sa zicem 10-20 threaduri dastea imbricate si tare imi e ca o sa fie probleme) dar beleaua e ca in Firefox degeaba setez eu sa incarce sincron documentul respectiv ca threadul principal isi continua executia binemersi. Cum astia au gandit javascriptul cum au gandit romanii dacia: la ce dreaq ii trebe functia pause, prea greu de implementat, trebuie sa cutting-costs asa ca o vom pune pe lista de todo peste 38765837 ani, nu exista un hack rapid(sa pui un pause dupa ce ai apelat connectul la obiectul XMLHttprequest si gata) Ceea ce inseamna ca v-a trebui sa pun o bucla stupida de genul:
    Cod:
    while &#40;&#33;loaded&#41; {
        loaded = conexiune.checkIfLoaded&#40;&#41;
    }
    Edit: merge fix o pewla asa. se executa mult pra repede indiferent cat de complexa fac functia checkIfLoaded(multe ifuri adunar scaderi, operatzii pe bit instantieri de obiecte etc);

    Problema e ca astfel utilizarea procesorului ajunge la 100%(bucla se execute de foarte foarte multe ori);
    In fine, momentan alta solutie nu vad.

    Am prezentat mai pe larg problemele cu care ma confrunt, ca sa fiti pregatiti daca vreti sa construiti aplicatii bazate pe AJAX. Asteptati-va la probleme si la mult timp pierdut cautand solutzii pentru prostiile altora. Comparativ cu web designul, timpul pierdut cautand sa faci un layout crossbrowser este mult mai mic.
    In concluzie, desi se vorbeste si se lauda in sus si in jos AJAXul, WEB2.0 e inca departe

  6. #6
    Avatarul lui c_n_m
    c_n_m este deconectat Ambasador
    Reputatie:
    38
    Data înscrierii
    25th February 2006
    Locaţie
    București / Ilfov
    Vârstă
    52
    Posturi
    622
    Putere Rep
    38


    Implicit

    Am testat scriptuletul pe IE, Opera si Firefox. Pe toate merge la fel, de aceea inclin sa cred ca problema nu este de la IE, ci ca "privateProperties" nu este o proprietate privata (o proprietate neaccesabila din afara functiei) ci ca este doar o denumire ca oricare alta data unei proprietati publice. Deci functionarea scriptului este corecta. Despre implementarea proprietatilor private in javascript am gasit cate ceva aici.

    P.S: fiind vorba de javascript, nu inteleg ce legatura are serverul, deoarece javascript se executa in browserul clientului.

  7. #7
    Avatarul lui Ovidiu Lixandru
    Ovidiu Lixandru Guest


    Implicit

    Citat Postat în original de Dan.Rades
    Edit: merge fix o pewla asa. se executa mult pra repede indiferent cat de complexa fac functia checkIfLoaded(multe ifuri adunar scaderi, operatzii pe bit instantieri de obiecte etc);
    setTimeout()
    Citat Postat în original de Dan.Rades
    Am prezentat mai pe larg problemele cu care ma confrunt, ca sa fiti pregatiti daca vreti sa construiti aplicatii bazate pe AJAX. Asteptati-va la probleme si la mult timp pierdut cautand solutzii pentru prostiile altora. Comparativ cu web designul, timpul pierdut cautand sa faci un layout crossbrowser este mult mai mic.
    In concluzie, desi se vorbeste si se lauda in sus si in jos AJAXul, WEB2.0 e inca departe
    AJAX e la fel de destept ca programatorul care il implementeaza. Te rog abtine-te de la pareri pseudo-obiective/avizate.
    Ultima modificare făcută de Ciprian Sorlea; 26th May 2006 la 18:27.

  8. #8
    Avatarul lui Dan.Rades
    Dan.Rades este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    3rd March 2006
    Locaţie
    Bucuresti
    Vârstă
    42
    Posturi
    275
    Putere Rep
    35


    Implicit

    Citat Postat în original de c_n_m &#064; May 13 2006, 01&#58;30 PM) [post=14751
    Quoted post[/post]</div><div class='quotemain'>
    Am testat scriptuletul pe IE, Opera si Firefox. Pe toate merge la fel, de aceea inclin sa cred ca problema nu este de la IE, ci ca "privateProperties" nu este o proprietate privata (o proprietate neaccesabila din afara functiei) ci ca este doar o denumire ca oricare alta data unei proprietati publice. Deci functionarea scriptului este corecta. Despre implementarea proprietatilor private in javascript am gasit cate ceva aici.

    P.S: fiind vorba de javascript, nu inteleg ce legatura are serverul, deoarece javascript se executa in browserul clientului.
    Nu functioneaza corect.
    Am zis ca se manifesta la fel peste tot, nu ca are IE o problema cu asta. Cele 2 posturi ale mele vizeaza probleme diferite.
    Poate te-a indus in eroare denumirea privateProperties. Problema efectiv nu are legatura cu propritetatile private(in javascript oricum nu exista cu adevarat asa ceva, poti doar sa le simulezi).
    Ideea e urmatoarea: in javascript OOPul e mai ciudat ca in limbajele de programare clasice. Ca sa construiesti o clasa definesti o functie.
    Ex:

    var oClasa = function() {[aici e cod oarecare]}
    Apeland operatorul new asupra oClass de ex: aObj = new oClass, se va executa oClass() si se returneaza un obiect. Problema e ca un obiect trebuie sa aiba proprietati si metode. Aici intervine mostenirea prototipala. Ca atunci cand creez o instanta a clasei aClass, instanta(obiectul) sa mosteneasca proprietatile/metodele clasei, acestea trebuiesc atasate prototipului acesteia
    ex:
    aClass.prototype.text = "un text";
    aClass.prototype.numar = 666;
    Orice instanta a clasei aClass v-a mosteni proprietatile text si numar(voi putea deci sa scriu aObj.numar = 555). Dar, atunci cand la prototipul clasei atasez un obiect, instanta nu v-a mostenii obiectul ci o referinta catre acesta
    Adica, daca am
    aClass.prototype.seo = {
    spam : &#39;bad&#39;
    }
    orice instanta a clasei, atunci cand acceseaza/modifica proprietatea seo, nu o face in scope-ul propriu ci gobal, ceea ce este foarte gresit. Deci daca fac aObj.seo.spam = &#39;good&#39;, aceasta actiunr nu se resfrange DOAR asupra obiectului aObj, cum ar fi normal, ci global(asta inseamna ca se modifica de fapt aClass.prototype.seo -> orice instanta a acestei clase va avea proprietatea seo.spam = &#39;good&#39;)

    Sper ca am explicat inteligibil. SIGUR nu functioneaza corect. Oricum am trecut peste asta.

    Cat priveste a doua problema(cu XMLHttpRequest) , IE/Opera functioneaza cum trebuie FF nu. M-am uitat astazi peste sursa unde este implementat in FF si am o banuiala de unde vine. Am raportat si pe bugzila, sper sa se rezolve.

    Nu am inteles ce ai vrut sa spui ]
    Am testat scriptuletul pe IE, Opera si Firefox. Pe toate merge la fel, de aceea inclin sa cred ca problema nu este de la IE, ci ca "privateProperties" nu este o proprietate privata (o proprietate neaccesabila din afara functiei) ci ca este doar o denumire ca oricare alta data unei proprietati publice. Deci functionarea scriptului este corecta. Despre implementarea proprietatilor private in javascript am gasit cate ceva aici.

    P.S: fiind vorba de javascript, nu inteleg ce legatura are serverul, deoarece javascript se executa in browserul clientului.
    [/QUOTE]

    Nu functioneaza corect.
    Am zis ca se manifesta la fel peste tot, nu ca are IE o problema cu asta. Cele 2 posturi ale mele vizeaza probleme diferite.
    Poate te-a indus in eroare denumirea privateProperties. Problema efectiv nu are legatura cu propritetatile private(in javascript oricum nu exista cu adevarat asa ceva, poti doar sa le simulezi).
    Ideea e urmatoarea: in javascript OOPul e mai ciudat ca in limbajele de programare clasice. Ca sa construiesti o clasa definesti o functie.
    Ex:

    var oClasa = function() {[aici e cod oarecare]}
    Apeland operatorul new asupra oClass de ex: aObj = new oClass, se va executa oClass() si se returneaza un obiect. Problema e ca un obiect trebuie sa aiba proprietati si metode. Aici intervine mostenirea prototipala. Ca atunci cand creez o instanta a clasei aClass, instanta(obiectul) sa mosteneasca proprietatile/metodele clasei, acestea trebuiesc atasate prototipului acesteia
    ex:
    aClass.prototype.text = "un text";
    aClass.prototype.numar = 666;
    Orice instanta a clasei aClass v-a mosteni proprietatile text si numar(voi putea deci sa scriu aObj.numar = 555). Dar, atunci cand la prototipul clasei atasez un obiect, instanta nu v-a mostenii obiectul ci o referinta catre acesta
    Adica, daca am
    aClass.prototype.seo = {
    spam : &#39;bad&#39;
    }
    orice instanta a clasei, atunci cand acceseaza/modifica proprietatea seo, nu o face in scope-ul propriu ci gobal, ceea ce este foarte gresit. Deci daca fac aObj.seo.spam = &#39;good&#39;, aceasta actiunr nu se resfrange DOAR asupra obiectului aObj, cum ar fi normal, ci global(asta inseamna ca se modifica de fapt aClass.prototype.seo -> orice instanta a acestei clase va avea proprietatea seo.spam = &#39;good&#39;)

    Sper ca am explicat inteligibil. SIGUR nu functioneaza corect. Oricum am trecut peste asta.

    Cat priveste a doua problema(cu XMLHttpRequest) , IE/Opera functioneaza cum trebuie FF nu. M-am uitat astazi peste sursa unde este implementat in FF si am o banuiala de unde vine. Am raportat si pe bugzila, sper sa se rezolve.

    Nu am inteles ce ai vrut sa spui la partea cu serverul :blink:

  9. #9
    Avatarul lui Dan.Rades
    Dan.Rades este deconectat Membru SeoPedia
    Reputatie:
    35
    Data înscrierii
    3rd March 2006
    Locaţie
    Bucuresti
    Vârstă
    42
    Posturi
    275
    Putere Rep
    35


    Implicit

    Acum am vazut postul lui Ovidiu.
    1. Daca tu crezi ca setTimeout = pause foarte bine.Dar nu e deloc asa, doar intarzie executia unei functii, nu opreste efectiv, intr-un anumit punc executia scriptului. Ca sa intelgi ce vroiam eu:
    //request e conexiunea XMLHttpRequest
    request.connect();
    //daca ar merge in mod sincron, codul ce urmeaza dupa aceasta instructiune nu s-ar executa pana cand aceasta nu termina.
    //dar cum in FF se executa oricum asincron inseamna ca se vor executa imediat instructiunile urmatoare

    while (&#33;request.loaded) {pause(200);}//daca ar fi existat pause as fi pus sa astepte pana request termina(request se executa pe thread diferit deci nu era afectat de pause
    Deci setTimeoutul nu ma ajuta cu nimic.

    2. Poti sa ma rogi ca nu am de ce sa ma abtin. Cunosc bine acest limbaj si in ceea ce scriu vin cu argumente. Chestia cu AJAX la fel de destept m-a distrat tare(ca sa iti raspund tot ironic, AJAX e la fel de destept ca unii programatori).

  10. #10
    Avatarul lui c_n_m
    c_n_m este deconectat Ambasador
    Reputatie:
    38
    Data înscrierii
    25th February 2006
    Locaţie
    București / Ilfov
    Vârstă
    52
    Posturi
    622
    Putere Rep
    38


    Implicit

    Am zis ca se manifesta la fel peste tot, nu ca are IE o problema cu asta.
    Asa este, acum am citit mai atent

    Poate te-a indus in eroare denumirea privateProperties. Problema efectiv nu are legatura cu propritetatile private(in javascript oricum nu exista cu adevarat asa ceva, poti doar sa le simulezi).
    Asta am vrut sa spun si eu, crezand ca tu ai considerat &#39;privateProperties&#39; ca si proprietati private si te-ai fi asteptat ca exemplul sa functioneze altfel decat o face - cel putin asa am inteles din post-ul tau initial

    Nu am inteles ce ai vrut sa spui la partea cu serverul
    Datorita &#39;moralei&#39; care lega asa-zisa problema de JS cu apache2triad:

    Morala e ca acum folosesc apache2triad.

Pagina 1 din 2 12 UltimulUltimul

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Putin ajutor in Javascript
    De Lucian00 în forumul Client side
    Răspunsuri: 3
    Ultimul Post: 6th July 2010, 12:46
  2. Google & JavaScript?
    De marcos29 în forumul Google
    Răspunsuri: 12
    Ultimul Post: 18th March 2009, 16:40
  3. Javascript are GET ?
    De Iulian în forumul Client side
    Răspunsuri: 6
    Ultimul Post: 16th March 2009, 13:11
  4. XHTML si Javascript
    De fester în forumul Client side
    Răspunsuri: 0
    Ultimul Post: 22nd July 2007, 13:50
  5. Continut si JavaScript
    De tis în forumul Utile
    Răspunsuri: 3
    Ultimul Post: 18th January 2007, 02:45

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •