Ce document liste les bonnes pratiques pour améliorer les performances des scripts.
Limiter les appels à d'autres services
L'utilisation d'opérations JavaScript dans votre script est plus rapide que l'appel d'autres services. Tout ce que vous accomplissez dans Google Apps Script lui-même est plus rapide que la récupération de données depuis les serveurs de Google ou un serveur externe, comme les requêtes adressées à Sheets, Docs, Sites, Translate et UrlFetch. Vos scripts s'exécuteront plus rapidement si vous minimisez les appels de service.
Collaborer avec des Drive partagés
Si vous travaillez sur un projet de script avec d'autres développeurs, collaborez à l'aide de Drive partagés. Les fichiers d'un Drive partagé appartiennent au groupe et non à des personnes spécifiques, ce qui facilite le développement et la maintenance des projets.
Utiliser des opérations par lot
Les scripts lisent généralement les données d'une feuille de calcul, effectuent des calculs et réécrivent les résultats. Apps Script utilise une optimisation intégrée, comme la prélecture et la mise en cache des écritures.
Maximisez la mise en cache intégrée en minimisant les lectures et les écritures. L'alternance des commandes de lecture et d'écriture est lente. Pour accélérer un script, lisez toutes les données dans un tableau avec une seule commande, effectuez des opérations sur les données du tableau et écrivez les données avec une seule commande.
Évitez d'alterner les lectures et les écritures, comme dans cet exemple inefficace :
// DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
// FOR DEMONSTRATION ONLY
var cell = sheet.getRange('a1');
for (var y = 0; y < 100; y++) {
xcoord = xmin;
for (var x = 0; x < 100; x++) {
var c = getColorFromCoordinates(xcoord, ycoord);
cell.offset(y, x).setBackgroundColor(c);
xcoord += xincrement;
}
ycoord -= yincrement;
SpreadsheetApp.flush();
}
Le script est inefficace,car il effectue une boucle sur 10 000 cellules avec des écritures consécutives. Bien que le cache d'écriture différée soit utile, le regroupement des appels est beaucoup plus efficace :
// OKAY TO USE THIS EXAMPLE or code based on it.
var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
xcoord = xmin;
colors[y] = new Array(100);
for (var x = 0; x < 100; x++) {
colors[y][x] = getColorFromCoordinates(xcoord, ycoord);
xcoord += xincrement;
}
ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgrounds(colors);
L'exécution du code inefficace prend environ 70 secondes, tandis que celle du code efficace ne prend qu'une seconde.
Éviter les bibliothèques dans les scripts à forte utilisation d'UI
Les bibliothèques sont pratiques pour réutiliser du code, mais elles augmentent le temps de démarrage du script. Ce délai est perceptible dans les interfaces utilisateur HTML Service côté client qui effectuent des appels google.script.run répétés et de courte durée. Utilisez les bibliothèques avec parcimonie dans les modules complémentaires et évitez-les dans les scripts qui effectuent de nombreux appels google.script.run.
Utiliser le service Cache
Utilisez le service de cache pour mettre en cache les ressources entre les exécutions de script. La mise en cache réduit la fréquence d'extraction des données. L'exemple suivant montre comment utiliser le service de cache pour accélérer l'accès à un flux RSS lent.
function getRssFeed() {
var cache = CacheService.getScriptCache();
var cached = cache.get("rss-feed-contents");
if (cached != null) {
return cached;
}
// This fetch takes 20 seconds:
var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml");
var contents = result.getContentText();
cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
return contents;
}
Si l'élément n'est pas dans le cache, vous devez toujours attendre 20 secondes, mais les accès suivants sont rapides jusqu'à l'expiration de l'élément.