Tài liệu này liệt kê các phương pháp hay nhất để cải thiện hiệu suất tập lệnh.
Giảm thiểu các lệnh gọi đến các dịch vụ khác
Việc sử dụng các thao tác JavaScript trong tập lệnh sẽ nhanh hơn so với việc gọi các dịch vụ khác. Mọi thao tác bạn thực hiện trong Google Apps Script đều nhanh hơn so với việc tìm nạp dữ liệu từ các máy chủ của Google hoặc máy chủ bên ngoài, chẳng hạn như các yêu cầu đối với Trang tính, Tài liệu, Sites, Dịch và UrlFetch. Các tập lệnh của bạn sẽ chạy nhanh hơn nếu bạn giảm thiểu các lệnh gọi dịch vụ.
Cộng tác bằng bộ nhớ dùng chung
Nếu bạn làm việc trên một dự án kịch bản với các nhà phát triển khác, hãy cộng tác bằng ổ đĩa dùng chung. Các tệp trong bộ nhớ dùng chung thuộc sở hữu của nhóm chứ không phải cá nhân, giúp việc phát triển và duy trì dự án trở nên dễ dàng hơn.
Sử dụng các thao tác hàng loạt
Tập lệnh thường đọc dữ liệu từ bảng tính, thực hiện các phép tính và ghi kết quả trở lại. Apps Script sử dụng tính năng tối ưu hoá tích hợp như xem trước và lưu vào bộ nhớ đệm khi ghi.
Tối đa hoá tính năng lưu vào bộ nhớ đệm tích hợp bằng cách giảm thiểu số lượt đọc và ghi. Các lệnh đọc và ghi luân phiên diễn ra chậm. Để tăng tốc một tập lệnh, hãy đọc tất cả dữ liệu vào một mảng bằng một lệnh, thực hiện các thao tác trên dữ liệu mảng và ghi dữ liệu bằng một lệnh.
Tránh đọc và ghi luân phiên như trong ví dụ không hiệu quả này:
// 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();
}
Tập lệnh này không hiệu quả vì nó lặp lại qua 10.000 ô với các thao tác ghi liên tiếp. Mặc dù bộ nhớ đệm ghi lại giúp ích, nhưng việc gọi theo lô hiệu quả hơn nhiều:
// 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);
Mã không hiệu quả mất khoảng 70 giây để chạy, trong khi mã hiệu quả chỉ mất 1 giây để chạy.
Tránh các thư viện trong tập lệnh có giao diện người dùng phức tạp
Thư viện rất thuận tiện cho việc sử dụng lại mã nhưng lại làm tăng thời gian khởi động tập lệnh. Độ trễ này có thể nhận thấy trong giao diện người dùng Dịch vụ HTML phía máy khách thực hiện các lệnh gọi google.script.run ngắn, lặp lại. Sử dụng thư viện một cách tiết kiệm trong tiện ích bổ sung và tránh sử dụng thư viện trong các tập lệnh thực hiện nhiều lệnh gọi google.script.run.
Sử dụng dịch vụ Bộ nhớ đệm
Sử dụng Dịch vụ bộ nhớ đệm để lưu tài nguyên vào bộ nhớ đệm giữa các lần thực thi tập lệnh. Việc lưu vào bộ nhớ đệm giúp giảm tần suất tìm nạp dữ liệu. Ví dụ sau đây minh hoạ cách sử dụng dịch vụ Bộ nhớ đệm để tăng tốc độ truy cập vào một nguồn cấp dữ liệu RSS chậm.
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;
}
Mặc dù bạn vẫn phải đợi 20 giây nếu mục không có trong bộ nhớ đệm, nhưng các lần truy cập tiếp theo sẽ diễn ra nhanh chóng cho đến khi mục hết hạn.