AppSheet โหลดข้อมูลช้าแก้ยังไงดี ? (ฉบับเข้าใจง่าย)

ถึงแม้ว่า AppSheet สามารถทำ Application ออกมาได้ง่ายโดยแทบไม่ต้องเขียนโค้ด แต่หลาย ๆ คนมักจะเจอปัญหาว่าใช้งานไปนาน ๆ แล้ว AppSheet ค้าง หรือ โหลดข้อมูลช้ามาก ๆ ทำให้ผู้ใช้งานบางคนมีปัญหาดูข้อมูลไม่ได้ หรือบันทึกข้อมูลแต่ละทีต้องรอเวลานานมาก ๆ ซึ่งส่วนใหญ่จะเป็นกับ AppSheet ที่ใช้งานมาประมาณนึงแล้ว แถมบางทีจ่ายเงินค่า AppSheet Subscription ไปแล้วก็ยังช้าเหมือนเดิม ในบทความนี้จะแนะนำวิธีการแก้ปัญหาจากง่ายไปยาก เพื่อให้ AppSheet กลับมาใช้ได้ปกติดังเดิม

สนใจให้ทีม Datayolk ทำ / แก้ไข AppSheet ให้ ?

ด้วยประสบการณ์การทำ Application ด้วย AppSheet กว่า 3 ปี
เราสามารถช่วยให้คุณมี Application ไว้ใช้ได้ในต้นทุนที่ต่ำ

เลือกอ่านเฉพาะหัวข้อ -
แนวทางการแก้ไขเมื่อ AppSheet โหลดข้อมูลช้าจากง่ายไปยาก

แนะนำการใช้ AppSheet Performance Profile เพื่อหาสาเหตุที่ AppSheet ช้า

แนะนำการใช้ AppSheet Performance Profile เพื่อหาสาเหตุที่ AppSheet ช้า

หนึ่งในสิ่งสำคัญที่ช่วยให้วิเคราะห์สาเหตุที่ AppSheet ช้าได้คือการใช้ AppSheet Performance Profile ซึ่ง AppSheet Performance Profile คือเครื่องมือในการวิเคราะห์การทำงานของ AppSheet ในรูปแบบ Dashboard โดยบันทึกเวลาในการโหลด หรือบันทึกข้อมูลของ AppSheet แต่ละครั้งว่าใช้เวลาเท่าไหร่ พร้อมให้คำแนะนำที่สามารถนำไปใช้ต่อได้เลย

ข้อดีของ AppSheet Performance Profile คือใช้งานได้ฟรี (ถ้าอยากดูข้อมูลย้อนหลัง หรือกรองข้อมูลอาจจะมีค่าใช้จ่ายเพิ่ม) แต่ข้อจำกัดคือ ต้องให้ผู้ใช้ใช้งาน AppSheet ไปสักพัก ถึงจะมีข้อมูลให้วิเคราะห์

หมายเหตุ: ในส่วนการทำงานของ AppSheet Automation (Bot) สามารถดู Performance ได้ผ่านทาง Automation Monitor

วิธีการใช้งาน AppSheet Performance Profile

หลังจากที่เข้ามาที่ตัว AppSheet แล้วให้กดไปที่ส่วน Manage และเลือกเมนู Monitor และเลือก AppSheet Performance Profile โดยใน Dashboard มีส่วนประกอบดังนี้

วิเคราะห์เวลาเฉลี่ยในการโหลด หรือบันทึกข้อมูลของ AppSheet (Average duration per operation type)

วิเคราะห์เวลาเฉลี่ยในการโหลด หรือบันทึกข้อมูลของ AppSheet (Average duration per operation type)

เราสามารถดูว่าการทำงานส่วนไหนใน AppSheet ที่ช้า และเกิดมาจาก Table ไหน เพื่อจะได้แก้ไขต่อไป

โดยใน AppSheet จะแบ่งการทำงาน (Operation) ออกเป็น 4 อย่างได้แก่

  • App Sync (การโหลดข้อมูล)
  • Add Row (การเพิ่มข้อมูล)
  • Edit Row (การแก้ไขข้อมูล)
  • Delete Row (การลบข้อมูล)

ซึ่งเราจะนำข้อมูลที่ได้ส่วนนี้ไปวิเคราะห์หาทางแก้ไขต่อไป

วิเคราะห์เวลาเฉลี่ยในการทำงานของ Virtual Column (Average virtual column computation time by app version)

วิเคราะห์เวลาเฉลี่ยในการทำงานของ Virtual Column (Average virtual column computation time by app version)

