Dokumen ini mencantumkan praktik terbaik untuk meningkatkan performa skrip.
Meminimalkan panggilan ke layanan lain
Menggunakan operasi JavaScript dalam skrip Anda lebih cepat daripada memanggil layanan lain. Semua yang Anda lakukan dalam Google Apps Script itu sendiri lebih cepat daripada mengambil data dari server Google atau server eksternal, seperti permintaan ke Spreadsheet, Dokumen, Situs, Terjemahan, dan UrlFetch. Skrip Anda akan berjalan lebih cepat jika Anda meminimalkan panggilan layanan.
Berkolaborasi dengan drive bersama
Jika Anda mengerjakan project skrip dengan developer lain, berkolaborasilah menggunakan drive bersama. File di drive bersama dimiliki oleh grup, bukan individu, sehingga pengembangan dan pemeliharaan project menjadi lebih mudah.
Menggunakan operasi batch
Skrip biasanya membaca data dari spreadsheet, melakukan perhitungan, dan menulis kembali hasilnya. Apps Script menggunakan pengoptimalan bawaan seperti look-ahead dan caching tulis.
Maksimalkan caching bawaan dengan meminimalkan operasi baca dan tulis. Perintah baca dan tulis yang bergantian akan lambat. Untuk mempercepat skrip, baca semua data ke dalam array dengan satu perintah, lakukan operasi pada data array, dan tulis data dengan satu perintah.
Hindari operasi baca dan tulis yang bergantian seperti yang ditunjukkan dalam contoh yang tidak efisien ini:
// 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();
}
Skrip ini tidak efisien karena melakukan loop melalui 10.000 sel dengan operasi tulis berurutan. Meskipun cache tulis balik membantu, panggilan batch jauh lebih efisien:
// 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);
Kode yang tidak efisien memerlukan waktu sekitar 70 detik untuk dijalankan, sedangkan kode yang efisien hanya memerlukan waktu 1 detik.
Menghindari library dalam skrip yang menggunakan banyak UI
Pustaka berguna untuk menggunakan kembali kode, tetapi
meningkatkan waktu startup skrip. Penundaan ini terlihat di antarmuka pengguna
HTML Service sisi klien yang melakukan panggilan
berulang dan berdurasi singkat google.script.run. Gunakan library dengan hemat di add-on
dan hindari library dalam skrip yang melakukan banyak google.script.run panggilan.
Menggunakan layanan Cache
Gunakan layanan Cache untuk menyimpan cache resource di antara eksekusi skrip. Caching mengurangi frekuensi pengambilan data. Contoh berikut menunjukkan cara menggunakan layanan Cache untuk mempercepat akses ke feed RSS yang lambat.
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;
}
Meskipun Anda masih menunggu 20 detik jika item tidak ada dalam cache, akses berikutnya akan cepat hingga masa berlaku item berakhir.
Set data besar dan perhitungan kompleks
Google Spreadsheet adalah alat yang canggih, tetapi seiring bertambahnya set data dan perhitungan menjadi lebih kompleks, Anda mungkin mengalami masalah performa seperti spreadsheet yang lambat, error IMPORTRANGE, dan waktu tunggu skrip habis.
Kapan harus menggunakan database
Jika spreadsheet Anda mendekati batas 10 juta sel atau jika Anda memiliki banyak formulir terhubung (misalnya, 10 atau lebih) dan formula lintas sheet yang kompleks, pertimbangkan untuk menggunakan solusi database khusus.
- Google Cloud SQL: Layanan database relasional yang terkelola sepenuhnya untuk MySQL, PostgreSQL, dan SQL Server. Gunakan layanan JDBC untuk terhubung ke Cloud SQL atau database eksternal lainnya seperti Oracle atau MongoDB (melalui bridge yang sesuai).
- BigQuery: Data warehouse serverless yang sangat skalabel. Anda dapat menggunakan Connected Sheets untuk menganalisis set data BigQuery yang besar langsung di Spreadsheet, atau menggunakan layanan BigQuery untuk berinteraksi dengan data dari Apps Script.
Pengoptimalan performa formula
Penggunaan formula tertentu yang berat dapat memperlambat spreadsheet Anda:
- ARRAYFORMULA: Meskipun berguna, perhitungan
ARRAYFORMULAskala besar dapat memerlukan biaya yang tinggi. - VLOOKUP dan OFFSET: Fungsi ini dapat berjalan lambat pada set data yang besar. Pertimbangkan untuk menggunakan
INDEXdanMATCHatau Apps Script untuk melakukan pencarian secara lebih efisien dalam memori. - IMPORTRANGE: Penggunaan
IMPORTRANGEyang sering di banyak sheet dapat menyebabkan "Error Internal" jika sheet sumber berukuran besar atau berada di bawah beban yang berat. Menggabungkan data ke dalam sumber terpusat dapat membantu.
Penanganan waktu tunggu skrip
Apps Script memiliki batas waktu eksekusi (biasanya 6 menit per eksekusi, atau 30 menit untuk beberapa akun Google Workspace). Jika skrip Anda sering mengalami error karena melebihi batas eksekusi:
- Gunakan operasi batch: Seperti yang disebutkan di bagian Menggunakan operasi batch, minimalkan panggilan ke spreadsheet dan layanan lainnya.
- Pisahkan tugas: Bagi tugas besar menjadi bagian yang lebih kecil yang masing-masing dapat diselesaikan dalam batas waktu.
- Gunakan pemicu untuk kelanjutan: Siapkan pemicu berbasis waktu yang dapat diinstal untuk melanjutkan proses yang berjalan lama. Skrip Anda dapat menyimpan status saat ini (misalnya, indeks baris terakhir yang diproses) menggunakan layanan Properti dan melanjutkan dari titik tersebut pada eksekusi berikutnya.