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 :

Temps d'ex�cution tableau long


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2019
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Par d�faut Temps d'ex�cution tableau long
    Bonjour � tous!

    Je sollicite votre aide pour un probl�me de programmation. Je suis d�butant et j'apprends � utiliser Javascript pour essentiellement l'utiliser sur Google Script afin de manipuler Google Sheet.

    J'ai �crit quelques lignes pour r�aliser une action simple : mettre une valeur dans une colonne B du tableur en fonction de la valeur d'une colonne A de ce m�me tableur. Donc tout simplement j'ai utilis� if. Le soucis est que j'ai � peu pr�s 20000 lignes et m�me en utilisant un tableau pou ranger les valeurs, �a prends un temps interminable (ou �a me mets un truc comme Running Out)..

    Voici mon code (google script):

    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
     
    // Permet d'obtenir le nombre de ligne de ma feuille
     
    function DerniereLigne() {
     
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('Liste');
      var lignes = sheet.getLastRow();
      return lignes
    }
     
    // Permet d'affecter une valeur colonne B en fonction colonne A
    function Tri() {
     
      var tab1 = []
      var tab2 = []
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.setActiveSheet(ss.getSheetByName('Liste'));
     
      for (var i =0,c=DerniereLigne()-1 ; i < c;i++){
        tab1.push(sheet.getRange("A"+ (i+2)).getValues());
        }
     
      for (var k =0;k<c;k++){
        if (tab1[k]=="Pomme") {
          tab2[k]="Fruit"
       } else if (tab1[k]=="Carotte") {
          tab2[k]="Légume"
        } else {
          tab2[k]="Rien"
        }
      }
     
      for (var j =0 ; j < c;j++){
         sheet.getRange("B"+ (j+2)).setValue(tab2[j]);
         }
    }
    Mon code marche tr�s bien pour moins de 100 lignes. Si je commence a mettre 2000 ligne �a prends une bonne minutes mais pour 20000 �a a jamais r�ussi.. Avez vous une id�e pour optimiser ce code ?

    Je vous remercie d'avance !
    A bientot

  2. #2
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    � br�le-pourpoint, je dirais que tes deux tableaux ne sont pas utiles, et qu'il serait plus simple de faire une seule boucle au lieu de trois qui renseignerait la colonne B directement pour chaque valeur de la colonne A.

  3. #3
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2019
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Par d�faut
    En suivant tes conseils j'ai fais �a :

    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
     
    // Permet d'obtenir le nombre de ligne de ma feuille
     
    function DerniereLigne() {
     
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('Liste');
      var lignes = sheet.getLastRow();
      return lignes
    }
     
    // Permet d'affecter une valeur colonne B en fonction colonne A
    function Tri() {
     
    // Initialisation du timer
      var startTime = new Date().getTime();
      var elapsedTime = 0;
     
      var tab1 = [];
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.setActiveSheet(ss.getSheetByName('Liste'));
     
      for (var i =0,c=DerniereLigne()-1 ; i < c;i++){
        tab1.push(sheet.getRange("A"+ (i+2)).getValues());
         if (tab1[i]=="Pomme") {
          tab1[i]="Fruit"
        } else if (tab1[i]=="Carotte") {
          tab1[i]="Légume"
        } else {
          tab1[i]="Rien"
        }
        sheet.getRange("B"+ (i+2)).setValue(tab1[i]);
        }
     
      elapsedTime = new Date().getTime() - startTime;
      SpreadsheetApp.getUi().alert((elapsedTime/ 1000));
    }
    Sur le code que j'avais fais avant, pour une base de 2000 lignes �a prenant environs 130 secondes.

    L�, avec ce code l�, apr�s 5 minutes c'�tait toujours en cours, et au bout de la moiti� ca s'est arr�t� car c'�tait trop long (Dur�e d'ex�cution d�pass�)
    Avec ce code, �a affiche les cellules 1 par 1, donc on perds l'utilit� de faire des tableaux, non ?

    Apr�s analyse, l'�tape critique est celle o� les cellules initiaux sont renseign�s dans le tableau (tab1), avez vous une solution pour rentrer plus rapidement tous les valeurs dans une tableau ?

  4. #4
    Expert confirm�
    Avatar de ProgElecT
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2004
    Messages
    6 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 69
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 6 132
    Par d�faut
    Salut

    Je suis encor apprenti dans le langage JavaScript, que donnerait
    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
    function Tri() {
     
    // Initialisation du timer
      var startTime = new Date().getTime();
      var elapsedTime = 0;
     
      //var tab1 = [];
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.setActiveSheet(ss.getSheetByName('Liste'));
     
      //for (var i =0,c=DerniereLigne()-1 ; i < c;i++){
      var RetValue ;
      var c=DerniereLigne()+1;
      var i = 2;
      for (; i < c;i++){
        //tab1.push(sheet.getRange("A"+ (i+2)).getValues());
        switch (sheet.getRange("A"+ (i)).getValues())
            {
                case "Pomme":
    		RetValue = "Fruit";
    		break;		
                case "Carotte":
    		RetValue = "Légume";
    		break;		
                default:
    		RetValue = "Rien";
    	}
    	// if (tab1[i]=="Pomme") {
        //  tab1[i]="Fruit"
        //} else if (tab1[i]=="Carotte") {
        //  tab1[i]="Légume"
        //} else {
        //  tab1[i]="Rien"
        // }
        //sheet.getRange("B"+ (i+2)).setValue(tab1[i]);
        sheet.getRange("B"+ (i)).setValue(RetValue);
        }
     
      elapsedTime = new Date().getTime() - startTime;
      SpreadsheetApp.getUi().alert((elapsedTime/ 1000));
    }
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont d�pann�s.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2019
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 32
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Par d�faut
    Salut,

    J'ai essay� ton code mais �a traite cellule par cellule et �a affiche les r�sultats au fur et a mesure dans la colonne B. Donc le temps d'ex�cution est tr�s long, c'est pour cette raison que j'ai utilis� des tableau pour stocker les donn�es.

  6. #6
    Expert confirm�
    Avatar de ProgElecT
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2004
    Messages
    6 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 69
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 6 132
    Par d�faut
    Citation Envoy� par Jonhy7 Voir le message
    Salut,
    .... et �a affiche les r�sultats au fur et a mesure dans la colonne B.
    J'ai repris ton code post N� 3, qui lui aussi affiche au fur et � mesurei.

    Dans un autre langage de programmation, pour largement am�liorer la vitesse, je cachais/rendais invisible le grid durant les modifications de son contenu et le remettais visible apr�s son actualisation, c'est peut-�tre une piste ...
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont d�pann�s.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [TCPDF] Temps d'ex�cution trop long
    Par -Neo- dans le forum Biblioth�ques et frameworks
    R�ponses: 5
    Dernier message: 06/11/2009, 12h08
  2. Pourquoi le temps d'ex�cution si long sur PDI ?
    Par helene0618 dans le forum kettle/PDI
    R�ponses: 7
    Dernier message: 11/03/2009, 21h49
  3. Temps d'ex�cution tr�s long : jointure
    Par ddazou dans le forum SQL
    R�ponses: 18
    Dernier message: 28/10/2008, 21h59
  4. temps d'ex�cution trop long tr�s bizarre
    Par fatjoe dans le forum C++
    R�ponses: 0
    Dernier message: 09/05/2008, 02h42
  5. temps d'ex�cution tr�s long
    Par Adam_01 dans le forum C#
    R�ponses: 18
    Dernier message: 22/06/2007, 09h37

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