หนึ่งในสิ่งที่ทำให้ AppSheet โหลดข้อมูลช้า มาจากการใช้งาน Virtual Column หรือการใช้สูตรที่ยิ่งข้อมูลเยอะ ยิ่งช้า เช่น SELECT() หรือ LOOKUP() หรือแม้แต่การใช้ Ref Table เกินจำเป็น โดยในส่วนนี้จะโชว์ Field ข้อมูลที่ใช้เวลาในการคำนวนนาน ซึ่งระยะเวลาการคำนวนนานโดยปกติของ AppSheet จะเร็วมาก ๆ อยู่แล้ว (ไม่เกิน 0.010 วินาที) แต่หากมีบาง Field ข้อมูลที่ช้าอาจจะต้องใช้เวลาถึง 1 – 2 วินาทีในการดึงข้อมูลออกมา

แนะนำฟีเจอร์พิเศษ เพื่อปรับปรุง AppSheet ให้ดียิ่งขึ้น

แนะนำฟีเจอร์พิเศษ เพื่อปรับปรุง AppSheet ให้ดียิ่งขึ้น

นอกจากนี้ AppSheet Performance Profile ยังช่วยแนะนำวิธีการปรับปรุง AppSheet ให้เร็วยิ่งขึ้นในตัวอย่างนี้คือการเปิดใช้งาน Server Caching สำหรับ Table ที่แทบไม่ค่อยมีการอัพเดตข้อมูลเลยเป็นต้น หรือแม้แต่การตั้งค่าการ Sync ให้เหมาะสมกับงานเป็นต้น

สนใจเรียน AppSheet กับเรา ?

ไม่ต้องเสียเวลาเรียนรู้ AppSheet ด้วยตัวเอง เพียงแค่เรียนคอร์ส AppSheet Intensive Course ผ่าน Facebook Group กับเรา พร้อมให้คำปรึกษาหลังเรียน

แนวทางการแก้ไขเมื่อ AppSheet โหลดข้อมูลช้าจากง่ายไปยาก

ในบทความจะมาแนะนำแนวทางแก้ไขเมื่อ AppSheet โหลดข้อมูลช้าโดยเราจะจัดกลุ่มตามความยาก ง่าย ในการแก้ไข และข้อแนะนำอื่น ๆ โดยสิ่งที่เราในฐานะนักพัฒนาต้องสังเกตเองคือที่ผู้ใช้บอกว่า AppSheet ช้านั้นคือ ช้าตอนโหลดข้อมูลล่าสุดเข้ามา หรือช้าตอนกดส่งข้อมูลเข้าไปใน AppSheet ซึ่งอาจจะใช้วิธีในการแก้ไขปัญหาไม่เหมือนกัน โดยวิธีการแก้ไขเมื่อ AppSheet ช้ามีดังนี้

ลบ Cell ใน Google Sheet ที่ไม่ได้ใช้แล้ว

ลบ Cell ใน Google Sheet ที่ไม่ได้ใช้แล้ว

วิธีที่ง่ายที่สุดในการเพิ่มความเร็วในการโหลดข้อมูลคือ ลบ Cell ใน Google Sheet ที่ไม่ได้ใช้แล้ว ซึ่งหมายถึง Column ที่ไม่มีข้อมูล (แถวด้านขวา) และ Row ที่ยังไม่ได้เพิ่มข้อมูล (AppSheet จะเพิ่ม Row เองเมื่อมีข้อมูลใหม่) นอกจากนี้ Table (Sheet) บางอันที่ไม่ใช้แล้ว หรือไม่เกี่ยวข้องกับตัว AppSheet ก็ควรต้องลบออกเช่นกัน โดยวิธีการนี้จะเห็นผลได้ชัดถ้าเป็น Google Sheet ที่บันทึกข้อมูลไปเยอะพอสมควรแล้ว

ทุก ๆ 5,000 Cell ที่เพิ่มเข้ามาเท่ากับ 1 วินาทีที่ต้องโหลดข้อมูลเพิ่ม

ถ้ามี X Table (Sheet) ให้เอา 3 หารจะได้เวลาที่อาจจะต้องใช้เพื่อโหลดข้อมูล เช่นถ้ามี 10 Table เท่ากับอาจจะใช้เวลาถึง 3 วินาที

ระดับความยาก: ง่าย

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

แยก AppSheet เป็น App ย่อย ๆ แทนการทำ 1 App ที่มี Table หลายอัน

