setValues ​​ช้ากว่า setValue หรือไม่

Aug 26 2020

ฉันมี Google เอกสารที่มีสคริปต์ Google Apps Script ที่เรียกใช้ซึ่งมีหลายคนร่วมให้ข้อมูล มีonEditทริกเกอร์ที่ลั่นเมื่อมีคนแก้ไขแผ่นงาน ตามที่ฉันเข้าใจหากมีคนแก้ไขแผ่นงานสิ่งนี้จะonEditทำให้เกิดฟังก์ชันทริกเกอร์ของฉัน

หากบุคคลที่สองแก้ไขแผ่นงานก่อนที่การonEditประมวลผลครั้งแรกจะเสร็จสิ้นระบบจะหยุดอินสแตนซ์แรกและคนที่สองจะonEditเริ่มโดยไม่ทำให้แผ่นงานแรกเสร็จ

เพื่อหลีกเลี่ยงปัญหานี้ฉันกำลังพยายามทำให้โค้ดของฉันมีประสิทธิภาพมากที่สุดโดยใช้ทฤษฎีที่ว่าหากonEditกระบวนการใช้เวลาน้อยลงก็มีโอกาสน้อยที่จะทับซ้อน เพื่อให้บรรลุเป้าหมายนี้ฉันได้พยายามลดการอ่าน / เขียนของฉัน การใช้ชุดคำสั่งคนตัดไม้ฉันได้ติดตามโค้ดหลายบรรทัดที่ใช้เวลานาน ฉันสังเกตว่าหนึ่งในsetValues()บรรทัดของฉันใช้เวลาเกือบ 6 วินาทีในการวิ่ง เป็นอาร์เรย์ขนาดใหญ่ที่โพสต์กลับไปที่แผ่นงานหลังจากที่ฉันได้ทำการปรับเปลี่ยนแล้ว

คำถามของฉัน:

  1. การsetValues()โทรใช้เวลานานกว่า a setValue()?
  2. การsetValues()เรียกอาร์เรย์ขนาดเล็กใช้เวลาน้อยกว่าsetValues()อาร์เรย์ขนาดใหญ่หรือไม่?

ฉันรู้ว่าหนึ่งsetValues()จะเร็วกว่า 1,000 setValue()คำสั่ง

ฉันสันนิษฐานว่าการเขียนลงแผ่นควรใช้เวลาประมาณเท่ากันโดยไม่คำนึงถึงขนาด มีวิธีใดบ้างที่ฉันสามารถลดเวลานี้ได้?

คำตอบ

3 Tanaike Aug 27 2020 at 04:33

Q1: setValues()ใช้เวลานานกว่า a setValue()?

A1: ไม่ใช่ เกี่ยวกับเรื่องนี้คุณสามารถดูได้จากผลการทดลองต่อไปนี้

Q2: การsetValues()เรียกอาร์เรย์ขนาดเล็กใช้เวลาน้อยกว่าsetValues()อาร์เรย์ขนาดใหญ่หรือไม่?

A2: ใช่ เกี่ยวกับเรื่องนี้คุณสามารถดูได้จากผลการทดลองต่อไปนี้

Q3: ฉันคิดว่าการเขียนลงแผ่นควรใช้เวลาประมาณเท่ากันโดยไม่คำนึงถึงขนาด มีวิธีใดบ้างที่ฉันสามารถลดเวลานี้ได้?

A3: เมื่อคุณต้องการลดต้นทุนกระบวนการในการใส่ค่าให้มากขึ้นคุณจะใช้ชีต API ได้อย่างไร เกี่ยวกับเรื่องนี้คุณสามารถดูได้ที่รูป "A2"

บันทึก:

  • เหตุผลของคำตอบข้างต้นเป็นเกณฑ์มาตรฐาน: อ่านและการเขียน Spreadsheet ใช้ Google Apps Script

  • ในฐานะที่เป็น@ คิดเห็น themaster ของผมยังคิดว่าปัญหาของคุณอาจจะแก้ไขได้โดยการLockService

    • ฉันคิดว่าสคริปต์ตัวอย่างของ LockService สามารถดูได้ที่ stackoverflow อ้างอิง