Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การใช้งาน CSS Containment

บทความนี้แนะนำ CSS Containment ซึ่งเป็นคุณสมบัติที่ช่วยควบคุมการ Render ของ Browser เพื่อเพิ่มประสิทธิภาพเว็บไซต์ โดยการจำกัดขอบเขตการ Render ของแต่ละองค์ประกอบ...

การใช้งาน CSS Containment: เพิ่มประสิทธิภาพการ Render ให้เว็บไซต์ของคุณ

ในบทความก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับการสร้าง Parallax Scrolling Effect เพื่อเพิ่มลูกเล่นและความน่าสนใจให้กับเว็บไซต์ของเรา แต่การสร้างเอฟเฟกต์ที่ซับซ้อนเหล่านี้อาจส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์ได้ หากไม่ได้รับการจัดการอย่างเหมาะสม ในบทความนี้ เราจะมาเรียนรู้เกี่ยวกับ CSS Containment ซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถควบคุมการ Render ของ Browser และเพิ่มประสิทธิภาพของเว็บไซต์ได้อย่างมีประสิทธิภาพ

CSS Containment คืออะไร?

CSS Containment คือคุณสมบัติที่ช่วยให้เราสามารถบอก Browser ว่าองค์ประกอบ HTML (element) ใดๆ มีขอบเขตการ Render ที่จำกัด ซึ่งหมายความว่า Browser สามารถทำการ Optimization ในการ Render องค์ประกอบนั้นๆ ได้ โดยไม่ต้องคำนึงถึงผลกระทบที่อาจเกิดขึ้นกับองค์ประกอบอื่นๆ นอกขอบเขตนั้น

ลองจินตนาการว่าคุณกำลังวาดภาพบนกระดาษ หากคุณวาดภาพ landscape ที่มีภูเขา แม่น้ำ และต้นไม้ Browser จะต้องคำนึงถึงทุกองค์ประกอบในการ Render เพื่อให้ภาพรวมดูสมบูรณ์แบบ แต่ถ้าคุณวาดภาพแต่ละองค์ประกอบ (ภูเขา, แม่น้ำ, ต้นไม้) ลงบนกระดาษแยกกัน Browser ก็สามารถ Render แต่ละภาพได้อย่างอิสระ โดยไม่ต้องกังวลว่าภาพหนึ่งจะส่งผลกระทบต่ออีกภาพหนึ่งอย่างไร CSS Containment ทำงานในลักษณะเดียวกัน โดยช่วยให้ Browser สามารถ Render องค์ประกอบต่างๆ บนเว็บไซต์ได้อย่างอิสระ เพื่อเพิ่มประสิทธิภาพในการ Render โดยรวม

ประเภทของ CSS Containment

CSS Containment มีหลายประเภท แต่ละประเภทจะจำกัดการ Render ในระดับที่แตกต่างกัน:

  • contain: none;: ค่าเริ่มต้น ไม่มีการ Containment ใดๆ Browser จะ Render องค์ประกอบตามปกติ
  • contain: strict;: Containment ที่เข้มงวดที่สุด ครอบคลุมทั้ง Layout, Paint, และ Size Browser จะ Render องค์ประกอบนั้นๆ อย่างอิสระ โดยไม่ต้องคำนึงถึงองค์ประกอบอื่นๆ
  • contain: content;: ครอบคลุม Layout และ Paint แต่ไม่รวม Size Browser จะ Render องค์ประกอบนั้นๆ โดยไม่ต้องคำนึงถึงผลกระทบต่อ Layout และ Paint ขององค์ประกอบอื่นๆ แต่ยังต้องคำนึงถึงขนาดขององค์ประกอบนั้น
  • contain: layout;: ครอบคลุมเฉพาะ Layout Browser จะ Render องค์ประกอบนั้นๆ โดยไม่ต้องคำนึงถึงผลกระทบต่อ Layout ขององค์ประกอบอื่นๆ
  • contain: style;: ครอบคลุมเฉพาะ Style Browser จะ Render องค์ประกอบนั้นๆ โดยไม่ต้องคำนึงถึงผลกระทบต่อ Style ขององค์ประกอบอื่นๆ (เช่น CSS Counters)
  • contain: paint;: ครอบคลุมเฉพาะ Paint Browser จะ Render องค์ประกอบนั้นๆ โดยไม่ต้องคำนึงถึงผลกระทบต่อการ Paint ขององค์ประกอบอื่นๆ

คำอธิบายเพิ่มเติม:

  • Layout: การคำนวณตำแหน่งและขนาดขององค์ประกอบบนหน้าเว็บ
  • Paint: กระบวนการวาดองค์ประกอบบนหน้าจอ รวมถึงสี, พื้นหลัง, และขอบ
  • Size: ขนาดขององค์ประกอบ
  • Style: คุณสมบัติ CSS ที่ใช้ตกแต่งองค์ประกอบ เช่น สี, ตัวอักษร, และระยะขอบ

ตัวอย่างการใช้งาน CSS Containment

สมมติว่าเรามีเว็บไซต์ที่มีส่วนประกอบหลายส่วน เช่น แถบนำทาง (navigation bar), เนื้อหาหลัก (main content), และแถบด้านข้าง (sidebar) เราสามารถใช้ CSS Containment เพื่อเพิ่มประสิทธิภาพการ Render ของแต่ละส่วนประกอบได้

.navigation {
  contain: layout; /* ป้องกันการเปลี่ยนแปลง Layout ของ navigation ส่งผลกระทบต่อส่วนอื่นๆ */
  /* Styles for navigation */
}