แยก AppSheet เป็น App ย่อย ๆ แทนการทำ 1 App ที่มี Table หลายอัน

เพราะยิ่ง Google Sheet มีหลาย Table ยิ่งทำให้ AppSheet ทำงานหนักมากขึ้น หนึ่งในอีกวิธีที่ง่ายที่สุดคือการแยก AppSheet เป็น App ย่อย ๆ โดย 1 App คือมีฟังก์ชั่นการใช้งานหลัก ๆ แค่ 1 อย่างเท่านั้น ไม่ควรทำ App สำหรับบันทึกการเข้างาน และจองห้องประชุมอยู่ใน Google Sheet เดียวกัน

ระดับความยาก: ง่าย

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ปิดหรือลดการใช้ Virtual Column , Format rules หรือ Bot ที่ไม่ได้ใช้แล้วใน AppSheet

ปิดหรือลดการใช้ Virtual Column , Format rules หรือ Bot ที่ไม่ได้ใช้แล้วใน AppSheet

หากเป็นไปได้ให้เราลองดูข้อมูลจาก AppSheet Performance Profile เพื่อดูว่ามี Virtual Column หรือ Format rules หรือ Automation (Bot) ส่วนไหนที่เราไม่ได้ใช้ / ไม่จำเป็นแล้วมั้ย เพราะในบางกรณีตัว AppSheet ยังคงทำงานในส่วนนี้อยู่ แม้ว่าเราจะไม่ได้ใช้แล้วก็ตาม

โดยการเขียนสูตร AppSheet ใน Virtual Column ที่ไม่ดีเป็นสาเหตุหลัก ๆ ของการทำให้ AppSheet โหลดข้อมูลช้า ซึ่งหากจำเป็นต้องใช้จริง ๆ ลองดูข้อต่อไป

ระดับความยาก: ง่าย

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ใช้ USERSETTINGS ในการบันทึกการตั้งค่าการใช้งาน

ใช้ USERSETTINGS ในการบันทึกการตั้งค่าการใช้งาน

สูตรใน AppSheet ที่มีการเรียกซ้ำ ๆ เราสามารถบันทึกการคำนวน หรือการตั้งค่าไว้ใน USERSETTINGS แทนได้ โดย USERSETTINGS เดิมทีใช้บันทึกข้อมูลเกี่ยวกับผู้ใช้งานเช่น ภาษาที่ใช้ใน App แต่หากประยุกต์ดี ๆ เราสามารถใช้บันทึกการตั้งค่าใน App ของเราได้ โดยตัวอย่างที่มีคนใช้บ่อยคือ

การบันทึก Role หรือสิทธิการใช้งานใน App โดยที่จากปกติเราต้อง SELECT() หา email ว่า email นี้มีสิทธิการใช้งานแบบไหน (อ่านเทคนิคการจำกัดสิทธิการใช้งานใน AppSheet พร้อมตัวอย่างการนำไปใช้) เราสามารถทำให้ AppSheet จำค่าสิทธิการใช้งานแทนที่จะต้องคำนวนใหม่ทุกครั้งได้ ซึ่งอาจจะเอาไปใช้ทดแทน Virtual Column ได้ในบางกรณี

ลิ้งค์ที่เกี่ยวข้อง USERSETTINGS()

ระดับความยาก: ปานกลาง

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ใช้ Background Sync ในการบันทึกและโหลดข้อมูล

ใช้ Background Sync ในการบันทึกและโหลดข้อมูล

สำหรับบางกรณีที่ App ของเราไม่ได้จำเป็นต้องเห็นข้อมูลที่คนอื่นบันทึกเข้ามาทันที เราสามารถใช้เทคนิค Delay Sync ได้ โดย Delay Sync คือการค่อย ๆ แสดงผลก่อนแล้วค่อยบันทึกข้อมูลภายหลัง ถ้าเปิดใช้โหมดนี้จะเห็นว่าเมื่อเราบันทึกข้อมูลใน AppSheet จะไม่มีจังหวะโหลดข้อมูลคั่นกลาง (เพราะข้อมูลจะถูกบันทึกเป็น Background process ในภายหลัง) โดย Delay Sync ควรใช้ควบคู่กับ

  • Sync on start (เมื่อเปิด App ใหม่จะโหลดข้อมูลให้ทันที)
  • Automatic updates (หากเปิด App ทิ้งไว้ระบบจะโหลดข้อมูลให้ใหม่ทุก ๆ 30 นาที)

