ใช้ Imagemin เพื่อบีบอัดรูปภาพ

Katie Hempenius
Katie Hempenius

สาเหตุที่ไม่ควรพลาดผลิตภัณฑ์นี้

รูปภาพที่ไม่ได้บีบอัดจะขยายหน้าเว็บด้วยไบต์ที่ไม่จำเป็น เนื่องจากรูปภาพอาจเป็นผู้สมัครสำหรับ Largest Contentful Paint (LCP) ไบต์ที่ไม่จำเป็นเหล่านี้อาจเพิ่มระยะเวลาการโหลดทรัพยากรของรูปภาพ ซึ่งอาจส่งผลให้ LCP ใช้เวลานานขึ้น

รูปภาพทางด้านขวามีขนาดเล็กกว่ารูปภาพทางด้านซ้าย 40% แต่ก็อาจดูเหมือนกับผู้ใช้ทั่วไป

20 กิโลไบต์

12 กิโลไบต์

วัดระยะทาง

เรียกใช้ Lighthouse เพื่อตรวจหาโอกาสในการปรับปรุงการโหลดหน้าเว็บด้วยการบีบอัดรูปภาพ โอกาสเหล่านี้จะแสดงอยู่ในส่วน "เข้ารหัสรูปภาพอย่างมีประสิทธิภาพ"

รูปภาพ

รูปภาพขั้นต่ำ

Imagemin เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการบีบอัดรูปภาพ เพราะรองรับการแสดงผล รูปแบบรูปภาพที่หลากหลาย และสามารถผสานรวมเข้ากับสคริปต์บิลด์และสร้าง และเครื่องมือการประมาณที่กำหนดได้เอง Imagemin สามารถใช้เป็นได้ทั้ง CLI และ npm โดยทั่วไป โมดูล NPM นี่เป็นตัวเลือกที่ดีที่สุด เพราะมีตัวเลือกการกำหนดค่ามากกว่า แต่ CLI อาจ ทางเลือกที่ดีหากคุณต้องการลองใช้ Imagemin โดยไม่ต้องสัมผัสโค้ดใดๆ

ปลั๊กอิน

Imagemin สร้างขึ้นโดยอิง "ปลั๊กอิน" ปลั๊กอินคือแพ็กเกจ npm ที่บีบอัด รูปแบบรูปภาพเฉพาะ (เช่น "mozjpeg" บีบอัด JPEG) รูปแบบรูปภาพยอดนิยม อาจมีปลั๊กอินหลายตัวให้เลือก

สิ่งสำคัญที่สุดที่ควรคำนึงถึงเมื่อเลือกปลั๊กอินคือ "สูญเสีย" หรือ "แบบไม่สูญเสียรายละเอียด" จะไม่มีข้อมูลใดสูญหายในการบีบอัดแบบไม่สูญเสียรายละเอียด แบบสูญเสีย การบีบอัดจะลดขนาดไฟล์ แต่ก็อาจทำให้รูปภาพลดลงได้ ของคุณ ถ้าปลั๊กอินไม่ได้ระบุว่าเป็น "lossy" หรือ "แบบไม่สูญเสียรายละเอียด" คุณ สามารถบอกได้ด้วย API: หากคุณสามารถระบุคุณภาพของรูปเอาต์พุตได้ คือ "สูญเสีย"

สำหรับคนส่วนใหญ่ ปลั๊กอินแบบสูญเสียบางส่วนเป็นตัวเลือกที่ดีที่สุด ให้ความสามารถ สามารถประหยัดขนาดไฟล์ได้มากขึ้น และคุณสามารถปรับระดับการบีบอัดเพื่อให้เป็นไปตาม ตามความต้องการของคุณ ตารางด้านล่างแสดงรายการปลั๊กอินที่ได้รับความนิยมของ Imagemin ปลั๊กอินเหล่านี้ไม่ได้มีเพียงเท่านี้ ทั้งหมด แต่ก็เป็นตัวเลือกที่ดีสำหรับโปรเจ็กต์ของคุณ

รูปแบบรูปภาพ ปลั๊กอิน Lossy ปลั๊กอินแบบไม่สูญเสียรายละเอียด
JPEG imagemin-mozjpeg imagemin-jpegtran
PNG imagemin-pngquant imagemin-optipng
GIF imagemin-giflossy imagemin-gifsicle
SVG imagemin-svgo
WebP imagemin-webp imagemin-webp

CLI ของรูปภาพต่ำสุด

Imagemin CLI ทำงานร่วมกับปลั๊กอิน 5 ชนิด ได้แก่ imagemin-gifsicle, imagemin-jpegtran, imagemin-optipng, imagemin-pngquantity และ imagemin-svgo Imagemin ใช้ปลั๊กอินที่เหมาะสมตามรูปแบบรูปภาพของ อินพุต

หากต้องการบีบอัดรูปภาพใน "images/" ไดเรกทอรีและบันทึกไว้ใน ให้เรียกใช้คำสั่งต่อไปนี้ (เขียนทับไฟล์ต้นฉบับ):

$ imagemin images/* --out-dir=images

โมดูล npm ของรูปภาพ

หากคุณใช้เครื่องมือสร้างอย่างใดอย่างหนึ่งต่อไปนี้ ดู Codelab สำหรับ Imagemin ด้วย webpack, gulp หรือพูดพล่าม

คุณยังสามารถใช้ Imagemin แบบเดี่ยวๆ เป็นสคริปต์โหนดได้ด้วย โค้ดนี้ใช้ "imagemin-mozjpeg" ปลั๊กอินเพื่อบีบอัดไฟล์ JPEG ให้มีคุณภาพ จาก 50 ('0' คือแย่ที่สุด, '100' ดีที่สุด):

const imagemin = require('imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');

(async() => {
  const files = await imagemin(
      ['source_dir/*.jpg', 'another_dir/*.jpg'],
      {
        destination: 'destination_dir',
        plugins: [imageminMozjpeg({quality: 50})]
      }
  );
  console.log(files);
})();