Tập lệnh google sheet chậm

Sử dụng các thao tác JavaScript trong tập lệnh của bạn nhanh hơn đáng kể so với việc gọi các dịch vụ khác. Bất cứ điều gì 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 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 đối với Bảng tính, Tài liệu, Trang web, Dịch, Tìm nạp url, 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 cuộc gọi mà tập lệnh thực hiện đối với các dịch vụ đó

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

Nếu bạn đang 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, bạn có thể. 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. Điều này làm cho việc phát triển và bảo trì dự án dễ dàng hơn

Sử dụng hoạt động hàng loạt

Các tập lệnh thường cần đọc dữ liệu từ bảng tính, thực hiện các phép tính và sau đó ghi kết quả của dữ liệu vào bảng tính. Google Apps Script đã có một số tối ưu hóa tích hợp sẵn, chẳng hạn như sử dụng bộ nhớ đệm nhìn trước để truy xuất nội dung mà tập lệnh có thể nhận được và ghi vào bộ nhớ đệm để lưu nội dung có thể đượ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, 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 bị chậm. Để tăng tốc 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 bất kỳ thao tác nào trên dữ liệu trong mảng và ghi dữ liệu ra ngoài bằng một lệnh

Đây là một ví dụ — một ví dụ bạn không nên làm theo hoặc sử dụng. Tập lệnh sử dụng đoạn mã sau để đặt màu nền của mọi ô trong lưới bảng tính 100 x 100. Nó sử dụng như hàm có tên là getColorFromCoordinates() (không hiển thị ở đây) để xác định màu sẽ 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();
  }

Kịch bản không hiệu quả. nó lặp qua 100 hàng và 100 cột, ghi liên tiếp vào 10.000 ô. Bộ đệm ghi lại Google Apps Script hữu ích vì nó buộc ghi lại bằng cách xóa ở cuối mỗi dòng. Do bộ nhớ đệm, chỉ có 100 cuộc gọi đến Bảng tính

Nhưng mã có thể được thực hiện hiệu quả hơn nhiều bằng cách gộp các cuộc gọi. Đây là cách viết lại trong đó phạm vi ô được đọc thành một mảng có tên là màu sắc, 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 ra 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 các thư viện trong các 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 chúng làm tăng một chút thời gian để bắt đầu tập lệnh. Độ trễ này không đáng chú ý đố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 sạch các tệp Google Drive của bạn), nhưng đối với các 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 lặp đi lặp lại trong thời gian ngắn, thì độ trễ này sẽ ảnh hưởng đến mọi . Vì vấn đề này, các thư viện nên được sử dụng một cách tiết kiệm trong các tiện ích bổ sung và bạn có thể muốn tránh sử dụng chúng 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ộ đệm

Bạn có thể sử dụng Dịch vụ bộ đệm để lưu trữ tài nguyên giữa các lần thực thi tập lệnh. Bằng cách lưu trữ dữ liệu vào bộ đệm, bạn có thể giảm số lần hoặc tần suất bạn phải tìm nạp dữ liệu. Xem xét tình huống bạn có nguồn cấp dữ liệu RSS chẳng hạn. 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. Ví dụ dưới đây cho thấy cách sử dụng Dịch vụ bộ đệ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ộ đệ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 trong bộ đệm sau 25 phút

Tại sao tập lệnh trang tính của Google quá chậm?

Nếu mã trong Tập lệnh ứng dụng thường xuyên tương tác với các ứng dụng của google trong khi thực thi mã (chẳng hạn như thường xuyên viết qua lại bảng tính google), thì trong trường hợp đó, mã .

Bạn có thể chạy tập lệnh trong Google Trang tính không?

Google Apps Script cho phép bạn thực hiện những điều mới mẻ và thú vị với Google Trang tính . Bạn có thể sử dụng Apps Script để thêm menu, hộp thoại và thanh bên tùy chỉnh vào Google Trang tính. Nó cũng cho phép bạn viết các chức năng tùy chỉnh cho Trang tính cũng như tích hợp Trang tính với các dịch vụ khác của Google như Lịch, Drive và Gmail.

Tại sao tập lệnh Google của tôi không hoạt động?

Có một vài nguyên nhân có thể gây ra những lỗi này. Máy chủ hoặc hệ thống của Google tạm thời không khả dụng . Đợi một lúc và thử chạy lại tập lệnh. Có lỗi trong tập lệnh của bạn không có thông báo lỗi tương ứng.