SetValues có chậm hơn setValue không?
Tôi có một Google Tài liệu với tập lệnh Google Apps Script đang chạy mà nhiều người đóng góp. Có một trình onEditkích hoạt được kích hoạt khi mọi người chỉnh sửa trang tính. Theo tôi hiểu, nếu một người chỉnh sửa trang tính, điều này sẽ onEditkích hoạt chức năng kích hoạt của tôi .
Nếu người thứ hai chỉnh sửa trang tính trước khi quá trình onEditxử lý đầu tiên hoàn thành thì phiên bản đầu tiên sẽ dừng và phiên bản thứ hai onEditbắt đầu mà không kết thúc phiên bản đầu tiên.
Để tránh điều này, tôi đang cố gắng làm cho mã của mình hiệu quả nhất có thể với lý thuyết rằng nếu onEditquy trình mất ít thời gian hơn thì sẽ ít có khả năng trùng lặp hơn. Để thực hiện điều này, tôi đã cố gắng giảm thiểu việc đọc / ghi của mình. Sử dụng một loạt các câu lệnh của trình ghi nhật ký, tôi đã theo dõi các dòng mã tốn thời gian. Tôi nhận thấy rằng một trong các setValues()dòng của tôi mất gần 6 giây để chạy. Đó là một mảng lớn được đưa trở lại trang tính sau khi tôi đã điều chỉnh nó.
Những câu hỏi của tôi:
- Một
setValues()cuộc gọi có mất nhiều thời gian hơn asetValue()? - Lệnh
setValues()gọi của một mảng nhỏ có tốn ít thời gian hơn mộtsetValues()mảng lớn không?
Tôi biết rằng một lệnh setValues()sẽ nhanh hơn nhiều so với 1000 setValue()lệnh.
Tôi đã cho rằng một lần ghi vào trang tính sẽ mất khoảng thời gian như nhau bất kể kích thước. Có cách nào tôi có thể giảm thiểu thời gian này không?
Trả lời
Q1: Có
setValues()mất nhiều thời gian hơn asetValue()không?
A1: Không. Về điều này, bạn có thể thấy từ kết quả thử nghiệm sau đây.
Câu hỏi 2: Lệnh
setValues()gọi của một mảng nhỏ có mất ít thời gian hơn mộtsetValues()mảng lớn không?
A2: Đúng vậy. Về điều này, bạn có thể thấy từ kết quả thử nghiệm sau đây.
Câu hỏi 3: Tôi đã cho rằng một lần ghi vào trang tính sẽ mất khoảng thời gian như nhau bất kể kích thước. Có cách nào tôi có thể giảm thiểu thời gian này không?
A3: Khi bạn muốn giảm chi phí quy trình để đưa các giá trị vào nhiều hơn, hãy sử dụng API Trang tính? Về điều này, bạn có thể thấy nó ở hình "A2".
Ghi chú:
Cơ sở lý luận của các câu trả lời trên là Điểm chuẩn: Đọc và Viết Bảng tính bằng Google Apps Script .
Như nhận xét của @ TheMaster , tôi cũng nghĩ rằng vấn đề của bạn có thể được LockService giải quyết .
- Tôi nghĩ rằng tập lệnh mẫu của LockService có thể được nhìn thấy tại stackoverflow. Tham khảo