🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Ottimizzazione delle Performance degli Script Google Apps

Codegrind TeamAug 23 2024

L’ottimizzazione delle performance degli script Google Apps è fondamentale per garantire che i tuoi script funzionino in modo rapido ed efficiente, anche su dataset di grandi dimensioni o con utenti multipli. Questa guida esplorerà le tecniche migliori per migliorare la velocità e l’efficienza del tuo codice, riducendo i tempi di esecuzione e ottimizzando l’uso delle risorse.

Riduzione delle Chiamate alle API di Google

1. Utilizzare Batch di Operazioni

Riduci al minimo le chiamate ripetute alle API raggruppando operazioni multiple in una singola chiamata.

function batchOperations() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A1:A100");
  var values = range.getValues();

  for (var i = 0; i < values.length; i++) {
    values[i][0] = values[i][0] * 2; // Esempio: moltiplicazione di ogni valore per 2
  }

  range.setValues(values); // Un'unica chiamata per impostare i valori
  Logger.log("Operazione batch completata.");
}

2. Ridurre le Iterazioni Sui Fogli

Evita di iterare sui dati foglio per foglio. Invece, raccogli i dati in blocco e manipolali in memoria prima di scriverli nuovamente.

function optimizeSheetIteration() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();

  for (var i = 0; i < data.length; i++) {
    data[i][1] = data[i][1].toUpperCase(); // Esempio: trasformazione in maiuscolo
  }

  sheet.getDataRange().setValues(data);
  Logger.log("Iterazione ottimizzata completata.");
}

Minimizzare l’Uso di Risorse

1. Evitare Operazioni Inefficienti con i Loop

Evita di eseguire operazioni complesse o chiamate API all’interno di loop, poiché possono rallentare drasticamente il tuo script.

function inefficientLoop() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var values = [];

  for (var i = 1; i <= 1000; i++) {
    values.push([i, Math.random()]); // Generazione di valori
  }

  sheet.getRange(1, 1, values.length, values[0].length).setValues(values); // Unica chiamata API fuori dal loop
  Logger.log("Loop ottimizzato completato.");
}

2. Utilizzare Cache per Dati Statici

Se il tuo script utilizza frequentemente dati statici, considera l’uso della cache per evitarne il recupero ripetuto.

function useCache() {
  var cache = CacheService.getScriptCache();
  var cachedData = cache.get("staticData");

  if (!cachedData) {
    // Simula il recupero di dati costosi da un'altra fonte
    cachedData = "Dati statici";
    cache.put("staticData", cachedData, 21600); // Cache per 6 ore
  }

  Logger.log("Dati recuperati dalla cache: " + cachedData);
}

Ottimizzazione dei Tempi di Esecuzione

1. Evitare i Trigger OnEdit su Grandi Fogli

L’uso di trigger onEdit su fogli di grandi dimensioni può rallentare le prestazioni. Ottimizza questi trigger per eseguire solo quando necessario.

function onEdit(e) {
  var range = e.range;
  if (range.getColumn() === 2 && range.getRow() > 1) {
    range.setBackground("yellow"); // Esegui azioni solo su colonne e righe specifiche
  }
}

2. Ottimizzare le Funzioni Personalizzate

Le funzioni personalizzate che manipolano grandi quantità di dati possono essere ottimizzate per migliorare le performance.

function customFunctionOptimization(range) {
  var data = range.getValues();
  var results = [];

  for (var i = 0; i < data.length; i++) {
    results.push([data[i][0] * 2]); // Esempio: moltiplicazione di ogni valore per 2
  }

  return results;
}

Uso Efficiente della Memoria

1. Gestione Attenta dei Dati di Grandi Dimensioni

Quando lavori con grandi set di dati, suddividi i processi in batch più piccoli per ridurre l’uso della memoria.

function processLargeDataset() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange("A1:A10000");
  var data = range.getValues();

  for (var i = 0; i < data.length; i += 1000) {
    var batch = data.slice(i, i + 1000);
    // Processa ogni batch
  }

  Logger.log("Elaborazione batch completata.");
}

2. Liberare Risorse Non Necessarie

Assicurati di liberare risorse o variabili che non sono più necessarie per evitare il consumo eccessivo di memoria.

function releaseResources() {
  var largeArray = new Array(10000).fill(0);

  // Utilizza l'array per qualche operazione

  largeArray = null; // Libera la memoria
  Logger.log("Risorse liberate.");
}

Conclusione

Ottimizzare le performance degli script Google Apps è essenziale per garantire che le tue applicazioni funzionino in modo rapido ed efficiente, specialmente quando si gestiscono grandi volumi di dati o si servono molti utenti. Implementando queste tecniche, puoi ridurre i tempi di esecuzione, minimizzare l’uso delle risorse e migliorare l’esperienza utente complessiva.