Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
สวัสดีครับ, ขอบคุณครับสำหรับไลบรารี่ดีๆ สำหรับนักพัฒนาเว็บไทย 👍
ใน PR นี้ผมลองทำการ Optimize ต่างๆ เพื่อลดขนาดไฟล์ที่ส่งไปยังเบราเซอร์ครับ โดยถือว่าเซิฟเวอร์ได้บีบอัดข้อมูลด้วยอัลกอริธึม Gzip อยู่แล้ว และปริมาณการถ่ายโอนข้อมูลวัดจาก Chrome DevTools ครับ (ได้ทำการ Disable Cache แล้ว)
ตารางที่ 1: ขนาดไฟล์ก่อนทำการ Optimize
เอา JSZIP ออกแล้วใช้ไฟล์ .json ธรรมดา
โดยปกติเว็บเซิฟเวอร์จะ Gzip ไฟล์ JSON อยู่แล้วครับ ดังนั้นจึงไม่จำเป็นต้องอัด ZIP ไฟล์ฐานข้อมูล
หลังจากเอา JSZIP ออกอันนี้คือปริมาณข้อมูลที่ถ่ายโอนครับ:
ตารางที่ 2: ขนาดไฟล์หลังนำ JSZIP ออก
ขนาดลดลงจากเดิม: 26.3 KB (23.1%)
บีบอัดฐานข้อมูล
เนื่องจากฐานข้อมูลจังหวัด–อำเภอ–ตำบล–รหัสไปรษณีย์ มีลักษณะเป็น Hierarchical อยู่แล้ว (คือสามารถ Represent ในรูปของ Tree ได้) เมื่อนำมาวางเป็นตารางจึงเกิดความซ้ำซ้อนจนเกินไปครับ
จะเห็นว่า
, a: 'เมืองระยอง', p: 'ระยอง', z:
ถูกเขียนซ้ำหลายครั้งมาก ทั้งๆ ที่ เมืองระยอง–จังหวัดระยอง มีอยู่แค่ที่เดียวดังนั้นผมจึงลองอัพเปลี่ยนรูปแบบฐานข้อมูลให้เป็นรูปแบบ Tree แทนครับ:
หลังจากจัดเรียงข้อมูลแบบนี้แล้วทำให้ฐานข้อมูลขนาดลดลงเหลือ 286 KB ครับ
ตารางที่ 3: ขนาดไฟล์หลังปรับโครงสร้างฐานข้อมูล
จาก PR นี้จะทำให้ขนาดไฟล์ที่โหลด ลดลงจาก 113.6 KB เหลือ 74.5 KB ครับ (ลดลง 39.1 KB, 34%)
อันนี้คือโค้ดที่ใช้ในการสร้างไฟล์
data.json
ครับ (ภาษา Ruby)