ข้ามไปยังเนื้อหา

ขนาด bundle

ทุกไฟล์ dist/*.js ที่เผยแพร่จะมาพร้อมไฟล์คู่ .br + .gz ที่ pre-compressed ไว้ และ CI บังคับขีดจำกัดในทุก PR ผ่าน andresz1/size-limit-action

Entryขีดจำกัดขนาดปัจจุบัน
thai-qr-payment (umbrella เต็ม)25 KB13.7 KB
thai-qr-payment (renderThaiQRPayment เท่านั้น)25 KB13.6 KB
thai-qr-payment/payload sub-path5 KB3.09 KB
thai-qr-payment/qr sub-path6 KB4.74 KB
@thai-qr-payment/payload (เต็ม)5 KB3.09 KB
@thai-qr-payment/payload (payloadFor เท่านั้น)4 KB2.98 KB
@thai-qr-payment/qr6 KB4.75 KB
@thai-qr-payment/render2 KB1.24 KB
@thai-qr-payment/react1 KB256 B
@thai-qr-payment/assets20 KB4.83 KB

ในช่วงแรก umbrella มีขนาด 202 KB brotli — เพราะ asset SVG ของแบรนด์ถูก embed เป็น raster แบบ base64 ที่ห่อด้วย SVG wrapper ซึ่ง SVGO ไม่สามารถลด blob base64 ได้ มี optimization สองรายการที่ลงใน v0.1.0:

  1. vtracer pass — re-trace ทุก logo เป็น SVG vector จริง แล้วผ่าน SVGO multipass: 202 KB → 18.5 KB (ลดลง 11 เท่า)
  2. ตัด logo variant ทางเลือกออก — ถอด -02 ถึง -06 + PromptPay2 (commit bdadef3): 18.5 KB → 13.6 KB

รวม: ลดลง 15 เท่า จาก build เดิมที่ embed raster ไว้

bundle JS ที่เผยแพร่ทั้งหมดบีบอัดได้ดี — อัตรา brotli โดยทั่วไปอยู่ที่ 35-45%:

ไฟล์rawBrotliGzip
payload/dist/index.js8.3 KB2.98 KB3.5 KB
qr/dist/index.js13 KB4.5 KB5.2 KB
render/dist/index.js3.5 KB1.5 KB1.7 KB
react/dist/index.js1.2 KB449 B522 B

workflow size-limit.yml รันบนทุก PR หากขนาดเกินขีดจำกัด action จะ comment บอก delta บน PR และทำให้ check fail หากต้องการขยายขีดจำกัด ให้แก้ .size-limit.json พร้อมเขียนเหตุผลสั้น ๆ หนึ่งบรรทัดใน commit