Compiler First in Svelte คือแนวคิดที่ทำให้ Framework Svelte.js แตกต่างจาก React.js และ Vue.js ด้วยการใช้ตัว Compiler แปลงโค้ดให้ทำงานอย่างมีประสิทธิภาพตั้งแต่ขั้นตอน Build ไม่ต้องพึ่ง Virtual DOM เหมือนเฟรมเวิร์กอื่น ส่งผลให้แอปพลิเคชันเบา โหลดเร็ว และจัดการการเปลี่ยนแปลงของ UI ได้ตรงจุดยิ่งขึ้น เหมาะสำหรับผู้เริ่มต้นและผู้ที่ต้องการพัฒนาเว็บที่มีประสิทธิภาพสูง
ในโลกการพัฒนาเว็บสมัยใหม่ เฟรมเวิร์กอย่าง React.js และ Vue.js ได้รับความนิยมอย่างสูงจากแนวคิดการบริหารจัดการ UI ผ่าน Virtual DOM ซึ่งช่วยให้การปรับปรุงหน้าจอเป็นไปอย่างเป็นระบบและลดความยุ่งยากของนักพัฒนา อย่างไรก็ตามเมื่อขนาดโปรเจกต์ใหญ่ขึ้น การใช้ Virtual DOM ก็ยังมีภาระบางอย่างที่หลีกเลี่ยงไม่ได้ เช่น การต้องเปรียบเทียบโครงสร้าง Virtual DOM เดิมกับ Virtual DOM ใหม่ (Diffing) ทุกครั้งที่ข้อมูลเปลี่ยน
Svelte เสนอแนวทางใหม่ที่เรียกว่า Compiler First ซึ่งแตกต่างจากเฟรมเวิร์กส่วนใหญ่ โดยเน้นให้ Compiler ทำงานหนักแทนเบราว์เซอร์ในขั้นตอน Runtime ผลลัพธ์คือเว็บที่เบา เร็ว และมีการจัดการ UI อย่างตรงไปตรงมา
ก่อนทำความเข้าใจ Svelte.js เราต้องมองวิธีที่ React.js และ Vue.js จัดการ UI
Virtual DOM คือโครงสร้างข้อมูลที่เป็นตัวแทนของ DOM จริงในหน่วยความจำ เมื่อข้อมูลเปลี่ยน เฟรมเวิร์กจะมำการ
สิ่งนี้ช่วยลดปริมาณการแตะต้อง DOM โดยตรง ซึ่งเป็นกระบวนการที่ค่อนข้างช้า
function Counter() {
const [count, setCount] = React.useState(0)
return (
<button onClick={() => setCount(count + 1)}>
Count: {count}
</button>
)
}
เมื่อกดปุ่ม Count React.js จะทำการ
แทนที่ Svelte.js จะใช้ Virtual DOM เหมือนเฟรมเวิร์กหลัก ๆ มันเลือกใช้วิธีการที่เรียกว่า
Compile โค้ดเป็น JavaScript ที่แก้ไข DOM ตรงตามที่ต้องการ
นั่นคือโค้ดของ Svelte.js หลังจากการ Comiple จะไม่ต้องมีการเปรียบเทียบ Virtual DOM เลย เพราะตัว Compiler รู้ตั้งแต่ตอน Build แล้วว่าต้องอัปเดต DOM ส่วนไหนเมื่อข้อมูลเปลี่ยน
ทำให้ผลลัพธ์คือ
<script>
let count = 0;
</script>
<button on:click={() => count++}>
Count: {count}
</button>
เมื่อ Build โปรเจกต์ Svelte.js จะแปลงโค้ดด้านบนเป็นโค้ด JavaScript ที่คล้ายกับตัวอย่างโค้ดด้านล่าง
button.addEventListener('click', () => {
count += 1
button.textContent = `Count: ${count}`
})
ทำให้ผลลัพธ์คือ
Compiler First คือปรัชญาที่ผลักภาระจาก Runtime ไปให้ Compiler จัดการตั้งแต่แรก ทำให้ Svelte กลายเป็นเฟรมเวิร์กที่เรียบง่ายแต่ทรงพลังสำหรับผู้เริ่มต้นและนักพัฒนาที่ต้องการประสิทธิภาพสูง
แม้ React.js และ Vue.js จะมี Ecosystem ใหญ่กว่า แต่ Svelte.js เสนอทางเลือกที่น่าสนใจสำหรับผู้ที่ต้องการประสบการณ์พัฒนาแบบเบา รวดเร็ว และชัดเจน