Dokumen ini mencantumkan praktik terbaik yang akan membantu Anda meningkatkan performa skrip.
Meminimalkan panggilan ke layanan lain
Menggunakan operasi JavaScript dalam skrip Anda jauh lebih cepat daripada memanggil layanan lain. Apa pun yang dapat Anda lakukan 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 dapat menemukan cara untuk meminimalkan panggilan yang dilakukan skrip ke layanan tersebut.
Pertimbangkan untuk berkolaborasi menggunakan drive bersama
Jika sedang mengerjakan project skrip dengan developer lain, Anda dapat berkolaborasi dalam project Apps Script menggunakan drive bersama. File di drive bersama adalah milik grup, bukan perorangan. Hal ini memudahkan pengembangan dan pemeliharaan project.
Menggunakan operasi batch
Skrip biasanya perlu membaca data dari {i>spreadsheet<i}, melakukan penghitungan, lalu menulis hasil data ke {i>spreadsheet<i}. Google Apps Script sudah memiliki beberapa pengoptimalan bawaan, seperti menggunakan caching di awal untuk mengambil apa yang mungkin diperoleh skrip dan menulis cache untuk menyimpan apa yang kemungkinan akan ditetapkan.
Anda dapat menulis skrip untuk memaksimalkan penggunaan cache bawaan, dengan meminimalkan jumlah operasi baca dan tulis. Perintah baca dan tulis bergantian berjalan lambat. Untuk mempercepat skrip, baca semua data ke dalam array dengan satu perintah, lakukan operasi apa pun pada data dalam array, dan tulis datanya dengan satu perintah.
Berikut ini contohnya — contoh yang tidak boleh Anda ikuti atau gunakan. Skrip
menggunakan kode berikut untuk menetapkan warna latar belakang setiap sel dalam
petak spreadsheet 100 x 100. Contoh 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 ini tidak efisien: skrip berulang melalui 100 baris dan 100 kolom, penulisannya berturut-turut hingga 10.000 sel. Cache write-back Google Apps Script sangat membantu, karena memaksa write-back menggunakan flush di akhir setiap baris. Karena disimpan di cache, hanya ada 100 panggilan ke Spreadsheet.
Namun, kode tersebut dapat dibuat jauh lebih efisien dengan mengelompokkan panggilan. Berikut adalah penulisan ulang di mana rentang sel dibaca ke dalam array yang disebut warna, operasi penetapan warna dilakukan pada data dalam array, dan nilai-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).setBackgroundColors(colors);
Kode yang tidak efisien ini memerlukan waktu sekitar 70 detik untuk dijalankan. Kode yang efisien akan berjalan hanya dalam 1 detik.
Menghindari library dalam skrip yang menggunakan banyak UI
Library adalah cara mudah untuk menggunakan kembali kode,
tetapi sedikit meningkatkan waktu yang diperlukan untuk memulai skrip. Penundaan ini
tidak terlihat untuk skrip yang berjalan relatif lama (seperti skrip utilitas untuk
membersihkan file Google Drive), tetapi untuk antarmuka pengguna
Layanan HTML sisi klien yang melakukan panggilan google.script.run
berulang dan berjalan singkat,
penundaan ini akan memengaruhi setiap panggilan. Karena masalah ini, library harus
digunakan secara efisien dalam add-on, dan Anda dapat
menghindarinya dalam skrip non-add-on yang membuat banyak panggilan google.script.run
.
Menggunakan layanan Cache
Anda dapat menggunakan Layanan Cache untuk menyimpan resource ke dalam cache di antara eksekusi skrip. Dengan menyimpan data dalam cache, Anda dapat mengurangi frekuensi pengambilan data. Pertimbangkan skenario saat Anda memiliki feed RSS di example.com yang memerlukan waktu 20 detik untuk diambil, dan Anda ingin mempercepat akses berdasarkan permintaan rata-rata. Contoh di bawah ini menunjukkan cara menggunakan Layanan Cache untuk mempercepat akses ke data ini.
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;
}
Meski Anda masih harus menunggu selama 20 detik jika item tidak ada dalam cache, akses berikutnya akan berjalan sangat cepat hingga item tersebut habis masa berlakunya di luar cache dalam 25 menit.