Các phương pháp hay nhất

Tài liệu này liệt kê các phương pháp hay nhất giúp bạn cải thiện hiệu suất của 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 đáng kể so với việc gọi các dịch vụ khác. Mọi việc bạn có thể thực hiện trong chính Google Apps Script sẽ nhanh hơn nhiều so với việc thực hiện các lệnh gọi cần tìm nạp dữ liệu từ 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, UrlFetch, v.v. Tập lệnh của bạn sẽ chạy nhanh hơn nếu bạn có thể tìm cách giảm thiểu số lượng lệnh gọi mà tập lệnh thực hiện đối với các dịch vụ đó.

Cân nhắc việc cộng tác bằng bộ nhớ dùng chung

Nếu đang làm việc trên một dự án tập lệnh với các nhà phát triển khác, bạn có thể cộng tác trên các dự án Apps Script 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ủa cá nhân. Điều này 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

Thông thường, tập lệnh cần đọc dữ liệu từ một bảng tính, thực hiện các phép tính, rồi ghi kết quả của dữ liệu vào một bảng tính. Google Apps Script đã có sẵn một số tính năng tối ưu hoá tích hợp, chẳng hạn như sử dụng tính năng lưu vào bộ nhớ đệm dự đoán để truy xuất những gì mà một tập lệnh có khả năng nhận được và ghi vào bộ nhớ đệm để lưu những gì có khả năng được thiết lập.

Bạn có thể viết các tập lệnh để tận dụng tối đa 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ần đọ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 mọi thao tác trên dữ liệu trong mảng và ghi dữ liệu bằng một lệnh.

Sau đây là một ví dụ mà bạn không nên làm theo hoặc sử dụng. Một tập lệnh sử dụng mã sau đây để đặt màu nền cho mọi ô trong lưới bảng tính 100 x 100. Công thức này sử dụng một hàm có tên là getColorFromCoordinates() (không xuất hiện ở đây) để xác định màu cần dùng cho từng ô:

  // 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ả: tập lệnh lặp qua 100 hàng và 100 cột, ghi liên tục vào 10.000 ô. Bộ nhớ đệm ghi lại của Google Apps Script sẽ giúp ích vì bộ nhớ này buộc ghi lại bằng cách sử dụng lệnh flush ở cuối mỗi dòng. Do bộ nhớ đệm, chỉ có 100 lệnh gọi đến Bảng tính.

Tuy nhiên, bạn có thể tăng hiệu quả của mã lên nhiều lần bằng cách gộp các lệnh gọi. Sau đây là một bản viết lại trong đó dải ô được đọc vào một mảng có tên là màu, thao tác chỉ định màu được thực hiện trên dữ liệu trong mảng và các giá trị trong mảng được ghi vào bảng tính:

  // 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); 

Đoạn mã không hiệu quả mất khoảng 70 giây để chạy. Mã hiệu quả chạy chỉ trong 1 giâ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 là một cách thuận tiện để sử dụng lại mã, nhưng chúng sẽ làm tăng nhẹ thời gian cần thiết để bắt đầu tập lệnh. Độ trễ này không đáng kể đối với các tập lệnh chạy tương đối dài (chẳng hạn như tập lệnh tiện ích để dọn dẹp các tệp trên Google Drive), nhưng đối với 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, độ trễ sẽ ảnh hưởng đến mọi lệnh gọi. Do vấn đề này, bạn nên hạn chế sử dụng các thư viện trong tiện ích bổ sung và có thể tránh dùng các thư viện này trong những tập lệnh không phải tiện ích bổ sung thực hiện nhiều lệnh gọi google.script.run.

Sử dụng dịch vụ Bộ nhớ đệm

Bạn có thể 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. Bằng cách lưu dữ liệu vào bộ nhớ đệm, bạn có thể giảm số lần hoặc tần suất phải tìm nạp dữ liệu. Hãy xem xét trường hợp bạn có một nguồn cấp dữ liệu RSS tại example.com mất 20 giây để tìm nạp và bạn muốn tăng tốc độ truy cập vào yêu cầu trung bình. Ví dụ bên dưới cho thấy cách sử dụng Dịch vụ lưu vào bộ nhớ đệm để tăng tốc độ truy cập vào dữ liệu này.

  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;   } 

Giờ đây, 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 rất nhanh cho đến khi mục hết hạn trong bộ nhớ đệm sau 25 phút.