ทำความเข้าใจหลักการทำงานของเฟรมเวิร์ก JavaScript สมัยใหม่
- การลองสร้างเฟรมเวิร์ก JavaScript ของตัวเองช่วยให้เรียนรู้ได้ดีขึ้น
- "เฟรมเวิร์ก JavaScript สมัยใหม่" ในที่นี้หมายถึงเฟรมเวิร์กหลังยุค React
- เฟรมเวิร์กเหล่านี้ได้รับแรงบันดาลใจจาก React แต่พัฒนาไปในทิศทางที่คล้ายกัน
คุณลักษณะของเฟรมเวิร์กสมัยใหม่
- ใช้ reactivity สำหรับอัปเดต DOM
- ใช้การโคลนเทมเพลต (cloning templates) สำหรับเรนเดอร์ DOM
- ใช้ Web API สมัยใหม่อย่าง
<template>และProxy
Reactivity
- มักมีการพูดกันว่า React ไม่ได้เป็นแบบ reactive
- เฟรมเวิร์กสมัยใหม่ใช้โมเดล reactivity แบบ push-based โดยให้ความสำคัญกับประสิทธิภาพ
- ใช้
Proxyเพื่อให้ DOM อัปเดตทุกครั้งที่ state เปลี่ยนแปลง
การโคลนต้นไม้ DOM (Cloning DOM trees)
- การใช้แท็ก
<template>เพื่อ parse HTML หนึ่งครั้งแล้วโคลนทั้งก้อนได้อย่างรวดเร็วเป็นเทคนิคที่มีประสิทธิภาพ - วิธีนี้ถูกใช้งานในเฟรมเวิร์ก JavaScript หลายตัว
JavaScript API สมัยใหม่
<template>และProxyเป็น API ที่ช่วยในการสร้างระบบ reactivity- ใช้ tagged template literals เพื่อทำให้ API ของ HTML template เรียบง่ายขึ้น
ขั้นตอนการสร้าง Reactivity
- Reactivity ซึ่งกำหนดการจัดการ state และการอัปเดต DOM เมื่อ state เปลี่ยน คือรากฐานของเฟรมเวิร์ก
- ใช้
Proxyเพื่อตรวจจับการเปลี่ยนแปลงของ state และใช้queueMicrotaskเพื่อจัดการการอัปเดตอย่างมีประสิทธิภาพ
ขั้นตอนการเรนเดอร์ DOM
- ใช้ฟังก์ชัน
htmlเพื่อสร้างต้นไม้ DOM และอัปเดตอย่างมีประสิทธิภาพ - ใช้ tagged template literals เพื่อเขียน HTML template และใช้
WeakMapเพื่อปรับแต่งการ parse HTML ให้มีประสิทธิภาพขึ้น
การรวม Reactivity เข้ากับการเรนเดอร์ DOM
- ใช้
createEffectเพื่ออัปเดต DOM ตาม state - ทำให้ข้อความอัปเดตโดยอัตโนมัติเมื่อ state เปลี่ยน
ขั้นตอนถัดไป
- ยังมีอีกหลายวิธีในการปรับปรุงระบบเรนเดอร์ DOM
- เป้าหมายคือ parse เทมเพลตเพียงครั้งเดียว และตั้งค่า binding เพียงครั้งเดียวเพื่อลดการอัปเดตให้น้อยที่สุด
ความเห็นของ GN⁺
ใจความสำคัญที่สุดของบทความนี้คือการทำความเข้าใจแนวคิดหลักและวิธีการนำไปสร้างจริงของเฟรมเวิร์ก JavaScript สมัยใหม่ รวมถึงกระบวนการเรียนรู้ผ่านการลงมือสร้างเฟรมเวิร์กของตัวเองจริง ๆ แนวทางนี้เปิดโอกาสให้วิศวกรซอฟต์แวร์ระดับเริ่มต้นได้เข้าใจการทำงานภายในของเฟรมเวิร์กและลองนำไปใช้จริง จึงเป็นประสบการณ์การเรียนรู้ที่ทั้งน่าสนใจและมีประโยชน์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สำหรับการทำความเข้าใจพื้นฐานเกี่ยวกับหัวข้อนี้ ขอแนะนำแหล่งข้อมูลต่อไปนี้:
การอธิบายความเข้าใจผิดเกี่ยวกับ React และวิธีการทำงานจริง:
useMemoไม่ได้ป้องกันการ re-render แต่React.memoทำหน้าที่นั้นมุมมองเชิงบวกต่อ Svelte และกรณีการใช้งาน:
มุมมองที่หลากหลายเกี่ยวกับเฟรมเวิร์กแบบ reactive:
คำถามและการถกเถียงเกี่ยวกับ reactivity ของ React:
คำถามที่โยนไปยังผู้มีประสบการณ์สูงด้านฟรอนต์เอนด์เฟรมเวิร์ก: