Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    altg
    utente che non utiene
    il 2014-11-12 12:29:37.0 alle 2014-11-12 12:29:37.0
    Trollate totali: 11540
    XMLHttpRequest su chromium vs. firefox
    Non capisco una cosa, e non trovo nulla di chiaro su internet in proposito. Mi sembra strano che nessuno l'abbia notato, quindi sospetto di star facendo qualcosa di sbagliato io, perche` la differenza sui due browsers e` rilevante. In pratica, ho un problema nel compilatore Lino4: il caricamento di librerie, quando il compilatore trova una "include", viene fatto con una richiesta XMLHttp sincrona (non asincrona) dal worker del compilatore. Ok, e` sincrona e quindi bloccante, pero` ovviamente avviene in un worker e non nel thread principale a cui e` legato il DOM e la UI del browser, sicche` dovrebbe essere funzionalmente accettabile per l'utente che non si vede bloccare il browser mentre compila. Infatti non si blocca nulla, pero` c'e` un delay molto alto fra una richiesta e l'altra, oppure le richieste sono lentissime su chromium (o meglio, su entrambi i suoi derivati Chrome e Opera), mentre Firefox fa richieste praticamente istantanee. Ovviamente il mio problema e` che mentre FF compila in una frazione di secondo i semplici listati su cui lavoro ora, Opera e Chrome ci mettono qualcosa come 3 secondi, dando l'impressione che sia il compilatore stesso ad essere lento quando il 99% del tempo e` speso nelle richieste per caricare le librerie. Allego screenshot del profiler:

    Immagine postata dall'utente

    Qualche idea sul perche`? sembra quasi che i delay siano introdotti ad arte, quasi tutti intorno ai 300 ms, forse una caratteristica del browser per non sovraccaricare i server ed evitare DoS involontari? (pero` mi parrebbe strano che non la disabilitassero per richieste che puntano a localhost)

    Allego anche il codice del requester del compilatore: magari e` li` che sbaglio...

            Requester = function (args) {
    
                    this.url = args && typeof args.url == 'string' ? args.url : 'http://localhost:4048';
                    this.requester = new XMLHttpRequest ();
                    this.requestInProgress = false;
                    this.onload = function () { };
                    this.onerror = function () { };
    
                    return this;
    
            };
    
            Requester.prototype.get = function (args) { var
    
                    async = args && typeof args.async == 'boolean' ? args.async : true,
                    binary = args && typeof args.binary == 'boolean' ? args.binary : false;
    
                    if (this.requester && this.requestInProgress == false) {
    
                            this.onload = args && typeof args.onload == 'function' ? args.onload : function () { };
                            this.onerror = args && typeof args.onerror == 'function' ? args.onerror : function () { };
                            this.requester.open ('GET', this.url + (args && typeof args.uri == 'string' ? args.uri : empty), async);
    
                            if (binary)
    
                                    this.requester.overrideMimeType ('text/plain; charset=x-user-defined');
    
                            if (async) {
    
                                    this.requestInProgress = true;
                                    this.requester.onreadystatechange = this.rscHandler.bind (this);
                                    this.requester.send ();
                                    return null;
    
                            }
    
                            this.requester.send ();
    
                            return this.requester.status == 200 ? {
    
                                    status: this.requester.status,
                                    response: this.requester.response,
                                    text: this.requester.responseText,
                                    xml: this.requester.responseXML
    
                            } : {
    
                                    status: this.requester.status,
                                    response: null,
                                    text: empty,
                                    xml: null
    
                            };
    
                    }
    
            };
    
            Requester.prototype.rscHandler = function () {
    
                    if (this.requester.readyState == 4) {
    
                            this.requestInProgress = false;
    
                            if (this.requester.status == 200) {
    
                                    this.onload ({
    
                                            status: this.requester.status,
                                            response: this.requester.response,
                                            text: this.requester.responseText,
                                            xml: this.requester.responseXML
    
                                    });
    
                                    return;
    
                            }
    
                            this.onerror ({
    
                                    status: this.requester.status,
                                    response: null,
                                    text: empty,
                                    xml: null
    
                            });
    
                    }
    
            };
    


    ho tralasciato il metodo "post" perche` tanto il problema affligge soprattutto le richieste GET, che sono di piu`. E` vero che nel codice c'e` un flag "requestInProgress" che protegge un'istanza del requester dall'eseguire piu` di una richiesta per volta, ma c'era piu` per sicurezza che per motivi pratici, tanto poi ogni richiesta crea una nuova istanza con la sua copia del flag.

    Non capisco. Keroppi
    • Avatar
      ☺
      Scritto da
      il 2014-11-12 13:03:21.0 alle 2014-11-12 13:03:21.0
      Trollate totali: 42885
      Re: XMLHttpRequest su chromium vs. firefox
      Scritto da: altg

      > Allego screenshot del profiler:
      >
      > Immagine postata dall'utente

      Non capisco, ma il delay e' tra la request e la response ? Se la risposta e' si, allora non e' un problema del browser, ma del server.

      Edit: Riletto il messaggio, Chromium/FireFox, come non detto Imbarazzato ...

      Edit 2: E se provi ad utilizzare jQuery ? Magari c'e' un flag da qualche parte che ...

      **Modificato dall'autore il 12.11.2014 13:08**
      `"la realta' non e' cosi' terrificante come vogliono farti credere" - Giambo ` - Wakko che cita Giambo
      • Avatar
        ☺
        Scritto da
        altg
        utente che non utiene
        il 2014-11-12 13:54:06.0 alle 2014-11-12 13:54:06.0
        Trollate totali: 11540
        Re: XMLHttpRequest su chromium vs. firefox
        > > Allego screenshot del profiler:
        > >
        > > Immagine postata dall'utente
        >
        > Non capisco, ma il delay e' tra la request e la response ? Se la risposta e' si, allora non e' un problema del browser, ma del server.
        >
        > Edit: Riletto il messaggio, Chromium/FireFox, come non detto Imbarazzato ...

        Gia`, anch'io sono perplesso perche` appunto il server e` lo stesso, e il codice js e` lo stesso in tutti e due i casi, solo che i derivati di chromium laggano, e firefox no.

        > Edit 2: E se provi ad utilizzare jQuery ? Magari c'e' un flag da qualche parte che ...

        Boh. Magari provo, cosi` se lagga lo stesso, escludo che il problema sia nel mio requester.
    • Avatar
      ☺
      Scritto da
      ::1
      il 2014-11-12 14:25:51.0 alle 2014-11-12 14:25:51.0
      Trollate totali: 12321
      Re: XMLHttpRequest su chromium vs. firefox
      ma la compilazione avviene server-side? se sì a che ti serve un web worker?
      Young professional woman and busy mom.
      • Avatar
        ☺
        Scritto da
        altg
        utente che non utiene
        il 2014-11-12 14:50:57.0 alle 2014-11-12 14:50:57.0
        Trollate totali: 11540
        Re: XMLHttpRequest su chromium vs. firefox
        > ma la compilazione avviene server-side? se sì a che ti serve un web worker?

        No no, avviene client-side, e` quello il punto per il worker.
        Il server linka l'eseguibile, e serve le librerie e i sorgenti.
        Insomma il server opera coi files, ma il 99% del lavoro lo fa il client.
        • Avatar
          ☺
          Scritto da
          ::1
          il 2014-11-12 14:54:27.0 alle 2014-11-12 14:54:27.0
          Trollate totali: 12321
          Re: XMLHttpRequest su chromium vs. firefox
          Scritto da: altg
          > > ma la compilazione avviene server-side? se sì a che ti serve un web worker?
          >
          > No no, avviene client-side, e` quello il punto per il worker.
          > Il server linka l'eseguibile, e serve le librerie e i sorgenti.
          > Insomma il server opera coi files, ma il 99% del lavoro lo fa il client.

          Perché non può fare tutto il client?
          Young professional woman and busy mom.
          • Avatar
            ☺
            Scritto da
            avvelentani
            Cubicolario
            il 2014-11-12 15:02:12.0 alle 2014-11-12 15:02:12.0
            Trollate totali: 18184
            Re: XMLHttpRequest su chromium vs. firefox
            Scritto da: ::1
            > Scritto da: altg
            > > > ma la compilazione avviene server-side? se sì a che ti serve un web worker?
            > >
            > > No no, avviene client-side, e` quello il punto per il worker.
            > > Il server linka l'eseguibile, e serve le librerie e i sorgenti.
            > > Insomma il server opera coi files, ma il 99% del lavoro lo fa il client.
            >
            > Perché non può fare tutto il client?

            Javascript non puo` scrivere su disco ne' eseguire programmi locali, presumo sia per questo.
            I think happiness is love
            - Vladimir Putin
            • Avatar
              ☺
              Scritto da
              altg
              utente che non utiene
              il 2014-11-12 15:27:17.0 alle 2014-11-12 15:27:17.0
              Trollate totali: 11540
              Re: XMLHttpRequest su chromium vs. firefox
              > > > > ma la compilazione avviene server-side? se sì a che ti serve un web worker?
              > > >
              > > > No no, avviene client-side, e` quello il punto per il worker.
              > > > Il server linka l'eseguibile, e serve le librerie e i sorgenti.
              > > > Insomma il server opera coi files, ma il 99% del lavoro lo fa il client.
              > >
              > > Perché non può fare tutto il client?
              >
              > Javascript non puo` scrivere su disco ne' eseguire programmi locali, presumo sia per questo.

              Già. Magari poi esistono soluzioni acrobatiche specifiche di un browser, ma non è quello il punto. Su un forum una volta avevo letto che c'era un limite di due request contemporanee per dominio, e che una soluzione sarebbe usare più domini, ma boh... Come si creano degli alias di localhost? E poi c'è il fatto che con FF funziona perfettamente. È strano.
<softv>

Pagina generata in 165 millisecondi

Utenti attivi: 11 nell'ultimo minuto, 25 negli ultimi cinque minuti, 63 negli ultimi 15 minuti