Back to notes
mastery-frontend-react
Featured

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

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

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: เว็บ "กระตุก" เพราะ Render เกินจำเป็น

จูเนียร์ส่วนใหญ่มักจะกลัวการคำนวณสดๆ เลยใช้วิธีเก็บทุกอย่างลง State:

HLJS TSX
// ❌ Naive Approach: ใช้ useEffect เพื่อ Sync State (ทำให้เกิด Double Render)
function Form() {
  const [firstName, setFirst] = useState("John");
  const [lastName, setLast] = useState("Doe");
  const [fullName, setFull] = useState("");

  useEffect(() => {
    setFull(firstName + " " + lastName); // 🌋 พัง! พอมัน setFull ปุ๊บ มันจะ Render รอบที่ 2 ทันที
  }, [firstName, lastName]);

  return <div>{fullName}</div>;
}

ปัญหา: ทุกครั้งที่พิมพ์ชื่อ React จะวาดรูป 2 ครั้ง (ครั้งแรกเปลี่ยนชื่อ ครั้งสองเปลี่ยนชื่อเต็ม) ถ้า Component ใหญ่กว่านี้ เว็บคุณจะเริ่ม "พิมพ์แล้วหน่วง" และเปลือง CPU โดยใช่เหตุครับ


💡 2. Real-Life Analogy: เลขากับการ "จดงาน" ที่ซ้ำซ้อน

ลองนึกภาพว่าคุณเป็น "เจ้านาย" และมี "เลขา (React)".

  • Redundant State: คุณสั่งเลขาว่า "จดชื่อจริงไว้ (firstName)" และ "จดนามสกุลไว้ (lastName)" แล้วกำชับอีกว่า "ถ้าสองอย่างนี้เปลี่ยน ให้ลุกไปหยิบกระดาษใบใหม่มาเขียนชื่อเต็ม (setFull) แล้วมาส่งผมนะ" (เสียเวลาเดิน 2 รอบ)
  • Derived State: คุณสั่งเลขาแค่ "จดชื่อจริงกับนามสกุลไว้ทีนะ" แล้วตอนคุณถามว่าชื่อเต็มคืออะไร เลขาสามารถ "ตะโกนบอกได้ทันที" โดยไม่ต้องลุกไปเขียนกระดาษใหม่ (คำนวณตอน Render เลย)

🚀 3. Execution Journey: เส้นทางของการ "เกิดใหม่" (Re-render)

เมื่อมีการคลิกปุ่มหรือพิมพ์ข้อมูล นี่คือสิ่งที่ React ทำ:

🛠 Step-by-step:

  1. Trigger: State เปลี่ยน
  2. Re-calculating: React รันฟังก์ชันซ้ำทั้งก้อน เพื่อหาค่าใหม่ (ตอนนี้แหละที่ Derived State ทำงาน)
  3. Comparing: ถ้าผลลัพธ์เหมือนเดิม (Referential Equality) มันจะหยุดทำต่อ
  4. Updating: ถ้าต่างกัน มันถึงจะไปแตะ Real DOM
HLJS TSX
// ✅ Best Practice: ใช้ Functional Update เพื่อลดความยุ่งเหยิงของ Dependency
const addCount = useCallback(() => {
  setCount((prev) => prev + 1); // 🛠 ไม่ต้องดึง count เข้ามาใน [] ของ useCallback ให้มันรันใหม่มั่วซั่ว
}, []);

🪤 4. The Junior Trap: โรค "บ้า useMemo"

จูเนียร์มักจะคิดว่าใส่ useMemo ครอบทุกอย่างแล้วจะเร็ว:

HLJS TSX
// ❌ Junior Trap: ใช้ useMemo กับเรื่องขี้ผง
const isShow = useMemo(() => active && visible, [active, visible]);

ทำไมถึงช้าลง? เพราะ React ต้องเสียแรงไปจำค่าเก่า (Memory) และเสียแรงมานั่งวน Loop เช็คค่าใน [] (CPU) เพื่อเปรียบเทียบว่า "เปลี่ยนหรือยัง?" ซึ่งงานที่ทำใน useMemo ดันง่ายกว่าการที่ React นั่งเช็คซะอีก! ✅ การแก้ไข: ใช้ useMemo กับการ Filter/Sort ข้อมูลหลักพันตัวเท่านั้น หรือเมื่อต้องการรักษา "ที่อยู่" ของ Object เพื่อส่งให้ลูกที่ทำ React.memo ไว้


⚖️ 5. The Why Matrix: ท่าไหนคุ้มค่ากว่ากัน?

เทคนิคความยากผลลัพธ์ที่ได้เมื่อไหร่ที่ควรใช้
Derived State⭐️⚡⚡⚡ เร็วมากตลอดเวลาที่ทำได้
Common Lift Up⭐️⭐️⚡⚡ ลด Render ลูกเมื่อ State ใช้ร่วมกันหลายจุด
useMemo / useCallback⭐️⭐️⭐️⚡ (มี overhead)งานคำนวณหนักๆ (Loop เยอะ)
React.memo⭐️⭐️⚡⚡Component ลูกที่มีความซับซ้อนสูง

🎓 6. Senior Mindset Summary

การเป็น Senior คือการรู้ว่า "โค้ดที่มี Performance ดีที่สุด คือโค้ดที่ไม่ต้องรัน" ดังนั้นอย่าพยายามหาทางทำให้ useEffect รันเร็วขึ้น แต่จงหาทางลบมันทิ้งแล้วใช้คำนวณสดๆ (Derived State) แทนครับ!

Share this note

Related notes

View all notes
mastery-frontend-react
Advanced

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

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

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

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

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

January 30, 20262 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