setValues가 setValue보다 느립니까?

Aug 26 2020

여러 사람이 참여하는 Google Apps Script 스크립트가 실행되는 Google 문서가 있습니다. onEdit사람들이 시트를 편집 할 때 실행 되는 트리거가 있습니다. 내가 알기로 한 사람이 시트를 편집하면 내 onEdit트리거 기능 이 트리거됩니다.

두 번째 사람이 첫 번째 onEdit처리를 완료 하기 전에 시트를 편집하면 첫 번째 인스턴스가 중지되고 두 번째 인스턴스가 첫 번째 인스턴스 onEdit를 완료하지 않고 시작됩니다.

이것을 피하기 위해 나는 onEdit프로세스가 더 적은 시간이 걸리면 겹칠 가능성이 적다 는 이론으로 가능한 한 효율적으로 코드를 만들려고 노력하고 있습니다. 이를 달성하기 위해 읽기 / 쓰기를 최소화하려고했습니다. 일련의 로거 문을 사용하여 시간이 많이 걸리는 코드 줄을 추적했습니다. 내 setValues()라인 중 하나 를 실행하는 데 거의 6 초가 걸립니다. 내가 조정 한 후 시트에 다시 게시되는 큰 배열입니다.

내 질문 :

  1. 않습니다 setValues()호출은 더 이상 이상 걸릴 setValue()?
  2. 않는 setValues()작은 배열의 호출은보다 적은 시간을 setValues()큰 배열의?

나는 하나 setValues()가 1000 setValue()명령 보다 훨씬 빠르다는 것을 알고 있습니다 .

크기에 관계없이 시트에 한 번 쓰는 데 거의 같은 시간이 걸릴 것이라고 가정했습니다. 이번에 최소화 할 수있는 방법이 있습니까?

답변

3 Tanaike Aug 27 2020 at 04:33

Q1 : a setValues()가 a보다 오래 걸리 setValue()나요?

A1 : 아닙니다. 이에 대해 다음 실험 결과에서 확인할 수 있습니다.

Q2 : setValues()소규모 어레이를 호출 할 때 setValues()대형 어레이를 호출 할 때보 다 시간이 덜 걸리 나요?

A2 : 그렇습니다. 이에 대해 다음 실험 결과에서 확인할 수 있습니다.

Q3 : 시트에 한 번 쓰는 데 크기에 관계없이 거의 같은 시간이 걸릴 것이라고 생각했습니다. 이번에 최소화 할 수있는 방법이 있습니까?

A3 : 값을 더 많이 넣는 프로세스 비용을 줄이고 싶을 때 Sheets API를 사용하는 것은 어떻습니까? 이것에 대해서는 "A2"의 그림에서 볼 수 있습니다.

노트 :

  • 위 답변의 근거는 Benchmark : Reading and Writing Spreadsheet using Google Apps Script 입니다.

  • 마찬가지로 마스터의 코멘트 @ , 또한 문제가 해결 될 수 있다고 생각 LockService .

    • LockService의 샘플 스크립트는 stackoverflow에서 볼 수 있다고 생각합니다. Ref