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 sẽ giúp bạn cải thiện hiệu suất của tập lệnh.

Giảm thiểu cuộc gọi đến các dịch vụ khác

Việc sử dụng toán tử JavaScript trong tập lệnh của bạn nhanh hơn nhiều 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 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ư yêu cầu đến Trang tính, Tài liệu, Trang web, 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 cách giảm thiểu 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 cùng các nhà phát triển khác thực hiện một dự án tập lệnh, bạn có thể cộng tác trên các dự án Apps Script thông qua bộ nhớ dùng chung. Các tệp trong bộ nhớ dùng chung thuộc quyền sở hữu của nhóm chứ không phải cá nhân. Điều này giúp việc phát triển và bảo trì dự án trở nên dễ dàng hơn.

Sử dụng thao tác hàng loạt

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

Bạn có thể viết tập lệnh để tận dụng tối đa bộ nhớ đệm tích hợp sẵn, 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 bị chậm. Để tăng tốc tập lệnh, hãy đọc tất cả dữ liệu trong một mảng bằng một lệnh, thực hiện mọi thao tác đối với dữ liệu trong mảng đó và ghi dữ liệu ra bằng một lệnh.

Sau đây là một ví dụ – một ví dụ bạn không nên làm theo hoặc không nên sử dụng. Tập lệnh dùng mã sau đây để đặt màu nền của mỗi ô trong lưới bảng tính 100 x 100. Hàm này dùng làm hàm có tên 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 không hiệu quả: nó lặp lại qua 100 hàng và 100 cột, ghi liên tiếp đến 10.000 ô. Bộ nhớ đệm ghi lại của Google Apps Script rất hữu ích, vì bộ nhớ đệm này buộc ghi lại bằng cách xả dữ liệu ở cuối mỗi dòng. Do được lưu vào bộ nhớ đệm nên chỉ có 100 lệnh gọi đến Bảng tính.

Tuy nhiên, mã có thể hiệu quả hơn nhiều bằng cách phân lô các lệnh gọi. Dưới đây là quá trình ghi lại, trong đó dải ô được đọc thành một mảng có tên là màu, thao tác gán 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).setBackgroundColors(colors);

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 sử dụng thư viện trong tập lệnh nặng về giao diện người dùng

Thư viện là một cách thuận tiện để sử dụng lại mã, nhưng sẽ làm tăng nhẹ thời gian cần thiết để khởi động 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 lâu (chẳng hạn như tập lệnh tiện ích để dọn dẹp tệp Google Drive), nhưng đối với giao diện người dùng HTML Service 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ễ này 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 thư viện trong tiện ích bổ sung, và bạn nên tránh sử dụng các thư viện này trong các 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 quá trình 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 tìm nạp dữ liệu. Hãy xem xét trường hợp bạn có 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 đối với yêu cầu trung bình. Ví dụ bên dưới cho thấy cách sử dụng Dịch vụ 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;
  }

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