Back to notes
foundations-web
Featured

Browser Rendering Mastery: เจาะลึกกลไกเบื้องหลังพิกเซลบนหน้าจอ

เข้าใจกลไก Rendering Pipeline เพื่อเขียนเว็บที่ลื่นไหล 60fps เจาะลึกความต่างระหว่าง Layout, Paint และ Composite

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: เว็บ "กระตุก" แม้โค้ดจะดูปกติ

ลองนึกถึงอาการที่หน้าเว็บ "หน่วง" เวลาเลื่อนเมาส์หรือทำอนิเมชัน:

HLJS CSS
/* ❌ Naive Approach: ทำอนิเมชันด้วยการเปลี่ยนตำแหน่ง (Left/Top) */
.box {
  position: absolute;
  left: 0;
  transition: left 0.3s;
}
.box:hover {
  left: 100px; /* 🌋 พัง! Browser ต้องคำนวณตำแหน่งใหม่ทุกเฟรม (Reflow) */
}

ปัญหา: ทุกครั้งที่คุณเปลี่ยน left หรือ top, Browser ต้องเริ่มนับหนึ่งใหม่ในการคำนวณคณิตศาสตร์เพื่อหาตำแหน่งของ DIV ทุกตัวในหน้าจอ (Layout) สิ่งนี้กินพลัง CPU มหาศาล และถ้าคอมพิวเตอร์แรงไม่พอ อนิเมชันจะออกมา "กระตุก" จนผู้ใช้รู้สึกว่าเว็บไม่มีคุณภาพครับ


💡 2. Real-Life Analogy: การวาดรูปบนแผ่นใส (Painting on Transparencies)

ลองนึกภาพว่าคุณกำลัง "ทำการ์ตูนแอนิเมชัน".

  • DOM & CSSOM: คือการร่างแบบตัวละครและระบายสี (ข้อมูลดิบ)
  • Layout (Reflow): เหมือนการจัดวางตำแหน่งตัวละครบนโต๊ะ ถ้าคุณขยับตัวละครตัวหนึ่ง แล้วมันไปเบียดตัวอื่นจนต้องขยับตามกันหมด (ยุ่งยากและเสียเวลา)
  • Paint (Repaint): เหมือนการระบายสีใหม่ลงไปบนกระดาษ ถ้าเปลี่ยนสีเสื้อ ก็ต้องระบายใหม่ทั้งตัว
  • Composite (High Performance): เหมือนการใช้ "แผ่นใสแยกเลเยอร์". คุณแค่วาดตัวละครไว้บนแผ่นใสคนละแผ่น เวลาจะขยับ คุณแค่ "เลื่อนแผ่นใสไปมา" โดยไม่ต้องวาดใหม่หรือจัดลำดับตำแหน่งใหม่เลย (เร็วมาก เพราะใช้ GPU)

🚀 3. Execution Journey: 6 ด่านอรหันต์สู่หน้าจอ

เมื่อ Browser ได้รับ HTML นี่คือเส้นทางท่อลำเลียง (Pipeline) ที่ข้อมูลต้องวิ่งผ่าน:

🛠 Step-by-step:

  1. DOM Construct: แกะ HTML เป็นกิ่งก้าน (Tree)
  2. CSSOM Construct: แกะสไตล์ที่มีผลกับ DOM
  3. Render Tree: รวมร่าง "สิ่งที่ต้องโชว์จริงๆ" (Display: none จะถูกตัดทิ้งที่นี่)
  4. Layout: คำนวณขนาดและพิกัด (กว้างเท่าไหร่ อยู่ตรงไหน)
  5. Paint: ละเลงสีและเงา
  6. Composite: เอาเลเยอร์ต่าง ๆ มาซ้อนกัน (ทำที่ GPU)
HLJS CSS
// ✅ Best Practice: ใช้ transform แทนการเลื่อนตำแหน่งแบบปกติ
.box {
  transition: transform 0.3s;
}
.box:hover {
  transform: translateX(100px); // 🛠 ข้ามขั้นตอน Layout ไปทำที่ Composite เลย!
}

🪤 4. The Junior Trap: โรค "Render-Blocking"

จูเนียร์มักจะใส่ไฟล์ JavaScript ก้อนใหญ่ๆ ไว้ในส่วนบนของไฟล์:

HLJS HTML
<!-- ❌ Junior Trap: ขวางทางเดินข้อมูล -->
<head>
  <script src="heavy-library.js"></script>
  <!-- 🌋 พัง! Browser จะหยุดสร้างหน้าเว็บบรรทัดนี้ทันทีเพื่อรอโหลดไฟล์จนเสร็จ -->
</head>

ระวัง: การไม่ใส่ defer หรือ async ใน Script จะทำให้ผู้ใช้เห็น "หน้าจอขาว" (White Screen) นานเกินไป เพราะท่อถูกอุดโดยไฟล์ JS ✅ การแก้ไข: ใส่ defer เสมอ เพื่อให้ Browser สร้างหน้าเล่นไปพร้อมๆ กับโหลดไฟล์ในเบื้องหลัง


⚖️ 5. The Why Matrix: Layout vs Composite

หัวข้อLayout Property (left, margin)Composite Property (transform, opacity)
ความเร็ว🐢 ช้า (CPU คำนวณหนัก)🚀 เร็วแสง (GPU ช่วยทำ)
ผลกระทบกระทบตัวอื่นรอบข้างไม่กระทบใครเลย (แยกเลเยอร์)
ความลื่นไหลเสี่ยงต่ำกว่า 60fps⚡⚡⚡ เสถียน 60fps ตลอดเวลา
เหมาะกับการจัดวางตอนแรกการทำ Motion / Animation

🎓 6. Senior Mindset Summary

การเป็น Senior คือการรู้ว่า "Pixels ไม่ได้เกิดขึ้นโดยบังเอิญ". ทุกครั้งที่คุณเขียน CSS หนึ่งบรรทัด คุณกำลังสั่งงานระดับฮาร์ดแวร์ การเลือก Property ที่ข้ามขั้นตอนหนักๆ ได้ คือกุญแจสำคัญที่ทำให้เว็บของคุณลื่นไหลกว่าคู่แข่งครับ!

Share this note

Mission Accomplished

You've reached the end of this module. Time to apply these senior mindsets to your real-world projects!

Explore more topics

© 2026 My Notes by Seereen