ปัญหาคลาสสิกของ GAS
เมื่อข้อมูลใน Google Sheet มีจำนวนมาก (หลักหมื่น–แสนแถว)
- ⏱ Script timeout (6 นาที)
- 🐌 หน้าเว็บค้าง
- ❌ โหลดไม่ครบ
- ❌ quota เต็มเร็ว
สาเหตุหลัก
GAS + Sheet ไม่เหมาะกับการ “อ่านทีละแถว / ทีละเซลล์”
แต่เหมาะกับการ “อ่านเป็นก้อน (Array)”
แนวคิดของ Batch Loading
Batch = แบ่งข้อมูลก้อนใหญ่ → เป็นก้อนเล็กหลายรอบ
แทนที่จะโหลด 100,000 แถวครั้งเดียว
👉 แบ่งเป็น 1,000 แถว × 100 รอบ
หลักการสำคัญของ Batch ใน GAS
1️⃣ อ่าน Sheet ครั้งเดียวต่อรอบ
2️⃣ ส่งข้อมูลไป Client ทีละชุด
3️⃣ Client เรียกซ้ำอัตโนมัติ
4️⃣ แสดง Progress ให้ผู้ใช้เห็น
🧩 โครงสร้างระบบ (ภาพรวม)
ตัวอย่างพื้นฐาน : โหลดข้อมูลแบบ Batch
🧱 Google Sheet
ชื่อชีต : data
1️⃣ GAS : ฟังก์ชัน Batch
อธิบาย
| ตัวแปร | ความหมาย |
|---|---|
| offset | แถวที่โหลดไปแล้ว |
| limit | จำนวนต่อรอบ |
| rows | ข้อมูลที่โหลด |
| done | โหลดครบหรือยัง |
2️⃣ Client (HTML + JS)
ตัวอย่างประยุกต์ใช้จริง
1) ระบบ LMS
- โหลดรายชื่อนักเรียน
- โหลดคะแนน
- โหลดประวัติการส่งงาน
ประโยชน์
- หน้าเว็บไม่ค้าง
- ครูเปิดดูหลายครั้งได้เร็ว
2) Dashboard ผู้บริหาร
- โหลดข้อมูลย้อนหลังหลายปี
- แสดงกราฟแบบเรียลไทม์
เทคนิคเสริม
3) ระบบไฟล์ Drive
- แสดงไฟล์หลายหมื่นไฟล์
- โหลดทีละโฟลเดอร์
4) ระบบทะเบียน / ประวัติ
- ค้นหาจากข้อมูลจำนวนมาก
- โหลดเฉพาะหน้าที่ต้องใช้
Best Practices (มืออาชีพใช้)
✅ ใช้
getDisplayValues()setTimeout()ฝั่ง JS- CacheService
- limit 500–2000
❌ หลีกเลี่ยง
- อ่านทีละแถว
appendRow()ใน loop- ส่ง Object ซ้อนลึกไป Client
สรุป
| หัวข้อ | Batch |
|---|---|
| รองรับข้อมูลใหญ่ | ✅ |
| ป้องกัน timeout | ✅ |
| UX ดี | ✅ |
| Production Ready | ✅ |
