Hardware
น้องๆ เคยสงสัยมั้ยว่าเว็บที่เราเข้าทุกวันเนี่ย มันมีกี่แบบ? หลักๆ เลยนะ มีสองแบบคือ Dynamic กับ Static เว็บ Dynamic ก็อย่างพวก Facebook, Shopee ที่ข้อมูลมันเปลี่ยนไปเรื่อยๆ ตาม User แต่เว็บ Static เนี่ย มันเหมือนหนังสือพิมพ์ คือข้อมูลมันตายตัว ไม่ค่อยเปลี่ยน
Astro Framework เนี่ย มันเป็นตัวช่วยสร้างเว็บ Static เจ๋งๆ นั่นแหละ สมัยผมทำร้านเน็ต SiamCafe.net เมื่อก่อนนะ เว็บส่วนใหญ่ก็ Static นี่แหละ เพราะมันง่าย เร็ว และประหยัด Server (ยุคนั้น Server แพงนะน้อง) Astro มันช่วยให้เราสร้างเว็บ Static ได้ง่ายขึ้นเยอะมากๆ แถมยังใส่ลูกเล่น Dynamic บางอย่างเข้าไปได้ด้วยนะ
ทำไมมันถึงสำคัญ? น้องลองคิดดูดิ เว็บ Static มันโหลดเร็วกว่าเยอะ เพราะมันไม่ต้องไปประมวลผลอะไรที่ Server เลย แค่ส่งไฟล์ HTML ไปให้ Browser ก็จบ แล้ว Google ก็ชอบเว็บที่โหลดเร็วๆ ด้วยนะ ทำให้ SEO ดีขึ้นไปอีก แถมยังปลอดภัยกว่าด้วย เพราะมันไม่มี Database ให้ Hack
อันนี้น้องต้องมีพื้นฐานบ้างนะ เหมือนเราจะทำอาหาร ก็ต้องรู้จักวัตถุดิบก่อน HTML ก็คือโครงสร้างของเว็บ CSS คือการตกแต่งให้สวยงาม JavaScript คือการใส่ลูกเล่นให้มัน
Astro มันทำงานบน Node.js น้องต้องลง Node.js ก่อนนะ แล้วก็ npm (Node Package Manager) หรือ yarn, pnpm ก็ได้ พวกนี้มันจะช่วยจัดการ Package ต่างๆ ที่เราใช้ในโปรเจกต์
# Check Node.js version
node -v
# Check npm version
npm -v
น้องต้องคล่อง Command Line บ้างนะ เพราะเราจะใช้ Command Line ในการสร้างโปรเจกต์ Astro, Build เว็บ และ Deploy เว็บ
เริ่มต้นง่ายมากๆ น้องแค่มี Node.js กับ npm ก็พอแล้ว
เปิด Command Line แล้วพิมพ์คำสั่งนี้เลย
npm create astro@latest
มันจะถามชื่อโปรเจกต์ แล้วก็ Template ที่เราอยากใช้ น้องเลือก Blank Template ไปก่อนก็ได้
พอสร้างโปรเจกต์เสร็จแล้ว ให้เข้าไปใน Folder โปรเจกต์ แล้วรันคำสั่งนี้
npm run dev
มันจะรัน Server Dev ขึ้นมา แล้วน้องก็เปิด Browser ไปที่ http://localhost:3000 ก็จะเห็นเว็บของเราแล้ว
Astro มันใช้ Component เป็นหลัก น้องลองไปแก้ไฟล์ src/pages/index.astro ดูดิ มันคือหน้าแรกของเว็บเรา น้องแก้ HTML ข้างในได้เลย
---
// Component Script (Optional)
---
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>My Astro Site</title>
</head>
<body>
<h1>Hello, Astro!</h1>
<p>Welcome to my first Astro site.</p>
</body>
</html>
พอเราแก้เว็บจนพอใจแล้ว ก็ Build เว็บได้เลย
npm run build
มันจะสร้าง Folder dist ขึ้นมา ข้างในนั้นจะมีไฟล์ HTML, CSS, JavaScript ที่พร้อม Deploy ไปที่ Server จริง
ส่วนวิธี Deploy เนี่ย มันก็แล้วแต่ว่าเราจะใช้ Server อะไร ถ้าเป็น Netlify หรือ Vercel ก็ง่ายหน่อย แค่ Push Code ขึ้น GitHub แล้วเชื่อมต่อกับ Netlify หรือ Vercel ได้เลย
ดูวิดีโอเพิ่มเติมเกี่ยวกับAstro Framework Static Site Guide:
Astro มันไม่ใช่ Framework เดียวที่ใช้สร้างเว็บ Static นะ มันยังมีทางเลือกอื่นอีกเยอะแยะ เช่น Next.js, Gatsby, Hugo แต่ละตัวก็มีข้อดีข้อเสียต่างกัน
| Framework | ข้อดี | ข้อเสีย |
|---|---|---|
| Astro | เร็ว, ง่าย, รองรับ Component หลายแบบ | Community ยังไม่ใหญ่เท่า Next.js |
| Next.js | Community ใหญ่, รองรับ Server-Side Rendering, มี Features เยอะ | ซับซ้อนกว่า Astro, อาจจะ Overkill สำหรับเว็บ Static เล็กๆ |
| Gatsby | เน้น Performance, มี Plugin เยอะ | Build ช้า, เรียนรู้ยาก |
| Hugo | เร็วมาก, สร้างเว็บขนาดใหญ่ได้ดี | ต้องใช้ Go, เรียนรู้ยาก |
สมัยผมทำ SiamCafe.net นะ ถ้ามี Astro คงสบายกว่านี้เยอะ ไม่ต้องมานั่งเขียน HTML เองทั้งหมด SiamCafe Blog ก็คงหน้าตาดีกว่านี้เยอะเลย
เลือก Framework ไหน ก็ขึ้นอยู่กับความชอบและความถนัดของน้องๆ เลย ลองเล่นดูหลายๆ ตัว แล้วเลือกตัวที่เหมาะกับเราที่สุด SiamCafe Blog มีบทความเกี่ยวกับ Framework อื่นๆ ด้วยนะ ลองเข้าไปอ่านดูได้
เอาล่ะน้องๆ มาถึงตรงนี้แล้ว แสดงว่าเริ่มสนใจ Astro จริงจังแล้วใช่ไหม? สมัยผมทำร้านเน็ต สิ่งที่สำคัญที่สุดคือ "ความเร็ว" ไม่ว่าจะเป็นความเร็วเน็ต ความเร็วเครื่อง หรือความเร็วในการแก้ไขปัญหา Astro ก็เหมือนกัน ทำให้เว็บเร็ว สำคัญสุด!
จำไว้ว่า Static Site มันดีตรงที่โหลดครั้งแรกอาจจะนานหน่อย แต่หลังจากนั้นมัน "ปื้ด" เลยนะ เพราะทุกอย่างมันพร้อมเสิร์ฟอยู่แล้ว นี่แหละเสน่ห์ของมัน
1. Image Optimization: รูปภาพนี่ตัวดีเลย กิน Bandwidth สุดๆ สมัยก่อนเน็ต 56k ยังต้องทำรูปให้เล็กที่สุด เดี๋ยวนี้เน็ตแรงขึ้นก็จริง แต่ก็อย่าประมาท ใช้เครื่องมือบีบอัดรูปภาพก่อนอัพโหลดเสมอ เช่น TinyPNG ฟรีและดี
<img src="/images/my-awesome-image.jpg" alt="My Awesome Image" width="600" height="400">
คำแนะนำ: กำหนด width และ height ใน tag img ด้วยนะ Browser จะได้ Reserve พื้นที่ไว้ก่อน ทำให้ Layout ไม่กระโดดตอนโหลดรูปเสร็จ
2. Code Splitting: ถ้าเว็บเรามี Component เยอะๆ Astro จะ bundle ทุกอย่างเป็นไฟล์เดียว ซึ่งมันใหญ่! ใช้ Code Splitting แยกไฟล์ Javascript ให้เล็กลง จะช่วยให้โหลดเร็วขึ้น
// component.js
export function myFunction() {
console.log("Hello from component!");
}
// page.astro
<script>
import { myFunction } from './component.js';
myFunction();
</script>
คำแนะนำ: ลองใช้ Dynamic Import ดูนะ import('./component.js').then(module => { module.myFunction() }) มันจะโหลด Component ก็ต่อเมื่อจำเป็นเท่านั้น
3. Caching: ใช้ประโยชน์จาก Browser Caching และ CDN (Content Delivery Network) สมัยก่อนผมใช้ Squid Cache Server ในร้านเน็ต เดี๋ยวนี้ CDN มันง่ายกว่าเยอะ แค่สมัครบริการก็ใช้ได้เลย
คำแนะนำ: ตั้งค่า HTTP Headers ให้ถูกต้อง เช่น Cache-Control เพื่อบอก Browser ว่าจะ Cache ไฟล์นานแค่ไหน
4. Preload Critical Assets: ถ้ามีไฟล์ CSS หรือ Javascript ที่จำเป็นต้องใช้ตั้งแต่โหลดหน้าเว็บครั้งแรก ให้ Preload เลย จะช่วยให้ Browser ดาวน์โหลดไฟล์นั้นก่อนไฟล์อื่นๆ
<link rel="preload" href="/styles/global.css" as="style">
<link rel="preload" href="/scripts/main.js" as="script">
คำแนะนำ: ใช้ rel="preload" กับ as="style" หรือ as="script" เพื่อบอก Browser ว่าไฟล์นั้นคืออะไร
Astro เหมาะกับเว็บที่เน้น Content เป็นหลัก เช่น Blog, Documentation, Portfolio หรือ Landing Page ที่ต้องการความเร็วและความเรียบง่าย ถ้าเป็นเว็บที่ต้องการ Dynamic Content เยอะๆ อาจจะต้องใช้ Framework อื่น เช่น Next.js หรือ SvelteKit
Next.js เป็น Full-Stack Framework ที่ทำได้ทั้ง Static Site Generation (SSG) และ Server-Side Rendering (SSR) ในขณะที่ Astro เน้น SSG เป็นหลัก ทำให้ Astro เร็วกว่าในแง่ของ Time to First Byte (TTFB) แต่ Next.js มี Feature ที่หลากหลายกว่า
Astro รองรับ Component Framework หลายตัว เช่น React, Vue, Svelte, Preact, SolidJS แต่ Component จะถูก Render เป็น HTML ใน Build Time ทำให้เว็บเร็วกว่าการใช้ Component Framework แบบ Client-Side Rendering
มีแน่นอน! ลองเข้าไปดูใน Astro Discord นะ Community ที่นั่น Active มาก มีคนพร้อมช่วยเหลือตลอดเวลา
Astro เป็น Framework ที่น่าสนใจมาก สำหรับคนที่ต้องการสร้าง Static Site ที่รวดเร็วและง่ายต่อการใช้งาน ถึงแม้ว่ามันอาจจะไม่ได้มี Feature เยอะเท่า Framework อื่นๆ แต่ด้วยความเรียบง่ายและความเร็วของมัน ทำให้ Astro เป็นตัวเลือกที่ดีสำหรับหลายๆ โปรเจกต์
อย่าลืมลองเอา Best Practices ที่ผมแนะนำไปปรับใช้ดูนะ แล้วจะรู้ว่า Astro มันเจ๋งแค่ไหน! ถ้าอยากอ่านเรื่องราวเกี่ยวกับร้านเน็ตสมัยก่อน แวะไปที่ SiamCafe Blog ได้เลยนะ แล้วก็อย่าลืมเรื่อง Forex ลองดู iCafeForex ด้วยนะ