Back to notes
mastery-frontend-react
Featured

React Rendering Mastery: เทคนิคเสกเว็บให้ลื่นระดับ 60 FPS

ไม่ได้มีแค่ useMemo! เจาะลึกกลไก Rendering Pipeline ของ Browser, เทคนิคใช้ GPU เร่งความเร็วการวาดหน้าจอ และการทำ Zero-Flicker UI ที่จะทำให้เว็บของคุณรู้สึกพรีเมียมที่สุด

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: "แอปทำงานได้... แต่ทำไมมันดูไม่ลื่น?"

ลองนึกถึงวันที่คุณสร้าง Dashboard ที่มีข้อมูลเยอะๆ แล้วเพิ่ม Animation สวยๆ เข้าไป:

HLJS TSX
// ❌ Naive Approach: สั่งหมุน SVG ตรงๆ
<svg className="animate-spin" viewBox="0 0 24 24">
   <circle cx="12" cy="12" r="10" />
</svg>
// 🌋 พัง! ในคอมคุณอาจจะดูลื่น แต่พอลูกค้าเปิดในมือถือหรือเปิดใน Safari
# ตัวหมุนจะ 'กระตุก' อย่างเห็นได้ชัด เพราะ CPU ต้องคำนวณทุุกจุดของ
# Path ใน SVG ใหม่ทุุกเฟรม นี่คือคอขวดที่ทำให้เว็บดูราคาถูกครับ

ปัญหา: ส่วนใหญ่เรามักจะโทษ React ว่าทำ Re-render เยอะ แต่บ่อยครั้งปัญหาอยู่ที่ "Browser Rendering Pipeline" คือจังหวะที่ Browser พยายามวาดสิ่งที่เราสั่งลงบนหน้าจอ การสั่งงานผิดที่ทำให้ CPU ทำงานหนักเกินความจำเป็นครับ


💡 2. Real-Life Analogy: การวาดรูปบนแผ่นใส vs การวาดลงบนกระดาษ

  • CPU Rendering (SVG Animation): เหมือนคุณวาดรูปทุกลายเส้นลงบนกระดาษ ทุุกครั้งที่คุณอยากให้มันขยับ คุณต้องลบแล้ววาดใหม่ทุุกเส้น (กินแรงมหาศาล)
  • GPU Accelerated (Composite Layer): เหมือนคุณวาดรูปลงบน "แผ่นใส" แล้ววางทับลงบนฉากหลัง เวลาอยากให้รูปขยับ คุณแค่เลื่อนแผ่นใสไปมา (ง่ายและเร็ว) เลเยอร์นี้ถูกส่งไปให้ GPU (การ์ดจอ) ช่วยทำหน้าที่ 'ยกแผ่นใส' ให้โดยเฉพาะ
  • content-visibility: เหมือน "พนักงานห้างที่จัดของแค่บนชั้นที่ลูกค้ามองเห็น". ของในโกดังหลังร้าน (ล่างหน้าจอ) ยังไม่ต้องแกะกล่องออกมาวาง จนกว่าลูกค้าจะเดินไปถึงจุดนั้น

🚀 3. Execution Journey: มหากาพย์การดีดนิ้วเสกความลื่น

Senior จะเขียนโค้ดที่ขยับภาระไปให้ชิ้นส่วนคอมพิวเตอร์ที่เหมาะสม (GPU) ทำงาน

🛠 Step-by-step:

  1. The Wrapper Strategy: ห่อ SVG ด้วย <div> แล้ว Animate ที่ตัว Div แทน เพื่อเปิดใช้งาน Hardware Acceleration
  2. The Layout Protector: ใช้ content-visibility: auto กับรายการยาวๆ เพื่อลดภาระการคำนวณ Layout ของ Browser
  3. The Static Hoist: ดึง JSX ที่ไม่คิดจะเปลี่ยนค่าเลยออกมาไว้นอก Component เพื่อไม่ให้ React ต้องเสียเวลาสร้าง Object ใหม่ทุุกรอบ
  4. The Zero-Flicker Script: ฝัง Inline Script เพื่อจัดการ Theme ก่อนที่ React จะเริ่มรัน (กันการกระพริบตอนหน้าเว็บโหลด)
