หากเราใช้ Local Storage เป็นตัวผ่านข้อมูล ไฟล์ JSON ของเราก็จะถูกจำกัดไว้ที่ประมาณ 5MB – 10MB โดยปริยาย เพราะถ้าข้อมูลในหน้าจอใหญ่กว่านั้น มันจะสั่ง setItem (บันทึก) ลง Browser ไม่เข้า และโปรแกรมก็จะค้างหรือ Error ทันทีครับ
💡 ถ้าอยากไปให้ไกลกว่า 5MB โดยยังเป็น JSON อยู่ ต้องทำอย่างไร?
หากในอนาคตข้อมูลคุณเยอะจนทะลุ 5MB (ซึ่งน่าจะหลายหมื่นหรือแสนแถว) เราต้องเปลี่ยนวิธีคิดจากการ “Auto-Save ลง Browser” เป็นการ “ทำงานบนหน่วยความจำ (RAM) แล้ว Save ลงไฟล์ตรงๆ” ครับ
นี่คือ 2 แนวทางที่คุณสามารถเลือกใช้ได้ในอนาคต:
1. ระบบ “ทำงานสด” (In-Memory Processing)
วิธีนี้คือการตัดวงจร Local Storage ออกไปเลยครับ:
- การโหลด: คุณกดปุ่ม Upload ไฟล์ JSON เข้ามา ข้อมูลจะวิ่งเข้าไปอยู่ในตัวแปร
dataListใน RAM ของคอมพิวเตอร์ (ซึ่ง RAM มีความจุเยอะมาก 8GB/16GB รับ JSON ขนาด 100MB ได้สบายๆ) - การบันทึก: คุณไม่ต้องสั่ง
saveDataToLocalStorage()ทุกครั้งที่แก้ แต่ให้คุณกดปุ่ม “Save/Download JSON” เพื่อเขียนไฟล์ทับลงในเครื่องคอมพิวเตอร์แทน - สรุป: Browser จะทำหน้าที่เป็นแค่ “เครื่องคิดเลข” หรือ “หน้ากาก” ส่วนไฟล์ JSON คือ “สมุดจด” ที่แท้จริง
2. ใช้เทคโนโลยี File System Access API (ล้ำที่สุด)
อันนี้คือวิธีที่ทำให้เว็บแอปฯ ทำงานเหมือนโปรแกรมคอมพิวเตอร์จริงๆ (เช่น Word/Excel):
- โปรแกรมจะขออนุญาตคุณเพื่อ “เชื่อมต่อกับไฟล์ในเครื่อง” โดยตรง
- เมื่อคุณแก้ไขข้อมูลในหน้าเว็บ มันจะแอบไปแก้ข้อมูลในไฟล์
.jsonที่อยู่ในเครื่องคุณให้ทันทีโดยไม่ต้องกดโหลดใหม่ - ข้อดี: ไม่ผ่าน Local Storage เลย จึงไม่มีขีดจำกัด 5MB และไม่ต้องกด Download บ่อยๆ
- ข้อเสีย: ปัจจุบันรองรับได้ดีที่สุดบน Chrome และ Edge เท่านั้น (Safari/Firefox ยังมีข้อจำกัด)
🛡️ คำแนะนำสำหรับปัจจุบัน (เพื่อเตรียมตัว)
ตราบใดที่ไฟล์คุณยังไม่ถึง 5MB (คุณสามารถเช็คได้จากขนาดไฟล์ JSON ที่โหลดออกมา) ระบบที่คุณมีอยู่ตอนนี้ “ปลอดภัยและใช้ง่ายที่สุด” ครับ
แต่ถ้าวันไหนไฟล์เริ่มใหญ่เข้าใกล้ 5MB คุณสามารถปรับโค้ดเพียงเล็กน้อยเพื่อข้ามขีดจำกัดนี้ได้:
- ปิดระบบ
saveDataToLocalStorage()(เพื่อไม่ให้ Browser บล็อกการทำงาน) - เปลี่ยนมาเน้นระบบ “ปุ่มสีทอง” ที่เราทำไว้ ให้คนใช้รู้ตัวว่าต้องกด Download ทุกครั้งก่อนปิดหน้าจอ เพื่อให้ไฟล์ JSON ในเครื่องเป็นเวอร์ชันล่าสุด
สรุปคือ: ใช่ครับ ถ้าจะให้ไฟล์ใหญ่กว่า 5MB เราต้องเลิกฝากความจำไว้ที่ Local Storage แล้วหันมาใช้ระบบ “อ่าน-เขียนไฟล์” โดยตรงแทน ซึ่งโค้ดส่วนใหญ่ที่คุณมีอยู่ตอนนี้รองรับการข้ามไปใช้วิธีนั้นได้ไม่ยากครับ