Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    [JS] Performance ciclo for diverse tra IE e FF

    Ciao a tutti,
    ho un problema su un codice Js.
    Se su una stringa di questo tipo

    Codice PHP:
    000_4_2390&000_4_2470&000_4_6930&004_4_9300&004_4_9370&004_4_9377etc.... 
    (la stringa e' di circa 10 mila caratteri)

    eseguo questo codice

    Codice PHP:
    for(i=0leni++){
       
    document.getElementById(aAux[i]).checked checked;

    impiega 10 secondi ad essere eseguito in FF e circa 8 minuti (!!) in IE.
    Il codice completo della funzione e' questo, dove Aux e' il ritorno di un codice php chiamato via Ajax

    Codice PHP:
       if (sAux){
          var 
    aAux sAux.split('#');
          var 
    iCountDestSelected aAux[1];
          
    aAux aAux[0].split('&');
          var 
    len aAux.length;
          
          
    alert('prima');
          
          for(
    i=0leni++){
             
    document.getElementById(aAux[i]).checked checked;
          }
          
          
    alert('dopo');
          
          
    document.getElementById('CountDestinationsSelected').innerHTML iCountDestSelected;
          
    document.getElementById('CountDestinationsPending').innerHTML document.getElementById('DestinationsPending').value iCountDestSelected;
       } 
    Avete qualche idea del motivo e di come risolverlo?

    Ho gia' dato un'occhiata qui
    http://robertnyman.com/2008/04/11/ja...p-performance/

    ma non sono riuscito, cambiando il loop for con while o utilizzando una struttura diversa, a raggiungere alcun risultato.
    Vi ringrazio per qualsiasi suggerimento.

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Scusate per l'up, ma ho necessita' urgente di risolvere questo problema.

    Qualsiasi consiglio e' ben accetto.
    Grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Ancora non sono riuscito a risolvere.

    Scusate per l'ennesimo up...

  4. #4
    Originariamente inviato da mosquito70
    Ancora non sono riuscito a risolvere.

    Scusate per l'ennesimo up...
    .. e non lo risolverai mai, temo!
    È arcinoto che Internet Explorer è il browser più lento, e di moltissimo, per quanto riguarda il javascript!

    Ti consiglio di tentare un approccio diverso al problema (tipo far generare tutto al server, o qualcosa di simile)
    Far fare al client una mole di calcoli come quella che proponi è a mio avviso un modo di procedere errato.

    Ricordo di aver fatto qualche tempo fa un test di velocità Javascript e IE era qualche decina di volte piu' lento, se non di più, rispetto a Firefox.
    Se poi provi con Opera (ultima versione) che batte anche Firefox ...

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho provato per curiosità col codice riportato sotto.

    Ho 10.000 checkbox e una stringa di 108.893 bytes.
    faccio lo split della stringa
    per ogni elemento del vettore impongo lo check all'elemento


    IE8 e Chrome hanno tempi simili (2-3 secondi, non certo minuti)

    Firefox e Opera danno il risultato quasi istantaneamente

    La domanda è: il codice di prova mio, è molto lontano dall'originale?

    codice:
    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
        Protected k As Integer = 10000
        
        Protected ReadOnly Property stringa As String
            Get
                Dim sb As New StringBuilder()
                sb.Append(String.Format("prova_{0}", 1))
                For i As Integer = 2 To k
                    sb.Append(String.Format("#prova_{0}", i.ToString))
                Next
                Return sb.ToString
            End Get
        End Property
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script language="javascript" type="text/javascript">
    // <!CDATA[
    window.onload = function()
        {
            var sAux = "<%=stringa %>";
            var aAux = sAux.split('#'); 
            for(var i = 0; i < aAux.length; i++)
            {
                var c = document.getElementById(aAux[i]);
                if(c) c.checked = true;
            }
        
        };
    
    
    // ]]>
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
        <%For i = 1 To k%>
            <input id="prova_<%=i %>" type="checkbox" />
        <%next %>
        </div>
        </form>
    </body>
    </html>
    Pietro

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Originariamente inviato da homezappa
    ...
    Ti consiglio di tentare un approccio diverso al problema (tipo far generare tutto al server, o qualcosa di simile)
    Far fare al client una mole di calcoli come quella che proponi è a mio avviso un modo di procedere errato.
    ...
    Sono d'accordo con quello che scrivi, ma al momento, visto i tempi, dovrei modificare questo codice (tra l'altro non scritto da me) senza stravolgere la struttura, che impiegherebbe un quantita' di tempo considerevole.

    Devo trovare una soluzione, anche poco pulita, modificando solo il Js

    Edit
    @pietro09: ho scritto prima di aver visto il tuo intervento. Ora guardo e ti dico. Grazie in anticipo per la risposta.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    @pietro09:
    Purtroppo la tua modifica non risolve i problemi di tempistica, anche se il risultato e' lo stesso.

    Non riesco proprio a capire. Per essere sicuro che non dipenda da altri motivi, ho inserito due alert, prima e dopo l'if e quegli 8 minuti passano proprio dal primo al secondo di questi

    Codice PHP:
    alert('prima');
    for(
    i=0aAux.lengthi++){
        var 
    document.getElementById(aAux[i]);
            if(
    cc.checked true;
    }
    alert('bbb'); 
    Ho pensato anche che potrebbe dipendere dalla versione di IE, visto che Js potrebbe avere versioni diverse da una versione del navigatore all'altra.
    Pero', con non cambia nulla con la IE7 e con la IE8 (di un mio collega).

    Non so proprio come uscirne...

    ps. Aggiungo che i problemi sono stati riscontrati anche su altre postazioni, in particolare quelle della Qualita', dove testano il software

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Io seguirei a occhi chiusi il consiglio di homezappa. Se il browser muore, bisogna risolvere in altro modo, piuttosto che girarci attorno.



    ps. ho guardato meglio il tuo codice e purtroppo non l'ho replicato bene perchè te fai più split per ciclo
    Pietro

  9. #9
    Anch'io ho guardato meglio e, solo ora, mi sono accorto che a quanto pare gli ID delle checkbox iniziano con una cifra, non una lettera .. ed è VIETATO!
    Forse IE si incasina con ID che iniziano con un numero o sono esclusivamente fatti di cifre?

    Infatti l'esempio fatto da pietro09 crea campi con ID=prova_x ove x è il numero.

    Mi sa che può essere un tentativo ...

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Originariamente inviato da homezappa
    Anch'io ho guardato meglio e, solo ora, mi sono accorto che a quanto pare gli ID delle checkbox iniziano con una cifra, non una lettera .. ed è VIETATO!
    Forse IE si incasina con ID che iniziano con un numero o sono esclusivamente fatti di cifre?

    Infatti l'esempio fatto da pietro09 crea campi con ID=prova_x ove x è il numero.

    Mi sa che può essere un tentativo ...

    HTH
    Zappa
    Azz... e' vero! Non ci avevo pensato.
    Ora provo.

    Vi faccio sapere.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.