.main-content {
  contain: content; /* ป้องกันการเปลี่ยนแปลง Layout และ Paint ของ main content ส่งผลกระทบต่อส่วนอื่นๆ */
  /* Styles for main content */
}

.sidebar {
  contain: paint; /* ป้องกันการเปลี่ยนแปลง Paint ของ sidebar ส่งผลกระทบต่อส่วนอื่นๆ */
  /* Styles for sidebar */
}

ในตัวอย่างนี้ เราได้ใช้ contain: layout; กับแถบนำทาง เพื่อป้องกันไม่ให้การเปลี่ยนแปลง Layout ของแถบนำทางส่งผลกระทบต่อ Layout ของส่วนอื่นๆ ของเว็บไซต์ เราใช้ contain: content; กับเนื้อหาหลัก เพื่อป้องกันไม่ให้การเปลี่ยนแปลง Layout และ Paint ของเนื้อหาหลักส่งผลกระทบต่อส่วนอื่นๆ และเราใช้ contain: paint; กับแถบด้านข้าง เพื่อป้องกันไม่ให้การเปลี่ยนแปลง Paint ของแถบด้านข้างส่งผลกระทบต่อส่วนอื่นๆ

ข้อควรจำ: การเลือกประเภทของ Containment ที่เหมาะสมเป็นสิ่งสำคัญ การใช้ contain: strict; กับทุกองค์ประกอบอาจทำให้เกิดปัญหาได้ เนื่องจาก Browser จะไม่สามารถทำการ Optimization บางอย่างได้

ข้อดีและข้อเสียของ CSS Containment

ข้อดี:

  • เพิ่มประสิทธิภาพการ Render: ช่วยให้ Browser สามารถ Render องค์ประกอบต่างๆ ได้อย่างอิสระ ทำให้การ Render เร็วขึ้น
  • ลดเวลาในการ Re-layout และ Re-paint: เมื่อมีการเปลี่ยนแปลงในองค์ประกอบที่ถูก Containment Browser จะไม่จำเป็นต้อง Re-layout และ Re-paint ทั้งหน้าเว็บ แต่จะ Re-layout และ Re-paint เฉพาะองค์ประกอบนั้นๆ เท่านั้น
  • ปรับปรุง First Contentful Paint (FCP) และ Largest Contentful Paint (LCP): เนื่องจาก Browser สามารถ Render องค์ประกอบต่างๆ ได้เร็วขึ้น ทำให้ FCP และ LCP ดีขึ้น ซึ่งส่งผลดีต่อประสบการณ์ของผู้ใช้

ข้อเสีย:

  • อาจทำให้เกิดปัญหาในการ Layout: หากใช้ Containment ที่เข้มงวดเกินไป อาจทำให้เกิดปัญหาในการ Layout ได้ เช่น องค์ประกอบที่ควรจะอยู่ติดกันกลับไม่ติดกัน
  • เพิ่มความซับซ้อนในการ Debug: การใช้ Containment อาจทำให้การ Debug ปัญหาสไตล์ยากขึ้น เนื่องจาก Browser จะไม่แสดงผลกระทบขององค์ประกอบหนึ่งต่ออีกองค์ประกอบหนึ่ง
  • ต้องใช้ความเข้าใจในการใช้งาน: การเลือกประเภทของ Containment ที่เหมาะสมต้องใช้ความเข้าใจในการทำงานของ CSS และการ Render ของ Browser

แนวปฏิบัติที่ดีในการใช้งาน CSS Containment

  • เริ่มต้นด้วย contain: content;: หากคุณไม่แน่ใจว่าจะใช้ Containment ประเภทใด ให้เริ่มต้นด้วย contain: content; ซึ่งเป็น Containment ที่มีความสมดุลระหว่างประสิทธิภาพและความยืดหยุ่น
  • ใช้ Containment เฉพาะเมื่อจำเป็น: ไม่จำเป็นต้องใช้ Containment กับทุกองค์ประกอบ ใช้ Containment เฉพาะกับองค์ประกอบที่มีขนาดใหญ่ หรือมีการเปลี่ยนแปลงบ่อย
  • ทดสอบเว็บไซต์อย่างละเอียด: หลังจากใช้ Containment แล้ว ให้ทดสอบเว็บไซต์อย่างละเอียด เพื่อให้แน่ใจว่าไม่มีปัญหาในการ Layout หรือการแสดงผล
  • ตรวจสอบประสิทธิภาพของเว็บไซต์: ใช้เครื่องมือเช่น Google PageSpeed Insights เพื่อตรวจสอบประสิทธิภาพของเว็บไซต์ ก่อนและหลังการใช้ Containment

สรุป

CSS Containment เป็นเครื่องมือที่มีประโยชน์ในการเพิ่มประสิทธิภาพการ Render ของเว็บไซต์ แต่ต้องใช้งานอย่างระมัดระวัง การเลือกประเภทของ Containment ที่เหมาะสม และการทดสอบเว็บไซต์อย่างละเอียดเป็นสิ่งสำคัญ เพื่อให้มั่นใจว่าเว็บไซต์ของคุณทำงานได้อย่างมีประสิทธิภาพ และมอบประสบการณ์ที่ดีให้กับผู้ใช้ ในบทความถัดไป เราจะมาเรียนรู้เกี่ยวกับ CSS Logical Properties and Values ซึ่งเป็นคุณสมบัติใหม่ที่ช่วยให้เราสามารถสร้าง Layout ที่รองรับหลายภาษาและทิศทางการเขียนได้อย่างง่ายดาย

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service