เคล็ดลับสําคัญสําหรับประสิทธิภาพของเว็บ

ใช้ srcset เพื่อเลือกขนาดรูปภาพที่เหมาะสมโดยอัตโนมัติ

HTTP Archive ระบุว่าหน้าเว็บบนอุปกรณ์เคลื่อนที่โดยทั่วไปมีขนาดมากกว่า 2.6 MB และมากกว่า 2 ใน 3 ของขนาดดังกล่าวเป็นรูปภาพ ซึ่งเป็นโอกาสที่ดีในการเพิ่มประสิทธิภาพ

ไบต์ของหน้าเว็บในอุปกรณ์เคลื่อนที่โดยเฉลี่ยตามประเภทเนื้อหา

สรุป

  • อย่าบันทึกรูปภาพที่มีขนาดใหญ่กว่าขนาดที่แสดง
  • บันทึกรูปภาพแต่ละรูปหลายขนาด และใช้แอตทริบิวต์ srcset เพื่อให้เบราว์เซอร์เลือกขนาดที่เล็กที่สุดได้ w ค่าจะบอกความกว้างของแต่ละเวอร์ชันแก่เบราว์เซอร์
<img src="small.jpg"
     srcset="small.jpg 500w,
             medium.jpg 1000w,
             large.jpg 1500w"
     alt="…">

บันทึกรูปภาพที่มีขนาดที่เหมาะสม

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

ดูรูปภาพด้านล่าง

โดยมีลักษณะเกือบจะเหมือนกัน แต่ขนาดไฟล์ของไฟล์หนึ่งใหญ่กว่าอีกไฟล์หนึ่งมากกว่า 10 เท่า

Little Puss และ Lias: ลูกแมวลายเสืออายุ 10 สัปดาห์ 2 ตัว
บันทึกความกว้าง 1000 พิกเซล ขนาดไฟล์ 184 KB
Little Puss และ Lias: ลูกแมวลายเสืออายุ 10 สัปดาห์ 2 ตัว
บันทึกความกว้าง 300 พิกเซล ขนาดไฟล์ 16 KB

รูปภาพแรกมีขนาดไฟล์ใหญ่กว่ามากเนื่องจากบันทึกด้วยขนาดที่ใหญ่กว่าขนาดที่แสดงมาก รูปภาพทั้ง 2 รูปจะแสดงโดยมีความกว้างคงที่ 300 พิกเซล ดังนั้นจึงควรใช้รูปภาพที่บันทึกไว้ในขนาดเดียวกัน

สําหรับความกว้างคงที่ ให้ใช้รูปภาพที่บันทึกด้วยขนาดเดียวกับ ขนาดที่แสดง

แต่จะเกิดอะไรขึ้นหากขนาดการแสดงผลแตกต่างกัน

ในโลกที่มีอุปกรณ์หลายเครื่อง รูปภาพไม่ได้แสดงในขนาดคงที่เพียงขนาดเดียวเสมอไป

องค์ประกอบรูปภาพอาจมีความกว้างเป็นเปอร์เซ็นต์ หรือเป็นส่วนหนึ่งของเลย์เอาต์ที่ปรับตามอุปกรณ์ ซึ่งขนาดการแสดงรูปภาพจะเปลี่ยนไปให้พอดีกับขนาดหน้าจอ

…แล้วอุปกรณ์ที่ต้องการพิกเซลสูงอย่างจอแสดงผล Retina ล่ะ

ช่วยเบราว์เซอร์เลือกขนาดรูปภาพที่เหมาะสม

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

srcset จึงมีประโยชน์ในกรณีนี้ คุณบันทึกรูปภาพในขนาดต่างๆ จากนั้น บอกเบราว์เซอร์ถึงความกว้างของแต่ละเวอร์ชัน

<img src="small.jpg"
     srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"
     alt="…">

ค่า w แสดงความกว้างของแต่ละรูปภาพเป็นพิกเซล เช่น small.jpg 500w จะบอกเบราว์เซอร์ว่า small.jpg มีความกว้าง 500 พิกเซล ซึ่งจะช่วยให้เบราว์เซอร์เลือกรูปภาพที่เล็กที่สุดได้ โดยขึ้นอยู่กับประเภทหน้าจอและขนาด Viewport โดยไม่ต้อง ดาวน์โหลดรูปภาพเพื่อตรวจสอบขนาด

คุณดูการทำงานของ srcset ได้ในรูปภาพด้านล่าง หากใช้แล็ปท็อปหรือ คอมพิวเตอร์เดสก์ท็อป ให้เปลี่ยนขนาดหน้าต่างเบราว์เซอร์แล้วเปิดหน้านี้อีกครั้ง จากนั้นใช้แผงเครือข่ายของเครื่องมือเบราว์เซอร์เพื่อตรวจสอบว่าใช้รูปภาพใด (คุณจะต้องดำเนินการในหน้าต่างที่ไม่ระบุตัวตนหรือหน้าต่างส่วนตัว มิเช่นนั้นระบบจะแคชไฟล์รูปภาพต้นฉบับ)

Lias และ Little Puss: ลูกแมวลายสีเทาอายุ 10 สัปดาห์ 2 ตัว

ฉันจะสร้างรูปภาพหลายขนาดได้อย่างไร

