Maison >interface Web >js tutoriel >Pourquoi mon script Google Apps est-il si lent et comment puis-je optimiser l'utilisation de « getValues ​​» et « setValues ​​» ?

Pourquoi mon script Google Apps est-il si lent et comment puis-je optimiser l'utilisation de « getValues ​​» et « setValues ​​» ?

DDD
DDDoriginal
2024-12-01 03:05:14747parcourir

Why is my Google Apps Script so slow, and how can I optimize `getValues` and `setValues` usage?

Temps de traitement long en raison d'une utilisation excessive de getValues ​​et setValues

Problème :

Le le code souffre d'une utilisation excessive des méthodes getValues ​​et setValues, ce qui peut avoir un impact significatif sur le temps de traitement, en particulier pour ensembles de données plus volumineux.

Techniques d'optimisation :

Réduire les appels de service :

  • Éviter les appels inutiles vers Google Apps Services de scripts. Au lieu de cela, mettez les données en cache localement et exploitez-les dans le script.

Mise en cache anticipée :

  • Google Apps Script utilise une apparence intégrée -mise en cache anticipée pour récupérer les données susceptibles d'être nécessaires.

Réduire la lecture/écriture Opérations :

  • Opérations de lecture et d'écriture par lots en récupérant et en manipulant les données dans des tableaux. Cela réduit le nombre d'appels au serveur.

Évitez les lectures/écritures alternées :

  • Les commandes de lecture et d'écriture alternées perturbent la mise en cache anticipée. . Planifiez les opérations pour minimiser ce modèle alterné.

Utilisez des tableaux :

  • Utilisez des tableaux pour stocker efficacement les données. Récupérez toutes les données dans un tableau avec un seul appel getValues, effectuez des opérations dessus, puis réécrivez-les avec un seul appel setValues.

Exemple :

Considérez l'extrait de code suivant :

// Slow version: Alternating read and write operations
const sourceRange = SpreadsheetApp.getActiveSheet().getRange("A1:D2");
const targetRange = sourceRange.offset(2, 0);
for (let i = 0; i < sourceRange.getNumRows(); i++) {
  for (let j = 0; j < sourceRange.getNumColumns(); j++) {
    const value = sourceRange.getCell(i + 1, j + 1).getValue();
    targetRange.getCell(i + 1, j + 1).setValue(value);
  }
}

// Fast version: Batch read and write operations
const sourceValues = sourceRange.getValues();
targetRange.setValues(sourceValues);

En regroupant les opérations de lecture et d'écriture, le deuxième code L'extrait réduit considérablement le nombre d'appels aux services et améliore le temps de traitement.

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!

Déclaration:
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