>웹 프론트엔드 >JS 튜토리얼 >빈번한 Range.getValue() 및 Range.setValue() 호출로 인해 발생하는 과도한 처리 시간을 줄이기 위해 Google Apps 스크립트를 최적화하려면 어떻게 해야 합니까?

빈번한 Range.getValue() 및 Range.setValue() 호출로 인해 발생하는 과도한 처리 시간을 줄이기 위해 Google Apps 스크립트를 최적화하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-30 14:58:11492검색

How Can I Optimize Google Apps Script to Reduce Excessive Processing Time Caused by Frequent Range.getValue() and Range.setValue() Calls?

과도한 Range.getValue() 및 Range.setValue() 호출로 인해 처리 시간이 길어질 수 있음

문제 설명

스크립트가 열을 스캔합니다. 고객 주문 정보, 주 코드 식별 및 이름과 성을 결합합니다. 또한 필요한 경우 빈 행을 삽입합니다. 단, Range.getValue(), Range.setValue()의 잦은 호출로 인해 대형 컬럼의 경우 처리 시간이 과도하게 소요됩니다.

최적화

처리 시간을 줄이려면 호출을 최소화하는 것이 좋습니다. Range.getValue() 및 Range.setValue()를 포함한 Google 서비스에 적용됩니다. 다음과 같은 최적화를 구현할 수 있습니다.

  • 서비스 호출 최소화: Google 서버에 대한 중복 호출을 피하세요. 예를 들어 루프에서 Range.getValue() 및 Range.setValue()를 사용하는 대신 필요한 모든 데이터를 배열로 한 번 읽어서 일괄적으로 스프레드시트에 다시 씁니다.
  • 보세요. -Ahead Caching: Google Apps Script는 반복 호출을 줄이기 위해 값을 캐시합니다. 교대로 반복되는 읽기 및 쓰기 명령을 최소화하여 캐시를 효과적으로 활용함으로써 스크립트를 최적화합니다.
  • 배열 사용: 데이터를 배열(2차원 JavaScript 배열)로 검색하고 작업을 수행합니다. 배열 내의 데이터. 이렇게 하면 스프레드시트에 대한 읽기 및 쓰기 호출 수가 줄어듭니다.
  • 읽기/쓰기 교대 방지: 미리보기 캐싱 메커니즘을 우회할 수 있으므로 읽기 및 쓰기 명령을 교대로 사용하지 마세요. 유사한 작업(예: 읽기 또는 쓰기)을 함께 일괄 처리합니다.

코드 개선

다음은 과도한 처리 시간 문제를 해결하는 최적화된 스크립트입니다.

function format() {
  const SS = SpreadsheetApp.getActiveSpreadsheet();
  const SHEET = SS.getActiveSheet();
  const LAST_ROW = SHEET.getRange('A:A').getLastRow();
  let row, range1, cellValue, offset1, offset2, offset3;

  // Loop through all cells in column A
  for (row = 0; row < LAST_ROW; row++) {
    range1 = SHEET.getRange(row + 1, 1);

    // If cell substring is a number, skip it as substring cannot process numbers
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') continue;

    // Check for the state code prefix "-"
    const DASH = cellValue.substring(0, 1);

    // Get neighboring cells
    offset1 = range1.offset(1, 0).getValue();
    offset2 = range1.offset(2, 0).getValue();
    offset3 = range1.offset(3, 0).getValue();

    // Handle state code "-"
    if (DASH === '-') {
      // Merge cells 1 and 2 and write "Order complete" in cell 2
      range1.offset(1, 0).setValue(offset1 + ' ' + offset2);
      range1.offset(2, 0).setValue('Order complete');
    }

    // Insert cell if offset 3 is not blank
    if (DASH === '-' && offset3 !== '') {
      // Select cells from 3 rows down
      SHEET.getRange(row + 1, 1, LAST_ROW)
        .offset(3, 0)
        .moveTo(range1.offset(4, 0));
    }
  }
}

이러한 최적화를 따르면 스크립트는 비용이 많이 드는 Range.getValue() 호출을 최소화하여 처리 시간을 크게 줄입니다. Range.setValue().

위 내용은 빈번한 Range.getValue() 및 Range.setValue() 호출로 인해 발생하는 과도한 처리 시간을 줄이기 위해 Google Apps 스크립트를 최적화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.