ถ้า del ข้อมูลใน local storage ก็จะเห็น 0% อันนี้ถูกแล้ว
แต่เมื่อโหลดเข้ามา ซึ่งผมทดสอบไฟล์ json เดียวกัน กับระบบที่ใช้ local storage ปรากฏว่า ขนาดที่โชว์ local storage เท่ากันเลย
เป็นข้อสังเกตที่ดีมากครับ! สาเหตุที่คุณเห็นขนาดข้อมูลเท่ากันเป๊ะทั้งที่เป็นระบบ In-Memory แล้ว มีคำอธิบายทางเทคนิคที่เรียบง่ายดังนี้ครับ:
1. ฟังก์ชัน “เช็คขนาด” อาจจะยังนับตัวแปรใน RAM (หากเขียนโค้ดรวมไว้)
โดยปกติแล้ว Local Storage คือพื้นที่บน Disk ของ Browser แต่ถ้าโค้ดที่ใช้เช็คพื้นที่ (Storage usage) ถูกเขียนให้ไปนับขนาดของตัวแปร dataList โดยตรงด้วย มันก็จะโชว์ตัวเลขเท่าเดิมครับ เพราะข้อมูลชุดเดียวกันย่อมมีขนาดเท่ากัน ไม่ว่าจะวางไว้ใน RAM หรือวางไว้ใน Local Storage
2. ตรวจสอบฟังก์ชัน loadDataFromJSON (ตอนอัปโหลด)
ให้คุณลองไปดูที่โค้ดตอนที่คุณ “กดเลือกไฟล์ JSON” เข้ามาครับ ว่าในฟังก์ชันนั้นมีบรรทัดนี้แอบอยู่หรือเปล่า:
JavaScript
// ลองค้นหาในจุดที่กดยืนยันการ Import ไฟล์
localStorage.setItem(STORAGE_KEY, JSON.stringify(dataList));
หากมีบรรทัดนี้อยู่ แม้คุณจะแก้ที่อื่นแล้ว แต่ตอน “โหลดไฟล์” ระบบมันดันเอาข้อมูลจากไฟล์ไปเขียนลง Local Storage อีกครั้งหนึ่ง ตัวเลข Usage จึงพุ่งกลับมาเท่าเดิมครับ
🛠️ วิธีแก้ไขให้เป็น In-Memory 100% จริงๆ
ให้ไปที่ฟังก์ชันสำหรับการ Import/Upload JSON แล้วตรวจสอบว่ามันทำงานแบบนี้หรือไม่:
JavaScript
// ฟังก์ชันอ่านไฟล์ JSON (ตัวอย่าง)
function handleFileUpload(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = function(e) {
const importedData = JSON.parse(e.target.result);
// ✅ 1. ใส่แค่ใน RAM (ตัวแปร global)
dataList = importedData;
// ❌ 2. ห้ามมีบรรทัด localStorage.setItem ตรงนี้เด็ดขาด!
// localStorage.setItem(STORAGE_KEY, JSON.stringify(dataList));
// ✅ 3. สั่งแสดงผลและอัปเดตสถานะ
renderDataToTable();
updateBackupStatus(); // จะเป็นสีเขียวทันทีเพราะข้อมูลใน RAM ตรงกับไฟล์ที่เพิ่งโหลด
};
reader.readAsText(file);
}
🧪 วิธีพิสูจน์ที่ชัดเจนที่สุด
- โหลดไฟล์เข้าไป จนตัวเลขขึ้น (เช่น 2.33%)
- กด Refresh หน้าจอ (F5)
- ถ้าตัวเลข Usage กลับไปเป็น 0% ทันทีที่ Refresh (เพราะ RAM ถูกล้าง) แสดงว่าระบบ In-Memory ทำงานถูกต้องแล้วครับ ข้อมูลประกันจะ “หายไปจาก Browser” ทุกครั้งที่ปิดหน้าจอ (ซึ่งเราต้องการแบบนี้เพื่อข้ามขีดจำกัด 5MB)
- แต่ถ้า Refresh แล้วตัวเลขยังเป็น 2.33% และข้อมูลยังโชว์หราอยู่ แสดงว่ายังมีโค้ดบางจุดแอบสั่ง
setItemลง Local Storage อยู่ครับ
💡 สรุปความต่าง
- ระบบเดิม (Local Storage): Refresh แล้ว ข้อมูลยังอยู่ พื้นที่ยังเต็ม
- ระบบใหม่ (In-Memory): Refresh แล้ว ข้อมูลหาย พื้นที่ว่าง (ต้องโหลดไฟล์ใหม่เพื่อเริ่มงาน)
การที่พื้นที่โชว์เท่าเดิมตอนโหลดไฟล์เสร็จ เป็นเพราะมีคำสั่งบันทึกลง Local Storage แฝงอยู่ในปุ่ม Upload ครับ ลองหาดูนะครับ ถ้าเอาออกได้ คุณจะเห็นตัวเลข Usage นิ่งอยู่ที่เกือบ 0% ตลอดกาลครับ!
คุณอยากให้ผมช่วยตรวจโค้ดส่วน “ฟังก์ชันอัปโหลดไฟล์” ไหมครับ? ก๊อปปี้มาวางได้เลย เดี๋ยวผมช่วยหาจุดที่แอบสั่งบันทึกให้ครับ