ระดับความยาก: ง่าย

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า หรือ เมื่อ AppSheet บันทึกข้อมูลช้า

ลดขนาดไฟล์ที่จะบันทึกเข้ามาใน AppSheet

ลดขนาดไฟล์ที่จะบันทึกเข้ามาใน AppSheet

หนึ่งในเหตุผลที่ทำให้ AppSheet ช้าคือเราเอาของที่ไม่จำเป็นมาบันทึกข้อมูลไว้ใน Google Drive เช่นไฟล์เอกสารต่าง ๆ หรือรูปภาพที่มีความละเอียดสูง

สำหรับการอัปโหลดรูปภาพ กรณีเป็นรูปภาพสำหรับใช้ใน App เท่านั้น เช่นรูปสินค้า รูปไอคอนใน App เราควรเลือก Data Type เป็น Thumbnail เพราะจะมีการปรับความละเอียดให้เล็ก (เพราะใช้แสดงผลใน App เท่านั้นเลยไม่ต้องเก็บไฟล์ขนาดใหญ่) แต่หากภาพนั้นต้องเอาไปใช้ต่อนอก App หรือนำไปทำ Report ต่อ อาจจะต้องเลือก Data Type เป็น Image เหมือนเดิม

ในบางกรณีหากมีการอัปโหลดรูป หรือไฟล์เยอะ เราจะแนะนำให้เป็นการอัปโหลดผ่าน Google Drive ของบริษัท แล้วแนบเป็นลิ้งค์ URL เข้ามาแทน ทำให้จัดเก็บง่ายกว่า และ App เร็วขึ้นเยอะเลย

ระดับความยาก: ปานกลาง

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า หรือ เมื่อ AppSheet บันทึกข้อมูลช้า

Server Caching เพื่อบันทึก Table บางอันที่ไม่ค่อยอัพเดตไว้

Server Caching เพื่อบันทึก Table บางอันที่ไม่ค่อยอัพเดตไว้

เมื่อเปิดใช้งาน Server Caching จะทำให้ AppSheet จำค่าใน Table ที่ตั้งค่าเป็น Read only ใน Table settings ไว้ ทำให้ไม่ต้องโหลดข้อมูลซ้ำ ๆ และกรณีมีการอัพเดตและต้องการข้อมูล ณ ปัจจุบัน อาจจะต้องมีกด Sync เพื่อโหลดข้อมูลกลับมา จึงเหมาะกับการใช้งานใน Offline mode มากกว่า

ระดับความยาก: ยาก

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ลิ้งค์ที่เกี่ยวข้อง Server Caching?

Delta Sync อัพเดตข้อมูลจาก Table เฉพาะ Table ที่มีการบันทึกข้อมูลใหม่

Delta Sync อัพเดตข้อมูลจาก Table เฉพาะ Table ที่มีการบันทึกข้อมูลใหม่

Delta Sync เป็นอีกเทคนิคในการโหลดข้อมูลเฉพาะข้อมูลที่มีการบันทึกค่าเข้าไปหมดเท่านั้น ทำให้ AppSheet ไม่ต้องโหลดข้อมูลใหม่ทุก Sheet แต่อาจจะมีข้อจำกัดที่หาก Google Sheet ของเรามีการผูกสูตรใน Sheet ตรง ๆ หรือมีการแก้ไขใน Sheet ข้อมูลนั้นอาจจะไม่ถูกอัพเดต เพราะ AppSheet ไม่รู้ว่ามีการอัพเดตข้อมูล ทำให้การใช้ Delta Sync ต้องใช้อย่างระมัดระวัง และทดสอบก่อนเสมอ

ตัว Delta Sync ไม่สามารถใช้งานร่วมกับ Security Filter ได้

ระดับความยาก: ยาก

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ลิ้งค์ที่เกี่ยวข้อง Syncing taking too long (Delta Sync)?

Security Filter ในการกรองข้อมูล

Security Filter ในการกรองข้อมูล

Security Filter ใน AppSheet คือขั้นกว่าของ Slicer โดย Slicer ใน AppSheet คือการที่ AppSheet โหลดข้อมูลทั้งหมดก่อนแล้วค่อยกรองเนื้อหาตามเงื่อนไขการใช้งาน ซึ่งทำให้มีข้อมูลมากมายที่โหลดมาแต่ไม่ได้แสดงผล แต่ Security Filter ใช้วิธีโหลดข้อมูลตามเงื่อนไข ทำให้เราโหลดข้อมูลเฉพาะเท่าที่ใช้ โดยเราต้องเขียนสูตร AppSheet เพื่อกรองข้อมูลออกมา ซึ่งได้ประโยชน์ทั้งความเร็วในการโหลดข้อมูล และกรองบางข้อมูลที่ไม่อยากให้ผู้ใช้งานเห็นออกไป

