2023-08-21-save-tons-of-gbs-with-optimizt preview

Optimizt - บีบอัดไฟล์ก่อนอัพโหลด ช่วยเซฟพื้นที่ได้หลาย GB

กว่า 70% ของ Bandwidth ในการใช้งานอินเตอร์เน็ต มาจากการโหลดไฟล์รูป มารู้จัก Optimizt เครื่องมือบีบอัดภาพ ที่ลดขนาดไฟล์ได้อย่างมหาศาล แต่สูญเสียรายละเอียดไปเพียงนิดเดียว

ครึ่งนึงของ Traffic บนอินเตอร์เน็ต มาจากการโหลด Media ต่างๆ

ในการใช้งานอินเตอร์เน็ตทุกวันนี้ ส่วนมากเราจะเสพสื่อในรูปแบบของรูปภาพ และ วิดีโอ ซึ่งหลายเว็บไซต์ก็มักจะมีการแสดงผลรูปภาพในแต่ละส่วนของการทำงานแตกต่างกันไป บ้างก็ใช้เป็นภาพเพื่อการตลาด ใช้เป็น Call-to-Action หรืออาจจะใช้เพื่อแสดงสินค้าและบริการ ซึ่งกว่า 70% ของ traffic บนเว็บไซต์เหล่านี้ เกิดจากการโหลดข้อมูลรูปภาพ ดังนั้นการลดขนาดรูปภาพ จึงเท่ากับการลดปริมาณข้อมูลที่ต้องโหลด เป็นการเพิ่มความเร็วให้กับเว็บไซต์เราได้โดยตรง

ค่าเฉลี่ยของขนาดของเว็บไซต์อยู่ที่ 2MB โดยครึ่งหนึ่งเป็นรูปภาพ

ลดขนาดรูปภาพด้วยการบีบอัด

รูปภาพบนเว็บไซต์ส่วนใหญ่จะอยู่ในรูปแบบของไฟล์นามสกุล JPG, PNG, หรือ WEBP สำหรับเว็บยุคใหม่ อาจจะมาจากระบบ CMS ที่แอดมินอัพโหลดรูปภาพขึ้นมา แล้วหน้าเว็บก็ดึงข้อมูลที่อยู่รูปภาพจาก CDN มาแสดงผล ในหลายครั้งรูปที่ถูกอัพโหลดขึ้นมาและ serve ให้ผู้ใช้นั้นไม่ได้ทำการบีบอัดรูปภาพ หรือไม่ได้ทำการลดขนาดให้เหมาะกับอุปกรณ์มาก่อน ทำให้รูปอาจจะมีความละเอียดที่มากจนเกินไปสำหรับแสดงผลบนเว็บไซต์ หรือไฟล์ที่ใหญ่มากเกินไปสำหรับการโหลดผ่านเน็ตมือถือหรือ Slow 4G

เทคนิกในการลดขนาดรูปภาพนั้นมีหลายวิธี เช่น การทำ Progressive Image เป็นการทำรูปออกมาหลายๆ ขนาดสำหรับแต่ละอุปกรณ์ วิธีนี้ได้ผลลัพธ์ที่ดีมาก แต่ก็ต้องใช้แรงและทรัพยากรค่อนข้างเยอะ

มาดูอีกหนึ่งวิธีที่นิยมและทำได้ง่าย คือบีบอัดด้วยโปรแกรม เช่น imagemagick, sharp.js, squoosh หรือ Photoshop แต่วันนี้ผมจะแนะนำอีกหนึ่งโปรแกรมที่ใช้งานได้ง่าย สะดวกสำหรับ developer ที่ถนัดการใช้ Command Line นั่นก็คือ Optimizt ซึ่งรองรับไฟล์ PNG, JPEG, SVG, และ GIF สามารถ compress และ export ออกมาเป็นนามสกุลเดิม หรือจะเป็นนามสกุล WEBP และ AVIF ได้เช่นกัน

วิธีการใช้งาน Optimizt

ติดตั้ง Optimizt

npm i -g @funboxteam/optimizt

ใช้งาน Optimizt

optimizt path/to/picture.jpg

รายละเอียดของ CLI สามารถเข้าไปดูที่ GitHub ของทาง Optimizt ได้เลย

ตัวอย่างการใช้งานจริง

ก่อนที่เราจะ Deploy บทความใหม่ ถ้าบทความมีการใช้รูปภาพ เราก็จะ compress รูปนั้นก่อน เช่น

ls -l

total 408
drwxr-xr-x  11 anuwong.mon  staff     352 Aug 21 08:30 blog
-rw-r--r--   1 anuwong.mon  staff  206970 Aug 21 08:30 optimizt.png

ไฟล์ optimizt.png มีขนาด 206KB ซึ่งเราจะใช้ Optimizt ในการบีบอัดไฟล์นี้

optimizt optimizt.png

 Optimizing 1 image (lossy)...
 optimizt.png
   202.119 KB 55.206 KB. Ratio: 73%

 Yay! You saved 146.913 KB (73%)

ไฟล์ optimizt.png ลดขนาดลงจาก 202KB เหลือเพียง 55KB ซึ่งเป็นการลดขนาดไฟล์ไปถึง 73% และเราจะได้ไฟล์ optimizt.png ที่มีขนาดเล็กลงมาใช้งานแทนไฟล์เดิมได้เลย

Optimizt Result

ลองบีบอัดเป็น WEBP

mkdir optimized
optimizt กายแก้ว.jpeg --webp --output optimized
 Converting 1 image (lossy)...
 กายแก้ว.jpeg
   50.372 KB WebP 41.613 KB. Ratio: 17%

 Yay! You saved 8.759 KB (17%)

ลองมาเปรียบเทียบระหว่าง 2 ภาพนี้ ที่เราได้จากการบีบอัดด้วย Optimizt กัน

กายแก้ว.jpeg

กายแก้ว.jpeg

กายแก้ว.webp

กายแก้ว.webp

ภาพจาก https://www.bbc.com/thai/articles/c88v6z6wdqwo

ลองอีกครั้งกับภาพจาก Unsplash ที่มีขนาดใหญ่กว่า 1MB

ls -l
-rw-r--r--  1 anuwong.mon  staff  4143107 Aug 21 10:21 filipe-freitas-unsplash.jpg

optimizt --webp filipe-freitas-unsplash.jpg
 Converting 1 image (lossy)...
 filipe-freitas-unsplash.jpg
   3.951 MB WebP 2.07 MB. Ratio: 48%

 Yay! You saved 1.881 MB (48%)

filipe-freitas-unsplash.jpg

filipe-freitas-unsplash.jpg (JPEG 3.951 MB)

filipe-freitas-unsplash.webp

filipe-freitas-unsplash.webp (WEBP 2.07 MB)

Photo by Filipe Freitas on Unsplash

Summary

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

Use the right tool for the right job

ขอให้สนุกกับเขียนโค้ดครับ 🤓

← แก้ปัญหา Node.js Projects ใช้หลาย version ด้วย volta.sh บันทึกการย้ายเว็บไซต์จาก Gatsby ไปใช้ Astro →