setValues ช้ากว่า setValue หรือไม่
ฉันมี Google เอกสารที่มีสคริปต์ Google Apps Script ที่เรียกใช้ซึ่งมีหลายคนร่วมให้ข้อมูล มีonEditทริกเกอร์ที่ลั่นเมื่อมีคนแก้ไขแผ่นงาน ตามที่ฉันเข้าใจหากมีคนแก้ไขแผ่นงานสิ่งนี้จะonEditทำให้เกิดฟังก์ชันทริกเกอร์ของฉัน
หากบุคคลที่สองแก้ไขแผ่นงานก่อนที่การonEditประมวลผลครั้งแรกจะเสร็จสิ้นระบบจะหยุดอินสแตนซ์แรกและคนที่สองจะonEditเริ่มโดยไม่ทำให้แผ่นงานแรกเสร็จ
เพื่อหลีกเลี่ยงปัญหานี้ฉันกำลังพยายามทำให้โค้ดของฉันมีประสิทธิภาพมากที่สุดโดยใช้ทฤษฎีที่ว่าหากonEditกระบวนการใช้เวลาน้อยลงก็มีโอกาสน้อยที่จะทับซ้อน เพื่อให้บรรลุเป้าหมายนี้ฉันได้พยายามลดการอ่าน / เขียนของฉัน การใช้ชุดคำสั่งคนตัดไม้ฉันได้ติดตามโค้ดหลายบรรทัดที่ใช้เวลานาน ฉันสังเกตว่าหนึ่งในsetValues()บรรทัดของฉันใช้เวลาเกือบ 6 วินาทีในการวิ่ง เป็นอาร์เรย์ขนาดใหญ่ที่โพสต์กลับไปที่แผ่นงานหลังจากที่ฉันได้ทำการปรับเปลี่ยนแล้ว
คำถามของฉัน:
- การ
setValues()โทรใช้เวลานานกว่า asetValue()? - การ
setValues()เรียกอาร์เรย์ขนาดเล็กใช้เวลาน้อยกว่าsetValues()อาร์เรย์ขนาดใหญ่หรือไม่?
ฉันรู้ว่าหนึ่งsetValues()จะเร็วกว่า 1,000 setValue()คำสั่ง
ฉันสันนิษฐานว่าการเขียนลงแผ่นควรใช้เวลาประมาณเท่ากันโดยไม่คำนึงถึงขนาด มีวิธีใดบ้างที่ฉันสามารถลดเวลานี้ได้?
คำตอบ
Q1:
setValues()ใช้เวลานานกว่า asetValue()?
A1: ไม่ใช่ เกี่ยวกับเรื่องนี้คุณสามารถดูได้จากผลการทดลองต่อไปนี้
Q2: การ
setValues()เรียกอาร์เรย์ขนาดเล็กใช้เวลาน้อยกว่าsetValues()อาร์เรย์ขนาดใหญ่หรือไม่?
A2: ใช่ เกี่ยวกับเรื่องนี้คุณสามารถดูได้จากผลการทดลองต่อไปนี้
Q3: ฉันคิดว่าการเขียนลงแผ่นควรใช้เวลาประมาณเท่ากันโดยไม่คำนึงถึงขนาด มีวิธีใดบ้างที่ฉันสามารถลดเวลานี้ได้?
A3: เมื่อคุณต้องการลดต้นทุนกระบวนการในการใส่ค่าให้มากขึ้นคุณจะใช้ชีต API ได้อย่างไร เกี่ยวกับเรื่องนี้คุณสามารถดูได้ที่รูป "A2"
บันทึก:
เหตุผลของคำตอบข้างต้นเป็นเกณฑ์มาตรฐาน: อ่านและการเขียน Spreadsheet ใช้ Google Apps Script
ในฐานะที่เป็น@ คิดเห็น themaster ของผมยังคิดว่าปัญหาของคุณอาจจะแก้ไขได้โดยการLockService
- ฉันคิดว่าสคริปต์ตัวอย่างของ LockService สามารถดูได้ที่ stackoverflow อ้างอิง