- บทความนี้อธิบายความเปลี่ยนแปลงตลอด 20 ปีที่ผ่านมา สำหรับนักพัฒนาที่ออกจากวงการฟรอนต์เอนด์ไปราวปี 2008
- แก่นของบทความคือ เครื่องมือทุกอย่างเป็นเหมือนเนื้อเยื่อแผลเป็นที่เกิดขึ้นบนปัญหาจริง และคำตอบของแต่ละชั้นก็สร้างปัญหาให้ชั้นถัดไปจนซ้อนทับกันมา
- ตลอดทั้งบทความใช้
<button>หนึ่งอันเป็นตัวอย่าง เพื่อติดตามว่าปุ่มเปลี่ยนไปอย่างไรในแต่ละยุค
- Layer I — jQuery (2006–2010)
- เริ่มจากความต้องการเปลี่ยนเพียงบางส่วนของหน้า โดยไม่ต้องรีเฟรชทั้งหน้า
- jQuery ลบความแตกต่างระหว่างเบราว์เซอร์และทำให้ AJAX แพร่หลาย แต่ก็ทำให้ข้อมูลอยู่ทั้งในตัวแปร JS และบนหน้าจอ นักพัฒนาจึงต้องซิงก์เอง
- การจัดการ DOM แบบแมนนวลนี้คือ “บาปกำเนิด” ที่ทุกชั้นหลังจากนั้นพยายามแก้
- Layer II — เฟรมเวิร์ก (2010–2015)
- UI แบบ declarative: แทนที่จะเขียนขั้นตอนการอัปเดตหน้าจอ ให้บรรยายว่าหน้าจอควรมีหน้าตาอย่างไรตามข้อมูล แล้วเฟรมเวิร์กจัดการอัปเดตให้
- React นำยุคด้วยคอมโพเนนต์ + JSX + Virtual DOM และมี Vue/Angular/Svelte/Solid ตามมา
- ปัจจุบันเฟรมเวิร์กทั้งหมดกำลังมาบรรจบกันที่แนวคิด signal ซึ่งติดตาม dependency แล้วอัปเดตเฉพาะจุดที่จำเป็น
- ยังมีกลุ่มที่ย้อนกลับไปใช้แนวทางให้เซิร์ฟเวอร์ส่ง HTML เช่น htmx, Alpine.js, Hotwire
- Layer III — บิลด์ (2012–2018)
- เนื่องจาก JS ไม่มีระบบโมดูล CommonJS และ ES Modules จึงแข่งขันกัน และเพื่อรองรับเบราว์เซอร์เก่า จึงต้องใช้ Babel transpile และ webpack bundle
- การบิลด์รวมถึง minify, tree-shaking, code splitting และการสร้าง sourcemap
- สิ่งที่แลกมาคือ node_modules และแม้แต่โปรเจกต์เริ่มต้นเปล่าๆ ก็ยังติดตั้งไฟล์ราว 250,000 ไฟล์
- Layer IV — การแข่งขันด้านเครื่องมือ (2018–2024)
- เป็นยุคที่แก้ปัญหาบิลด์ช้าและการตั้งค่า webpack ซับซ้อน ด้วยการเขียนใหม่ด้วย Go/Rust
- esbuild (Go) ทำให้การ bundle เร็วขึ้น 10–100 เท่า และ SWC (Rust) เข้ามาแทน Babel
- Vite กลายเป็นเครื่องมือพื้นฐาน และ bundler สำหรับ production กำลังถูกแทนที่ด้วย Rolldown ที่ใช้ Rust โดยสแตกที่เกี่ยวข้องกำลังถูกรวมไว้ใต้ VoidZero (ซึ่ง Cloudflare เพิ่งเข้าซื้อ)
- package manager ก็เดินตามแนวทางเดียวกัน เช่น pnpm, Bun
- Layer V — การกลับมาของ server rendering (2014–2026)
- SPA ให้เซิร์ฟเวอร์ส่งเพียง div ว่างๆ จึงมีปัญหาหน้าจอว่างตอนโหลดครั้งแรก และเสิร์ชเอนจินก็มองเห็นเป็นหน้าเปล่า
- ทางแก้คือการกลับไป render HTML บนเซิร์ฟเวอร์อีกครั้ง ซึ่งเป็นการย้อนกลับไปสู่วิธีของปี 2008
- มี SSR (render ทุก request), SSG (pre-render ตอน build), ISR (SSG ที่อัปเดตอัตโนมัติ) และ meta-framework เช่น Next.js, Astro, SvelteKit, Nuxt เข้ามารับหน้าที่นี้
- ค่าใช้จ่ายของ hydration ที่ทำให้ HTML จากเซิร์ฟเวอร์ “มีชีวิต” อีกครั้งในเบราว์เซอร์กลายเป็นปัญหาใหม่ และมีแนวทางอย่าง Islands (Astro), Resumability (Qwik), React Server Components เพื่อลด hydration
- Layer VI — เครื่องมือด้านวิศวกรรม (2015–2026)
- TypeScript เพิ่มระบบ type ทำให้ refactor ได้อย่างมั่นคง และกลายเป็นมาตรฐานโดยพฤตินัย
- Tailwind นำแนวทางการ styling ด้วย utility class ขณะที่ native CSS ก็พัฒนาไปด้วย nesting, variables, container query ทำให้ความจำเป็นของ tooling เดิมลดลง
- shadcn/ui ทำให้แนวทางการคัดลอกซอร์สมาเป็นเจ้าของ แทนการติดตั้งคอมโพเนนต์ กลายเป็นที่ยอมรับ และ TanStack Query, Zustand, Zod, Vitest, Playwright ก็เป็นชุดคำพื้นฐานของแอปในปี 2026
- Layer VII — การ deploy (2015–2026)
- แทนการอัปโหลดผ่าน FTP เพียงเชื่อม Git repository กับ Vercel/Netlify/Cloudflare ก็จะ build และ deploy อัตโนมัติทุกครั้งที่ push และสร้าง URL live preview ให้ทุก PR
- แนวคิด serverless function และ edge (รันโค้ดในดาต้าเซ็นเตอร์หลายร้อยแห่งใกล้ผู้ใช้) กลายเป็นเรื่องปกติ
- Layer VIII — AI (2023–2026)
- เมื่ออธิบายด้วยภาษาธรรมชาติให้ v0, Lovable, Bolt ก็สามารถสร้างฟรอนต์เอนด์ที่ทำงานได้ และ Cursor, Claude Code, Copilot ก็ช่วยเขียนโค้ดแทน
- แม้แต่วิศวกร backend/system ก็สามารถสร้างฟรอนต์เอนด์ได้ภายในหนึ่งวัน ทำให้เส้นแบ่งระหว่างสาขาวิศวกรรมเริ่มเลือนลง
- อย่างไรก็ตาม โค้ดที่ถูกสร้างขึ้นตั้งอยู่บนความรู้ของทั้ง 8 ชั้นข้างต้น และเป้าหมายของบทความนี้คือการอุดช่องว่างนั้น
- Bedrock — บทสรุป
- ทิศทางแนวหน้าของปี 2026 คือ render HTML บนเซิร์ฟเวอร์ ส่ง JS ให้น้อยมาก และใช้ประโยชน์จากเว็บแพลตฟอร์ม
- บทความสรุปว่า หลังจากอุตสาหกรรมเดินเป็นวงใหญ่ตลอด 20 ปี ก็กลับมายังจุดที่คล้ายกับไฟล์ที่เคยอัปโหลดด้วย FTP
4 ความคิดเห็น
วุ่นวายจริง ๆ...
รู้สึกเหมือนเพิ่งใช้ Nodejs เวอร์ชัน 0.8 ไปเมื่อวานนี้เอง....
ฝั่งฟรอนต์เอนด์ก็น่าจะดีพลอยบนคอนเทนเนอร์
nginxเป็นหลักไม่ใช่เหรอ...อ่านเพลินดีมากเลยครับ 555