IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Optimisation de la methode concat


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut Optimisation de la methode concat
    Bonjour à toutes et à tous,
    J'utilise la méthode concat dans un boucle pour lire un fichier en byteArray et le mettre dans une variable Array, voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
            if (this.mMsgUri != GetDBView().URIForFirstSelectedMessage) {
                aRequest.cancel(Components.results.NS_BINDING_ABORTED);
                return;
            }
            this.mStream.setInputStream(aInputStream);
            var chunk = this.mStream.readByteArray( aCount);
    	//ch += this.mStream.read64();
    	//alert(aBytes);
    	//chunk.join('');
     
    	receivedData = receivedData.concat(chunk);
     
    	//alert("available");
            this.mBytesRead += aCount;
        }
    avec un fichier d'importante taille, le temps d'attente explose.
    J'ai vérifié ça avec avec un debugeur et c'est la méthode concat qui est à l'origine de ça !
    Est ce qu'il y a une solution pour remplacer ou optimiser cette méthode ?

    Grand merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    as tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	receivedData = receivedData+chunk;
    ??

    sinon fais un array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    receivedData=new Array();
    .../...
    receivedData.push(chunk);
    et à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    receivedData=receivedData.join('')
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Merci beaucoup pour votre réponse magique !
    cette solution est déjà très bien,
    receivedData = receivedData+chunk;

    mais est ce que je dois utiliser avec le join à la fin ( receivedData=receivedData.join('') ) ?

    ,
    Sinon après ce traitement j'envoie les données pour les codées en base64, et là aussi c'est très long,
    voilà la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    attachment[loadedAttachment] = base64encode(receivedData);
     
     
    function base64encode (data){
     
        var result = [];
        var ip57   = Math.floor(data.length / 57);
        var fp57   = data.length % 57;
        var ip3    = Math.floor(fp57 / 3);
        var fp3    = fp57 % 3;
        var index  = 0;
        var num;
     
        for ( var i = 0; i < ip57; i++ ) {
            for ( j = 0; j < 19; j++, index += 3 ) {
                num = data[index] << 16 | data[index+1] << 8 | data[index+2];
                result.push(encoding[ ( num & 0xFC0000 ) >> 18 ]);
                result.push(encoding[ ( num & 0x03F000 ) >> 12 ]);
                result.push(encoding[ ( num & 0x0FC0   ) >>  6 ]);
                result.push(encoding[ ( num & 0x3F     )       ]);
            }
            //result.push("\n");
        }
     
        for ( i = 0; i < ip3; i++, index += 3 ) {
            num = data[index] << 16 | data[index+1] << 8 | data[index+2];
            result.push(encoding[ ( num & 0xFC0000 ) >> 18 ]);
            result.push(encoding[ ( num & 0x03F000 ) >> 12 ]);
            result.push(encoding[ ( num & 0x0FC0   ) >>  6 ]);
            result.push(encoding[ ( num & 0x3F     )       ]);
        }
     
        if ( fp3 == 1 ) {
            num = data[index] << 16;
            result.push(encoding[ ( num & 0xFC0000 ) >> 18 ]);
            result.push(encoding[ ( num & 0x03F000 ) >> 12 ]);
            result.push("==");
        } else if ( fp3 == 2 ) {
            num = data[index] << 16 | data[index+1] << 8;
            result.push(encoding[ ( num & 0xFC0000 ) >> 18 ]);
            result.push(encoding[ ( num & 0x03F000 ) >> 12 ]);
            result.push(encoding[ ( num & 0x0FC0   ) >>  6 ]);
            result.push("=");
        }
     
        return result.join("");
    }
    [Merci, +00[

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    non le join est uniquement dans le cas du push de l'array ... que tu utilises déja apparemment dans le code que tu nous montres
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Oui effectivement , je viens de tester il y a pas besoin de Join ,

    As-tu une suggestion concernant l'encodebase64 ?

    Thx

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    dans la methode d'encoding ils utilisent déja la method du push de l'array...
    je ne penses pas que le = soit plus rapide ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Optimisation avec la methode de Newton raphson et Dichotomie
    Par Mehdi_youssoufi dans le forum Mathématiques
    Réponses: 0
    Dernier message: 12/06/2014, 15h08
  2. [MySQL] methode optimisée d'insertion de données
    Par redoran dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 04/04/2012, 11h35
  3. Optimisation par la methode du gradient conjugue
    Par mfontan dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 12/03/2008, 18h41
  4. Optimisation methode insertion
    Par keub51 dans le forum DB2
    Réponses: 9
    Dernier message: 09/10/2007, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo