ระบบค้นหาสำหรับ Static Site ใน Astro
เมื่อเดือนที่แล้ว ผมได้เพิ่มระบบค้นหาให้กับเว็บไซต์สารบัญ AI จำนวน 3 แห่ง
ผมได้เปรียบเทียบตัวเลือกหลัก 4 อย่างก่อนที่จะตัดสินใจเลือก Pagefind และนี่คือเหตุผลที่ผมเลือกมัน
ตัวเลือกที่น่าสนใจ
• Pagefind: ไลบรารีที่พัฒนาด้วย Rust ทำงานในช่วง build time และให้บริการทุกอย่างในรูปแบบไฟล์ static • Algolia DocSearch: บริการแบบ hosted มีความรวดเร็วและใช้งานได้อย่างราบรื่น แต่มีค่าใช้จ่ายสำหรับเว็บไซต์เชิงพาณิชย์ • Lunr.js: ไลบรารีฝั่ง client ทำงานแบบออฟไลน์ได้ แต่จะทำให้การโหลดหน้าเว็บครั้งแรกหนักขึ้น • FlexSearch: ทางเลือกที่เร็วกว่า Lunr แต่ยังคงต้องส่ง index ทั้งหมดไปยังเบราว์เซอร์
ทำไมผมถึงเลือก Pagefind
ขนาดของ Index เว็บไซต์ของผมมีข้อมูล 1,000 รายการ หากใช้ index ของ Lunr จะต้องเพิ่มขนาดถึง 4MB ในการโหลดหน้าเว็บทุกครั้ง แต่ Pagefind ใช้ระบบ shards ซึ่งจะโหลดข้อมูลเป็นส่วนเล็กๆ ตามที่ผู้ใช้พิมพ์ ทำให้การโหลดครั้งแรกมีขนาดไม่ถึง 30KB
ค่าใช้จ่าย Algolia มีค่าใช้จ่าย $49 ต่อเดือนสำหรับเว็บไซต์เชิงพาณิชย์ ในขณะที่งบประมาณรวมสำหรับทั้ง 3 เว็บไซต์ของผมคือ $25 ต่อเดือน ส่วน Pagefind นั้นใช้งานได้ฟรี
การ Deployment Pagefind สร้างไฟล์ static ซึ่ง Cloudflare Pages จะทำการ cache ไฟล์เหล่านี้ไว้ที่ edge โดยอัตโนมัติ คุณจึงไม่จำเป็นต้องจัดการ API keys หรือกังวลเรื่อง rate limits
ข้อแลกเปลี่ยน
Pagefind ไม่ได้สมบูรณ์แบบเสียทีเดียว คุณควรทราบถึงข้อจำกัด 2 ประการนี้:
• ไม่มี Query Logging: เนื่องจาก Pagefind ทำงานบนเบราว์เซอร์ มันจึงไม่สามารถบอกได้ว่าผู้ใช้ค้นหาอะไร ซึ่ง Algolia จะทำส่วนนี้ให้โดยอัตโนมัติ หากใช้ Pagefind คุณต้องสร้างระบบ logging ขึ้นมาเอง • การรองรับคำผิด (Typo Tolerance) ขั้นพื้นฐาน: Pagefind ใช้การทำ stemming แบบพื้นฐาน จึงอาจมีปัญหาเมื่อมีการพิมพ์ผิดมากๆ ในขณะที่ Algolia จัดการเรื่องคำผิดได้ดีกว่ามาก
สรุปการเปรียบเทียบ
• Pagefind: ฟรี, ใช้ไฟล์ static, รองรับการขยายตัวได้ดีด้วย lazy loading, รองรับคำผิดขั้นพื้นฐาน • Algolia: $49/เดือน, ใช้โครงสร้างพื้นฐานแบบ cloud, รองรับการขยายตัวได้ดี, รองรับคำผิดได้ดีเยี่ยม • Lunr.js: ฟรี, ส่ง index ไปพร้อมกับหน้าเว็บ, รองรับการขยายตัวได้ไม่ดี, รองรับคำผิดได้น้อย
บทสรุปของผม
หากคุณรัน Static Site ด้วยงบประมาณจำกัดและมีข้อมูลประมาณ 500 ถึง 1,000 รายการ ให้ใช้ Pagefind แต่ถ้าคุณต้องการการวิเคราะห์ข้อมูลขั้นสูงและการรองรับคำผิดที่สมบูรณ์แบบ การจ่ายเงินให้ Algolia คือคำตอบ