คุณจะต้องจัดเตรียมรูปภาพทุกรูปที่ต้องการใช้กับ srcset ในหลายขนาด

สำหรับรูปภาพแบบครั้งเดียว เช่น รูปภาพฮีโร คุณสามารถบันทึกขนาดต่างๆ ได้ด้วยตนเอง หากมีรูปภาพจำนวนมาก เช่น รูปภาพผลิตภัณฑ์ คุณจะต้องใช้การทำงานอัตโนมัติ ซึ่งมี 2 วิธี

รวมการประมวลผลรูปภาพในกระบวนการบิลด์

คุณสามารถเพิ่มขั้นตอนเพื่อสร้างรูปภาพเวอร์ชันต่างๆ ที่มีขนาดแตกต่างกันได้ในกระบวนการสร้าง ดูข้อมูลเพิ่มเติมได้ที่ "ใช้ Imagemin เพื่อบีบอัดรูปภาพ"

ใช้บริการรูปภาพ

คุณสามารถสร้างและแสดงรูปภาพโดยอัตโนมัติได้โดยใช้บริการเชิงพาณิชย์ เช่น Cloudinary หรือบริการโอเพนซอร์สที่เทียบเท่า เช่น Thumbor ซึ่งคุณติดตั้งและเรียกใช้ได้ด้วยตนเอง

คุณอัปโหลดรูปภาพที่มีความละเอียดสูง และบริการรูปภาพจะสร้างและแสดงรูปแบบและขนาดรูปภาพต่างๆ โดยอัตโนมัติ ตามพารามิเตอร์ URL เช่น เปิดรูปภาพตัวอย่างนี้ใน Cloudinary แล้วลองเปลี่ยนค่า w หรือนามสกุลไฟล์ในแถบ URL

นอกจากนี้ บริการรูปภาพยังมีฟีเจอร์ขั้นสูงอื่นๆ เช่น ความสามารถในการทำให้ "การครอบตัดอัจฉริยะ" เป็นแบบอัตโนมัติสำหรับรูปภาพขนาดต่างๆ และส่งรูปภาพ WebP ไปยังเบราว์เซอร์ที่รองรับรูปแบบนี้โดยอัตโนมัติแทนที่จะเป็น JPEG โดยไม่ต้องเปลี่ยนนามสกุลไฟล์

เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome แสดงส่วนหัวประเภทเนื้อหา WebP สำหรับไฟล์ที่ Cloudinary แสดง

จะเกิดอะไรขึ้นหากรูปภาพดูไม่ถูกต้องในขนาดต่างๆ

ในกรณีนี้ คุณจะต้องใช้องค์ประกอบ <picture> สำหรับ "การกำกับศิลป์" โดยการระบุรูปภาพหรือการครอบตัดรูปภาพที่แตกต่างกันในขนาดต่างๆ ดูข้อมูลเพิ่มเติมได้ที่ Codelab "การกำกับศิลป์"

แล้วความหนาแน่นของพิกเซลล่ะ

อุปกรณ์ระดับไฮเอนด์มีพิกเซลจริงที่เล็กกว่า (หนาแน่นกว่า) เช่น โทรศัพท์ระดับไฮเอนด์อาจมีพิกเซลในแต่ละแถวของ พิกเซลมากกว่าอุปกรณ์ราคาถูก 2-3 เท่า

ซึ่งอาจส่งผลต่อขนาดที่คุณต้องใช้ในการบันทึกรูปภาพ เราจะไม่ลงรายละเอียดที่น่าสยดสยอง ที่นี่ แต่คุณดูข้อมูลเพิ่มเติมได้จาก "ใช้ตัวอธิบายความหนาแน่น" ใน Codelab

แล้วขนาดการแสดงผลของรูปภาพล่ะ

คุณใช้ sizes เพื่อให้ srcset ทำงานได้ดียิ่งขึ้น

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

ในตัวอย่างด้านล่าง sizes="50vw" จะบอกเบราว์เซอร์ว่ารูปภาพนี้จะ แสดงที่ 50% ของความกว้างของวิวพอร์ต

<img src="small.jpg"
     srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 1500w"
     sizes="50vw"
     alt="…">

คุณดูการทำงานจริงได้ที่ simpl.info/sizes และ Codelab "การระบุความกว้างของช่องหลายช่อง"

แล้วการรองรับเบราว์เซอร์ล่ะ

srcset และ sizes ได้รับการรองรับจากเบราว์เซอร์กว่า 90% ทั่วโลก

หากเบราว์เซอร์ไม่รองรับ srcset หรือ sizes ระบบจะเปลี่ยนกลับไปใช้แอตทริบิวต์ src เท่านั้น

ซึ่งทำให้ srcset และ sizes เป็นการเพิ่มประสิทธิภาพแบบค่อยเป็นค่อยไปที่ยอดเยี่ยม

ดูข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเพิ่มประสิทธิภาพรูปภาพได้ในส่วน"เพิ่มประสิทธิภาพรูปภาพ" ของ web.dev หากต้องการประสบการณ์การใช้งานที่มีคำแนะนำมากขึ้น ลองเรียนหลักสูตร "รูปภาพที่ ปรับตามพื้นที่โฆษณา" ฟรีที่ Udacity