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 tập lệnh của bạn.

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

Việc sử dụng hoạt động JavaScript trong tập lệnh của bạn nhanh hơn đáng kể so với gọi cho 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 cuộc 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 đến Trang tính, Tài liệu, Sites, Translate, 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 các lệnh gọi mà tập lệnh thực hiện đến các dịch vụ đó.

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

Nếu đang cùng thực hiệ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 trong các dự án Apps Script bằng bộ nhớ 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. Chiến dịch này giúp phát triển và bảo trì dự án dễ dàng hơn.

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

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 một bảng tính. Ứng dụng của Google Tập lệnh đã có sẵn một số tính năng tối ưu hoá, chẳng hạn như sử dụng tính năng lưu vào bộ nhớ đệm xem trước để truy xuất nội dung mà một tập lệnh có thể nhận được và ghi vào bộ nhớ đệm để lưu thông tin có thể được đặt.

Bạn có thể viết tập lệnh để tận dụng tối đa chức năng lưu vào bộ nhớ đệm tích hợp sẵn, bằng cách giúp giảm thiểu số lượt đọc và ghi. Lệnh đọc và ghi xen kẽ 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 bất kỳ thao tác nào đố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à bạn không nên làm theo hoặc không nên sử dụng. Một tập lệnh sử dụng mã sau đây để đặt màu nền của mỗi ô trong một Lưới bảng tính 100 x 100. Hàm này dùng làm hàm được đặt tên getColorFromCoordinates() (không hiển thị ở đây) để xác định màu nào cần sử dụng cho mỗi ô:

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

Tuy nhiên, bạn có thể thực hiện mã hiệu quả hơn nhiều bằng cách phân lô các lệnh gọi. Sau đây là một viết lại trong đó dải ô được đọc thành một mảng được gọi là màu, màu thao tác gán được thực hiện trên dữ liệu trong mảng và các giá trị trong mảng sẽ đượ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 trong chỉ 1 giây!

Tránh sử dụng thư viện trong những tập lệnh nặng 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 chúng sẽ làm tăng một chút thời gian cần thiết để bắt đầu tập lệnh. Độ trễ này sẽ khó nhận thấy đối với các tập lệnh chạy tương đối lâu (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 phía máy khách Giao diện người dùng HTML Service khiến người dùng lặp lại google.script.run chạy trong thời gian ngắn cuộc gọi, độ trễ sẽ ảnh hưởng đến mọi cuộc gọi. Do vấn đề này, thư viện phải được sử dụng một cách thận trọng trong tiện ích bổ sung và bạn nên tránh các lệnh gọi đó 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ể 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 mà bạn 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 theo yêu cầu trung bình. Chiến lược phát hành đĩa đơn ví dụ bên dưới minh hoạ cách sử dụng Dịch vụ bộ nhớ đệm để tăng tốc độ truy cập vào .

  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, các lượt truy cập tiếp theo sẽ rất nhanh cho đến khi mục hết hạn trong bộ nhớ đệm trong 25 phút.