HLJS TSX
// ✅ Best Practice: การทำ GPU Accelerated Animation
function LoadingSpinner() {
  return (
    <div className="animate-spin will-change-transform">
      {/* 🛠 ใช้ will-change เพื่อจองพื้นที่บน GPU ไว้น่วงหน้า */}
      <svg>...</svg>
    </div>
  );
}

🪤 4. The Junior Trap: โรค "useEffect Theme" (เว็บกระพริบตอนโหลด)

จูเนียร์มักจะจัดการ Dark Mode ใน useEffect:

HLJS TSX
// ❌ Junior Trap: หน้าเว็บจะสว่างแว่บหนึ่งก่อนจะมืด
useEffect(() => {
    if (localStorage.theme === 'dark') setTheme('dark');
}, []);
// 🌋 พัง! Browser วาดหน้าขาว (Default) ไปแล้ว User จะเห็นหน้าขาว
# ประมาณ 0.1-0.3 วินาทีก่อนที่จะเปลี่ยนเป็นสีดำ ส่งผลต่อ UX อย่างรุนแรง

ระวัง: ประสบการณ์ 0.1 วินาทีที่แย่ สามารถทำลายความประทับใจแรกลบไปได้ ✅ การแก้ไข: จงฝัง Inline Script สำหรับบล็อกการวาดหน้าจอ (Blocking Script) ไว้เหนือ Content เพื่อเปลี่ยนสีพื้นหลังทันทีที่ HTML ถูกอ่านเจอครับ


⚖️ 5. The Why Matrix: CPU Rendering vs GPU Accelerated

หัวข้อCPU Rendering (ปกติ)GPU Accelerated (Senior)
ความลื่นไหลปานกลาง (60 FPS ไม่สม่ำเสมอ)🚀 ลื่นหัวแตก (นิ่งที่ 60 FPS)
การใช้ทรัพยากรแบตเตอรี่หมดไว🔋 ประหยัดพลังงานกว่า
ความยากง่ายมาก (เขียน Class ปกติ)ปานกลาง (ต้องเข้าใจ Composite Layer)
เหมาะกับข้อความ, รูปภาพนิ่งAnimation, Scroll, Transform

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมองว่า "เราไม่ได้เขียนแค่โค้ดที่รันใน React แต่เราเขียนโค้ดที่ต้องทำงานร่วมกับ Browser และ Hardware". การเข้าใจว่า Browser วาดหน้าจออย่างไร คือกุญแจสำคัญที่จะทำให้เว็บของคุณเหนือกว่ามาตรฐาน และให้ความรู้สึกเหมือนแอปพลิเคชัน Native ราคาแพงครับ!

Share this note

Related notes

View all notes
mastery-frontend-react
Advanced

Advanced React Performance: ปรับแต่งเว็บให้ลื่นระดับ Senior

ปราบ Re-render ให้อยู่หมัดด้วยเทคนิคที่มากกว่าแค่การใช้ useMemo เจาะลึกความผิดพลาดที่จูเนียร์มักจะทำและการออกแบบ State ที่ประหยัดทรัพยากรที่สุด

January 30, 20262 min read
mastery-frontend-react
Advanced

React Hooks Mastery: เข้าใจกลไกและไขความลับระดับ Senior

ไม่ได้เป็นแค่ฟังก์ชัน! เจาะลึกกลไก Linked List เบื้องหลัง Hooks, วิธีแก้ปัญหา Stale Closure ที่ทำให้จูเนียร์กุมขมับ และการใช้ Memoization อย่างมีกลยุทธ์

January 30, 20263 min read
mastery-frontend-react
Advanced

React Under the Hood: Virtual DOM และ Reconciliation ทำงานยังไง?

ไม่ได้มีไว้ท่องจำ! เจาะลึกกลไกภายในของ React เข้าใจ Diffing Algorithm และ Fiber Architecture ว่าทำไม React ถึงเป็น Framework ที่ครองโลก พร้อมวิธีเขียนโค้ดให้สอดคล้องกับเครื่องยนต์หลัก

January 30, 20262 min read

© 2026 My Notes by Seereen