JSON Toolkit

ไฟล์ JSON ใหญ่แค่ไหนที่เบราว์เซอร์รับได้

สรุปสำคัญ: ไม่มีขีดจำกัดตายตัว; ข้อจำกัดคืองบหน่วยความจำของแท็บ ไฟล์ 20MB มักกลายเป็น 60–100MB เมื่อ parse แล้ว และ DOM ที่ไฮไลต์อาจทำให้เพิ่มเป็นสองเท่าอีกครั้ง

ผู้เริ่มต้นอ่านประมาณ 3 นาทีเผยแพร่ 2026-10-30อัปเดต 2026-10-30
ขีดจำกัดหน่วยความจำของเบราว์เซอร์เมื่อทำงานกับ JSON ขนาดใหญ่

สรุปสั้น ๆ: ไม่มีเพดานตายตัว — ประเมินจากหน่วยความจำ เพราะ object ที่ parse แล้วมักกิน 3–5 เท่าของขนาดข้อความ และ DOM ที่ไฮไลต์ทำให้เพิ่มอีกเท่าตัว; เกิน 50MB หรือเมื่อจำนวน record ระดับบนสุดเข้าสู่หลักแสน ให้ตัดแบ่ง stream หรือเปลี่ยนไปใช้แอปในเครื่องแทนการฝืนในแท็บ

หน่วยความจำไปอยู่ที่ไหน

ข้อความ JSON ขนาด 20MB มีอยู่สามชุด:

  1. สตริงดิบ: 20MB
  2. กราฟ object ที่ parse แล้ว: มัก 60–100MB (สตริงซ้ำ, header ของ object, hash table)
  3. DOM ที่ไฮไลต์: หนึ่ง node ต่อ token เพิ่มได้อีก 2 เท่าง่าย ๆ

Buffer ของ editor, undo stack และ cache ของ syntax highlight เป็นของเพิ่ม "ไฟล์ 20MB" อาจกิน resident เกิน 200MB

กฎคร่าว ๆ

ขนาด เดสก์ท็อป มือถือ
< 5MB ลื่นไหล ลื่นไหล
5–20MB กระตุกเล็กน้อย ใช้ 1–3 วินาทีในการ format กระตุกชัดเจน อาจค้าง
20–50MB ใช้ได้แต่หนัก; ปิดการไฮไลต์ มีแนวโน้ม crash
> 50MB ไม่แนะนำ ใช้ไม่ได้

ค่าเหล่านี้เปลี่ยนตามอุปกรณ์ เวอร์ชันเบราว์เซอร์ และการเปิดไฮไลต์หรือไม่ ใช้เป็นหลักบอกขนาดคร่าว ๆ ไม่ใช่การรับประกัน

ทำไมเพิ่ม RAM ไม่ช่วย

แท็บมีเพดานตายตัว เกินแล้วจะ crash ทันทีแทนที่จะลดประสิทธิภาพอย่างนุ่มนวล มือถือเข้มงวดกว่านั้นอีก คือคืนหน่วยความจำในระดับไม่กี่ร้อยเมกะไบต์

การทำงานกับไฟล์ขนาดใหญ่

ตัดแบ่ง

head -c 1048576 big.json | jq .
jq '.items[0:100]' big.json

Stream stream-json, ijson, jq --stream ประมวลผลทีละ record โดยหน่วยความจำไม่ขึ้นกับขนาดไฟล์

ใช้แอปในเครื่อง ไม่มีเพดานแท็บ ใช้หน่วยความจำของเครื่องเต็มที่: ดาวน์โหลดเดสก์ท็อป

เปลี่ยนรูปแบบ Log และ event stream ควรเป็น NDJSON ตั้งแต่ต้น — หนึ่ง record ต่อบรรทัด stream ได้โดยธรรมชาติ

ขอให้ backend ลดข้อมูล ถ้า UI ต้องการสามฟิลด์ การส่งสามร้อยฟิลด์เป็นปัญหาการออกแบบ API ไม่ใช่ข้อจำกัดของเบราว์เซอร์

ประเมินขนาดไฟล์

ls -lh data.json
jq 'length' data.json

ถ้า length อยู่ในหลักแสน คำตอบคือ pagination หรือ streaming ไม่ว่าจะมีขนาดกี่ไบต์

คำถามที่พบบ่อย

จะรู้ได้อย่างไรว่าไฟล์ของฉันอยู่ในช่วงขนาดไหน?

ตรวจไบต์ด้วย ls -lh และจำนวน record ระดับบนสุดด้วย jq 'length' ไฟล์ต่ำกว่าสองสามเมกะไบต์ลื่นไหลทุกที่, 20–50MB ใช้ได้บนเดสก์ท็อปแต่กระตุก และเกิน 50MB ควร stream หรือใช้เครื่องมือ command line

ควรทำอย่างไรกับไฟล์ที่เกิน 50MB?

ตัดแบ่งด้วย head -c หรือ stream ด้วย jq, stream-json หรือ jq --stream เพื่อให้หน่วยความจำไม่ขึ้นกับขนาดไฟล์ ถ้าต้องตรวจทั้งเอกสาร ให้ใช้แอปเดสก์ท็อปซึ่งไม่ถูกจำกัดด้วยงบหน่วยความจำของแท็บ Log และ event stream ควรเป็น NDJSON อยู่แล้ว

อ่านเพิ่มเติม