Dokumen ini mencantumkan praktik terbaik yang akan membantu Anda meningkatkan performa dalam skrip.
Meminimalkan panggilan ke layanan lain
Menggunakan operasi JavaScript dalam skrip Anda jauh lebih cepat dibandingkan memanggil layanan lain. Apa pun yang dapat Anda capai dalam Google Apps Script itu sendiri akan jauh lebih cepat daripada melakukan panggilan yang perlu mengambil data dari server Google atau server eksternal, seperti permintaan ke Spreadsheet, Dokumen, Sites, Terjemahan, UrlFetch, dan sebagainya. Skrip Anda akan berjalan lebih cepat jika Anda menemukan cara untuk meminimalkan panggilan yang dibuat skrip ke layanan tersebut.
Pertimbangkan untuk berkolaborasi menggunakan drive bersama
Jika Anda sedang mengerjakan proyek skrip dengan pengembang lain, Anda bisa berkolaborasi di project Apps Script dengan drive bersama. File di drive bersama dimiliki oleh grup, bukan perorangan. Ini membuat pengembangan dan pemeliharaan proyek menjadi lebih mudah.
Menggunakan operasi batch
Skrip biasanya perlu membaca data dari {i>spreadsheet<i}, melakukan perhitungan, dan kemudian menulis hasil datanya ke {i>spreadsheet<i}. Google Apps Script sudah memiliki beberapa pengoptimalan bawaan, seperti menggunakan cache look-ahead untuk mengambil hal yang kemungkinan akan diperoleh skrip dan menulis cache untuk menyimpan hal yang kemungkinan akan ditetapkan.
Anda bisa menulis skrip untuk mendapatkan manfaat {i>caching<i} bawaan, dengan sehingga meminimalkan jumlah operasi baca dan tulis. Perintah baca dan tulis yang bergantian berjalan lambat. Untuk mempercepat skrip, baca semua data ke dalam array dengan satu perintah, melakukan operasi apa pun pada data dalam {i>array<i}, dan menulis datanya dengan satu perintah.
Berikut ini contohnya — contoh yang tidak boleh Anda ikuti atau gunakan. Naskah
menggunakan kode berikut untuk menetapkan warna latar belakang setiap sel dalam
Ukuran {i>spreadsheet<i} 100 x 100. Ini digunakan sebagai fungsi bernama
getColorFromCoordinates()
(tidak ditampilkan di sini) untuk menentukan warna yang akan digunakan
untuk setiap sel:
// 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 tidak efisien: skrip berulang melalui 100 baris dan 100 kolom, menulis berurutan menjadi 10.000 sel. Cache operasi tulis balik Google Apps Script membantu, karena memaksa operasi tulis balik menggunakan flush di akhir setiap baris. Karena cache, hanya ada 100 panggilan ke {i>Spreadsheet<i}.
Namun, kode tersebut dapat dibuat jauh lebih efisien dengan mengelompokkan panggilan. Berikut adalah penulisan ulang saat rentang sel dibaca ke dalam array yang disebut warna, operasi penetapan warna dilakukan pada data dalam array, dan nilai dalam array ditulis ke spreadsheet:
// 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 ini memerlukan waktu sekitar 70 detik untuk dijalankan. Kode yang efisien berjalan di hanya 1 detik!
Menghindari library dalam skrip yang menggunakan banyak UI
Library adalah cara mudah untuk menggunakan kembali kode,
tetapi mereka sedikit menambah waktu
yang dibutuhkan untuk memulai skrip. Keterlambatan ini
tidak terlihat untuk skrip yang berjalan relatif
lama (seperti skrip utilitas untuk
membersihkan file Google Drive Anda), tetapi untuk sisi klien
Antarmuka pengguna Layanan HTML yang berulang,
berdurasi singkat google.script.run
panggilan, penundaan akan mempengaruhi setiap panggilan. Karena masalah ini, library
digunakan dengan hemat dalam add-on, dan Anda mungkin ingin
menghindarinya dalam skrip non-add-on yang melakukan banyak panggilan google.script.run
.
Menggunakan layanan Cache
Anda dapat menggunakan Layanan Cache untuk meng-cache resource di antara eksekusi skrip. Dengan meng-cache data, Anda dapat mengurangi frekuensi atau jumlah pengambilan data. Pertimbangkan skenario ketika Anda memiliki feed RSS di example.com yang menggunakan 20 detik untuk mengambil, dan Anda ingin mempercepat akses pada permintaan rata-rata. Tujuan contoh di bawah ini menunjukkan cara menggunakan Layanan Cache untuk mempercepat akses ke layanan otomatis dan data skalabel.
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;
}
Sekarang, sementara Anda harus menunggu 20 detik jika item tidak ada dalam {i>cache<i}, akses berikutnya akan berjalan sangat cepat hingga item keluar dari cache dalam 25 menit.