39 คะแนน โดย kciter1 1 일 전 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความนี้อธิบายความเปลี่ยนแปลงตลอด 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 ความคิดเห็น

 
aer0700 1 일 전

วุ่นวายจริง ๆ...

 
hmmhmmhm 1 일 전

รู้สึกเหมือนเพิ่งใช้ Nodejs เวอร์ชัน 0.8 ไปเมื่อวานนี้เอง....

 
kankala 1 일 전

ฝั่งฟรอนต์เอนด์ก็น่าจะดีพลอยบนคอนเทนเนอร์ nginx เป็นหลักไม่ใช่เหรอ...

 
ng0301 1 일 전

อ่านเพลินดีมากเลยครับ 555