setValues가 setValue보다 느립니까?
여러 사람이 참여하는 Google Apps Script 스크립트가 실행되는 Google 문서가 있습니다. onEdit사람들이 시트를 편집 할 때 실행 되는 트리거가 있습니다. 내가 알기로 한 사람이 시트를 편집하면 내 onEdit트리거 기능 이 트리거됩니다.
두 번째 사람이 첫 번째 onEdit처리를 완료 하기 전에 시트를 편집하면 첫 번째 인스턴스가 중지되고 두 번째 인스턴스가 첫 번째 인스턴스 onEdit를 완료하지 않고 시작됩니다.
이것을 피하기 위해 나는 onEdit프로세스가 더 적은 시간이 걸리면 겹칠 가능성이 적다 는 이론으로 가능한 한 효율적으로 코드를 만들려고 노력하고 있습니다. 이를 달성하기 위해 읽기 / 쓰기를 최소화하려고했습니다. 일련의 로거 문을 사용하여 시간이 많이 걸리는 코드 줄을 추적했습니다. 내 setValues()라인 중 하나 를 실행하는 데 거의 6 초가 걸립니다. 내가 조정 한 후 시트에 다시 게시되는 큰 배열입니다.
내 질문 :
- 않습니다
setValues()호출은 더 이상 이상 걸릴setValue()? - 않는
setValues()작은 배열의 호출은보다 적은 시간을setValues()큰 배열의?
나는 하나 setValues()가 1000 setValue()명령 보다 훨씬 빠르다는 것을 알고 있습니다 .
크기에 관계없이 시트에 한 번 쓰는 데 거의 같은 시간이 걸릴 것이라고 가정했습니다. 이번에 최소화 할 수있는 방법이 있습니까?
답변
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