ระดับความยาก: ปานกลาง

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ลิ้งค์ที่เกี่ยวข้อง Security filters: The Essentials

เพิ่มความเร็วในการโหลดข้อมูลด้วยการซื้อ AppSheet Core Plan ขึ้นไป

เพิ่มความเร็วในการโหลดข้อมูลด้วยการซื้อ AppSheet Core Plan ขึ้นไป

ความจริงแล้ว เมื่อ AppSheet ถูก Deploy และมีการจ่ายเงินค่า AppSheet Subscription Plan ไปแล้ว ตัวระบบจะรองรับการทำ Parallel processing (เหมือนปกติมี 1 คนทำงานให้ แต่ตอนนี้มี 4 คนช่วยทำงานให้พร้อมกัน) อ่านรายละเอียดเกี่ยวกับ Pricing ของ AppSheet ที่นี่

ระดับความยาก: ง่าย

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

Data Partitioning แบ่งข้อมูลแบบเดียวกันไปเก็บในหลาย ๆ Sheet

Data Partitioning แบ่งข้อมูลแบบเดียวกันไปเก็บในหลาย ๆ Sheet

Data Partitioning คือเทคนิคการแบ่งข้อมูลไปเก็บไว้หลาย ๆ Table หรือหลาย ๆ Data Source ซึ่งทำให้เราสามารถบันทึกข้อมูลได้มากขึ้นกว่าข้อจำกัดของ Google Sheet

เช่นเราทำ App ลงทะเบียนลูกค้า โดยมี Field ข้อมูลดังนี้

  • ชื่อลูกค้า
  • บริษัท
  • ปีที่ซื้อสินค้า

เราสามารถแบ่งข้อมูลออกเป็นหลาย ๆ Table เช่น Table A เก็บข้อมูลลูกค้าปี 2023, Table B เก็บข้อมูลลูกค้าปี 2024 และเราจะใช้ USERSETTINGS() หรือเทคนิคการ Filter อื่น ๆ เพื่อเลือกจะโหลด หรือบันทึกข้อมูลให้ถูก Sheet วิธีนี้คือการแบ่งข้อมูลเป็นส่วนย่อย ๆ ให้ง่ายต่อการดูแล แต่มีข้อควรระวังคือ Data Schema ของทุก Sheet ต้องเหมือนกันหมด ไม่งั้นจะบันทึกหรือโหลดข้อมูลได้ไม่ถูกต้อง

สำหรับใครที่อยากลองทำดูสามารถไปลองดูวิธีการทำได้ในตัวอย่าง AppSheet นี้เลย

ระดับความยาก: ยาก

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ลิ้งค์ที่เกี่ยวข้อง Scale using data partitions

ย้ายไปใช้ Cloud SQL เมื่อ Google Sheet ไม่เหมาะแก่การใช้งานแล้ว

Google Sheet สามารถรองรับการบันทึกข้อมูลได้สูงสุดแค่ 10 ล้าน Cell แต่จากการที่มีคนลองทดลองพบว่าจริง ๆ แล้ว ลิมิตของ Google Sheet อยู่ที่ประมาณ 5 ล้าน Cell โดยอิงจากว่าเราจะสามารถเปิด Google Sheet ได้โดยหน้าจอไม่ค้างไปเสียก่อน ซึ่งถ้าตีซะว่าใน 1 Table (Sheet) เรามีข้อมูลที่บันทึกอยู่ 10 Column เท่ากับว่าเราจะบันทึกข้อมูลได้ทั้งหมดประมาณ 5 แสน Row ซึ่งในจุดนี้ก็ต้องประเมินดูว่า AppSheet จะถึงลิมิตของ Google Sheet ในอีกกี่ปี

หากดูแล้ว ข้อมูลอาจจะเต็มในเวลาอันรวดเร็ว เราแนะนำให้หันไปใช้ Cloud SQL เป็นฐานข้อมูลสำหรับเชื่อมต่อการทำงานกับ AppSheet โดยตรงแทน

ระดับความยาก: ยาก

เหมาะสำหรับ: เมื่อ AppSheet โหลดข้อมูลช้า

ลิ้งค์ที่เกี่ยวข้อง Connecting AppSheet to Cloud SQL

แหล่งอ้างอิง