Cách Kéo Dài Thời Gian Chạy Của Apps Script Hơn 6 Phút

Google Apps Script có giới hạn thời gian chạy tối đa là 6 phút cho các tập lệnh được kích hoạt bằng giao diện người dùng và 30 phút cho các trigger. Nếu bạn đang xử lý một lượng lớn dữ liệu hoặc một tác vụ phức tạp, bạn có thể gặp phải vấn đề về thời gian chạy bị giới hạn. Tuy nhiên, bạn có thể vượt qua giới hạn này bằng cách lưu tiến trình vào bộ nhớ cache và tạo các trigger để tiếp tục quy trình sau khi thời gian chạy hiện tại kết thúc. Bài viết này sẽ hướng dẫn bạn cách làm điều đó.

Bước 1: Lưu Tiến Trình Vào Cache

Khi xử lý một lượng lớn dữ liệu, bạn có thể chia nhỏ công việc thành các phần nhỏ hơn và lưu lại tiến trình hiện tại vào cache để tiếp tục sau đó. Đoạn mã dưới đây minh họa cách lưu và lấy dữ liệu từ cache:

function processLargeData() {
  var cache = CacheService.getScriptCache();
  var progress = cache.get('progress');
  progress = progress ? parseInt(progress) : 0;

  var sheet = SpreadsheetApp.openById('YOUR_SHEET_ID').getSheetByName('Sheet1');
  var data = sheet.getDataRange().getValues();
  var totalRows = data.length;

  for (var i = progress; i < totalRows; i++) {
    // Xử lý từng dòng dữ liệu
    // Nếu thời gian chạy gần hết, lưu tiến trình lại và dừng
    if (i % 100 === 0 && new Date().getTime() - scriptStartTime > 280000) {
      cache.put('progress', i);
      ScriptApp.newTrigger('processLargeData')
              .timeBased()
              .after(60000) // 60 giây sau tiếp tục chạy
              .create();
      return;
    }

    // Xử lý dữ liệu, ví dụ: Logger.log(data[i]);
  }

  // Hoàn tất quy trình
  cache.remove('progress');
  Logger.log('Quy trình đã hoàn tất');
}
Cách Kéo Dài Thời Gian Chạy Của Apps Script Hơn 6 Phút

Bước 2: Tạo Trigger để Tiếp Tục Quy Trình

Để tiếp tục quy trình khi thời gian chạy hiện tại kết thúc, bạn cần tạo một trigger mới chạy sau một khoảng thời gian nhất định. Điều này đảm bảo quy trình của bạn sẽ không bị gián đoạn. Đoạn mã dưới đây tạo một trigger mới mỗi khi tiến trình được lưu lại:

function continueProcessing() {
  var cache = CacheService.getScriptCache();
  var progress = cache.get('progress');

  if (progress) {
    processLargeData();
  } else {
    Logger.log('Không còn dữ liệu để xử lý');
  }
}

Bước 3: Kết Hợp và Triển Khai

Khi đã có các đoạn mã trên, bạn có thể kết hợp chúng thành một quy trình xử lý dữ liệu lớn hiệu quả mà không bị giới hạn bởi thời gian chạy của Apps Script. Đừng quên thay thế YOUR_SHEET_ID bằng ID của Google Sheet mà bạn đang sử dụng.

Ví Dụ Cụ Thể

Giả sử bạn có một bảng tính với hàng trăm ngàn dòng dữ liệu cần xử lý. Sử dụng cách tiếp cận này, bạn có thể chia nhỏ quá trình xử lý và tiếp tục cho đến khi hoàn tất:

function startProcessing() {
  var cache = CacheService.getScriptCache();
  cache.remove('progress'); // Đảm bảo bắt đầu từ đầu

  processLargeData();
}

Chạy hàm startProcessing() để bắt đầu quy trình. Mỗi khi thời gian gần hết, hàm processLargeData() sẽ tự động lưu lại tiến trình và tạo một trigger mới để tiếp tục sau 60 giây. Khi tất cả dữ liệu đã được xử lý, trigger sẽ tự động dừng.

Kết Luận

Bằng cách sử dụng CacheService và ScriptApp trigger, bạn có thể vượt qua giới hạn thời gian chạy của Google Apps Script và xử lý một lượng lớn dữ liệu mà không lo ngại về thời gian. Đây là một kỹ thuật hữu ích cho các quy trình phức tạp và giúp đảm bảo rằng mọi tác vụ của bạn đều được hoàn thành một cách trơn tru.

Dịch vụ lập trình ứng dụng

🎯 Lập trình API, Python, Node JS, Telegram Bot, Automate Workflow, Power Apps and Apps Script.

📒 Nhận dạy Lập trình Apps Script, Power Apps từ cơ bản đến nâng cao.

📞 +84 78 600 5534 (Zalo, WhatsApp, Telegram)

💻 Github

🌏 appscript.online

Viết một bình luận