Maison > interface Web > js tutoriel > Comment puis-je optimiser le script Google Apps pour réduire le temps de traitement excessif causé par les appels fréquents Range.getValue() et Range.setValue() ?

Comment puis-je optimiser le script Google Apps pour réduire le temps de traitement excessif causé par les appels fréquents Range.getValue() et Range.setValue() ?

Patricia Arquette
Libérer: 2024-11-30 14:58:11
original
487 Les gens l'ont consulté

How Can I Optimize Google Apps Script to Reduce Excessive Processing Time Caused by Frequent Range.getValue() and Range.setValue() Calls?

Temps de traitement long probable en raison d'appels excessifs à Range.getValue() et Range.setValue()

Description du problème

Le script analyse une colonne des informations sur les commandes des clients, identifiant les codes d'état et combinant les noms et prénoms. Il insère également des lignes vides si nécessaire. Cependant, le temps de traitement devient excessif pour les grandes colonnes en raison des appels fréquents à Range.getValue() et Range.setValue().

Optimisations

Pour réduire le temps de traitement, il est recommandé de minimiser les appels aux services de Google, notamment Range.getValue() et Range.setValue(). Les optimisations suivantes peuvent être mises en œuvre :

  • Réduire les appels de service : Évitez de passer des appels redondants vers les serveurs de Google. Par exemple, au lieu d'utiliser Range.getValue() et Range.setValue() dans une boucle, lisez une fois toutes les données nécessaires dans un tableau et réécrivez-les dans la feuille de calcul en un seul lot.
  • Regardez -Ahead Caching : Google Apps Script met en cache les valeurs pour réduire les appels répétés. Optimisez les scripts en minimisant l'alternance des commandes de lecture et d'écriture, permettant ainsi au cache d'être utilisé efficacement.
  • Utiliser des tableaux : Récupérez des données dans un tableau (un tableau JavaScript bidimensionnel) et effectuez des opérations sur les données dans le tableau. Cela réduit le nombre d'appels de lecture et d'écriture effectués sur la feuille de calcul.
  • Évitez l'alternance lecture/écriture : Évitez d'alterner les commandes de lecture et d'écriture, car cela peut contourner le mécanisme de mise en cache anticipée. Regroupez des opérations similaires (par exemple, lecture ou écriture).

Améliorations du code

Vous trouverez ci-dessous un script optimisé qui résout le problème du temps de traitement excessif :

function format() {
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET = SS.getActiveSheet();
  const LAST_ROW = SHEET.getRange('A:A').getLastRow();
  let row, range1, cellValue, offset1, offset2, offset3;

  // Loop through all cells in column A
  for (row = 0; row < LAST_ROW; row++) {
    range1 = SHEET.getRange(row + 1, 1);

    // If cell substring is a number, skip it as substring cannot process numbers
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') continue;

    // Check for the state code prefix "-"
    const DASH = cellValue.substring(0, 1);

    // Get neighboring cells
    offset1 = range1.offset(1, 0).getValue();
    offset2 = range1.offset(2, 0).getValue();
    offset3 = range1.offset(3, 0).getValue();

    // Handle state code "-"
    if (DASH === '-') {
      // Merge cells 1 and 2 and write "Order complete" in cell 2
      range1.offset(1, 0).setValue(offset1 + ' ' + offset2);
      range1.offset(2, 0).setValue('Order complete');
    }

    // Insert cell if offset 3 is not blank
    if (DASH === '-' && offset3 !== '') {
      // Select cells from 3 rows down
      SHEET.getRange(row + 1, 1, LAST_ROW)
        .offset(3, 0)
        .moveTo(range1.offset(4, 0));
    }
  }
}
Copier après la connexion

En suivant ces optimisations, le script réduira considérablement le temps de traitement en minimisant les appels coûteux à Range.getValue() et Range.setValue().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal