เรียนรู้ว่า SSR (Server-Side Rendering) คืออะไร ทำงานอย่างไร และเมื่อใดควรใช้แทน CSR หรือ SSG เพื่อผลลัพธ์ด้าน SEO ความเร็ว และประสบการณ์ผู้ใช้

การแสดงผลฝั่งเซิร์ฟเวอร์ (SSR) เป็นวิธีสร้างหน้าเว็บที่ เซิร์ฟเวอร์ตอบคำขอด้วย HTML ของหน้านั้น ณ เวลาที่มีคนเรียก แล้วส่ง HTML ที่พร้อมแสดงไปยังเบราว์เซอร์
พูดให้เข้าใจง่าย SSR พลิกรูปแบบ "ส่งเชลล์เปล่าก่อน" แบบเดิม: แทนที่จะส่งหน้าเปล่าแล้วให้เบราว์เซอร์ประกอบเนื้อหาเอง เซิร์ฟเวอร์จะทำงานเรนเดอร์เริ่มต้นให้เสร็จ
ด้วย SSR ผู้ใช้มักจะ เห็นเนื้อหาของหน้าเร็วขึ้น—ข้อความ หัวเรื่อง และเค้าโครงสามารถปรากฎได้อย่างรวดเร็วเพราะเบราว์เซอร์ได้รับ HTML ที่แท้จริงทันที
หลังจากนั้น หน้ายังต้องการ JavaScript เพื่อให้เป็นแบบอินเทอร์แอกทีฟเต็มรูปแบบ (ปุ่ม เมนู ฟอร์ม ตัวกรองเชิงไดนามิก) ดังนั้นลำดับที่พบได้บ่อยคือ:
รูปแบบ "แสดงเนื้อหาก่อน แล้วเพิ่มอินเทอร์แอกชัน" นี้คือเหตุผลที่ SSR ถูกพูดถึงบ่อยในบทสนทนาด้านประสิทธิภาพ (โดยเฉพาะความรู้สึกว่าเร็ว)
SSR ไม่ได้หมายถึง "โฮสต์บนเซิร์ฟเวอร์" (แทบทุกอย่างถูกโฮสต์บนเซิร์ฟเวอร์ได้) แต่หมายถึง ที่มาของการสร้าง HTML เริ่มต้น:
ดังนั้นคุณสามารถใช้ SSR บนหลายรูปแบบการโฮสต์—เซิร์ฟเวอร์ดั้งเดิม ฟังก์ชันแบบ serverless หรือ runtime ที่ edge—ขึ้นกับเฟรมเวิร์กและการdeploy ของคุณ
SSR เป็นตัวเลือกหนึ่งในกลยุทธ์การเรนเดอร์ที่พบบ่อย ต่อไปเราจะเปรียบเทียบ SSR กับ CSR (client-side rendering) และ SSR กับ SSG (static site generation) และอธิบายว่ามีผลอย่างไรต่อความเร็ว UX กลยุทธ์การแคช และผล SEO
SSR หมายถึงเซิร์ฟเวอร์เตรียม HTML ของหน้าให้เสร็จก่อนจะถึงเบราว์เซอร์ แทนที่จะส่งเชลล์ HTML ว่างและให้เบราว์เซอร์สร้างหน้าจากศูนย์ เซิร์ฟเวอร์ส่งเวอร์ชัน "อ่านได้ทันที" ของหน้า
/products/123). เบราว์เซอร์ส่งคำขอไปยังเว็บเซิร์ฟเวอร์ของคุณSSR มักส่ง HTML พร้อมด้วย bundle JavaScript HTML เพื่อการแสดงผลทันที ส่วน JavaScript เปิดใช้งานพฤติกรรมฝั่งไคลเอนต์ เช่น ตัวกรอง โมดอล และปุ่ม "เพิ่มในตะกร้า"
หลังจาก HTML โหลดแล้ว เบราว์เซอร์ดาวน์โหลด bundle JS และแนบตัวจัดการเหตุการณ์กับมาร์กอัปที่มีอยู่ ขั้นตอนส่งมอบนี้คือสิ่งที่เฟรมเวิร์กหลายตัวเรียกว่า hydration
กับ SSR เซิร์ฟเวอร์ต้องทำงานมากขึ้นต่อคำขอ—ดึงข้อมูลและเรนเดอร์มาร์กอัป—ดังนั้นผลลัพธ์จึงขึ้นกับความเร็วของ API/ฐานข้อมูลและวิธีการแคชผลลัพธ์
SSR ส่งหน้า HTML ที่ "อ่านได้" จากเซิร์ฟเวอร์ นั่นดีสำหรับการแสดงเนื้อหาเร็ว แต่ไม่ได้ทำให้หน้าเป็นอินเทอร์แอกทีฟโดยอัตโนมัติ
เซ็ตอัพที่พบมากคือ:
SSR ช่วยให้ผู้ใช้ เห็น หน้าเร็วขึ้น ขณะที่ hydration คือสิ่งที่ทำให้หน้าทำงานเหมือนแอป
Hydration คือกระบวนการที่ JavaScript ฝั่งไคลเอนต์รับมาร์กอัปสเตติกและแนบอินเทอร์แอกชัน: ตัวจัดการคลิก การตรวจสอบฟอร์ม เมนู ตัวกรองไดนามิก และ UI ที่มีสถานะต่าง ๆ
ขั้นตอนเพิ่มนี้ใช้เวลา CPU และหน่วยความจำบนอุปกรณ์ผู้ใช้ บนโทรศัพท์ที่ช้าหรือแท็บที่มีงานมาก การไฮเดรทอาจล่าช้าจนเห็นได้ชัด แม้ HTML จะมาถึงเร็ว
เมื่อ JavaScript ช้าผู้ใช้อาจเห็นเนื้อหาแต่มี "UI ตาย" ชั่วคราว: ปุ่มไม่ตอบสนอง เมนูไม่เปิด และอินพุตหน่วง
ถ้า JavaScript ล้มเหลวทั้งหมด (ถูกบล็อก เกิดข้อผิดพลาดเครือข่าย หรือสคริปต์พัง) SSR ยังคงทำให้เนื้อหาหลักปรากฏ แต่ฟีเจอร์แบบแอปที่ต้องใช้ JS จะไม่ทำงาน ยกเว้นคุณออกแบบ fallback ไว้ (เช่น ลิงก์ที่นำทางปกติ ฟอร์มที่ส่งได้โดยไม่ต้องรันโค้ดฝั่งไคลเอนต์)
SSR กล่าวถึง ที่มาของ HTML เว็บไซต์ SSR หลายแห่งยังคงส่ง JavaScript จำนวนมาก—บางครั้งเทียบเท่ากับแอป CSR—เพราะอินเทอร์แอกชันยังต้องโค้ดรันบนเบราว์เซอร์
SSR และ CSR อาจให้หน้าตาเหมือนกัน แต่ ลำดับงาน ต่างกัน—และนั่นเปลี่ยนความรู้สึกว่าเว็บโหลดเร็วแค่ไหน
กับ CSR เบราว์เซอร์มักดาวน์โหลด bundle JS ก่อน แล้วรันเพื่อสร้าง HTML จนกว่างานนี้จะเสร็จ ผู้ใช้อาจเห็นหน้าจอว่าง spinner หรือ UI แบบเชลล์ ซึ่งทำให้ความรู้สึกว่าโหลดช้าถึงแม้แอปจะเร็วเมื่อโหลดเสร็จ
กับ SSR เซิร์ฟเวอร์ส่ง HTML พร้อมแสดง ทันที ผู้ใช้เห็นหัวเรื่อง ข้อความ และเค้าโครงเร็วขึ้น ซึ่งมักปรับปรุงความรู้สึกว่าเร็วโดยเฉพาะบนอุปกรณ์หรือเครือข่ายช้า
CSR มักเด่นหลังการโหลดครั้งแรก: การนำทางภายในแอปเร็วเพราะแอปรันแล้วบนเบราว์เซอร์
SSR ให้ความรู้สึกเร็วขึ้นตั้งแต่แรก แต่หน้ายังต้อง JavaScript เพื่อเป็นอินเทอร์แอกทีฟเต็มรูปแบบ ถ้า JS หนัก ผู้ใช้อาจเห็นเนื้อหาเร็วแต่ต้องรออีกเล็กน้อยจนทุกอย่างตอบสนอง
SSR และ SSG อาจดูคล้ายสำหรับผู้เข้าชม—ทั้งคู่ส่ง HTML จริงไปยังเบราว์เซอร์ ความแตกต่างสำคัญคือ เมื่อไหร่ HTML นั้นถูกสร้าง
กับ SSG ไซต์ของคุณสร้าง HTML ล่วงหน้าโดยปกติในขั้นตอน build ตอน deploy ไฟล์เหล่านี้สามารถเสิร์ฟจาก CDN เหมือนแอสเซ็ทสเตติก
สิ่งนี้ทำให้ SSG:
ข้อแลกเปลี่ยนคือความสดใหม่: ถ้าเนื้อหาเปลี่ยนบ่อย คุณต้อง build/ดีพลอยใหม่ หรือใช้เทคนิค incremental เพื่ออัพเดตหน้า
กับ SSR เซิร์ฟเวอร์สร้าง HTML ทุกคำขอ (หรือเมื่อแคชหมด) เหมาะเมื่อเนื้อหาต้องสะท้อนข้อมูลล่าสุดสำหรับผู้เยี่ยมชมแต่ละคน
SSR เหมาะกับ:
ข้อแลกเปลี่ยนคือเวลา build กับเวลา request: คุณหลีกเลี่ยงการ build ยาวเมื่อเนื้อหาเปลี่ยนบ่อย แต่เพิ่มงานต่อคำขอบนเซิร์ฟเวอร์ ซึ่งมีผลต่อ TTFB และต้นทุนการดำเนินงาน
ไซต์สมัยใหม่มักเป็นไฮบริด: หน้าโฆษณาและเอกสารเป็น SSG ขณะที่พื้นที่บัญชีหรือผลการค้นหาคือ SSR
คำถามเชิงปฏิบัติที่ช่วยตัดสิน:
การเลือกกลยุทธ์ต่อเส้นทางมักให้สมดุลที่ดีที่สุดระหว่างความเร็ว ต้นทุน และความสดของข้อมูล
SSR มักช่วย SEO เพราะเครื่องมือค้นหาจะเห็นเนื้อหาที่มีความหมายทันทีเมื่อร้องขอหน้า แทนที่จะได้ HTML เปล่าที่ต้องรัน JS เติมข้อมูล
การค้นพบเนื้อหาเร็วขึ้น. เมื่อ HTML มีเนื้อหา เครื่องมือค้นหาสามารถจัดทำดัชนีได้เร็วและสม่ำเสมอมากขึ้น—สำคัญสำหรับไซต์ใหญ่ที่มีงบการครอว์และเวลาเป็นข้อจำกัด
การเรนเดอร์ที่เชื่อถือได้มากขึ้น. แม้เครื่องมือค้นหาสมัยใหม่จะสามารถรัน JavaScript ได้ แต่มันไม่เสมอไปที่รันทันทีหรือคาดเดาได้ บอทบางตัวเรนเดอร์ช้า เลื่อนการรัน JS หรือข้ามการรันเมื่อทรัพยากรจำกัด SSR ลดการพึ่งพาว่า "หวังว่าครอว์เลอร์จะรัน JS ของฉัน"
สัญญาณ SEO บนหน้า. SSR ทำให้ง่ายที่จะใส่สัญญาณสำคัญใน HTML เริ่มต้น เช่น:
คุณภาพเนื้อหาและเจตนา. SSR ช่วยให้เครื่องมือค้นหา เข้าถึง เนื้อหาได้ แต่ไม่ทำให้เนื้อหานั้นมีประโยชน์ ต้นฉบับ หรือสอดคล้องกับการค้นหาของผู้ใช้
โครงสร้างไซต์และลิงก์ภายใน. การนำทางที่ชัดเจน โครงสร้าง URL ที่เป็นเหตุเป็นผล และลิงก์ภายในที่แข็งแรงยังจำเป็นสำหรับการค้นพบและอันดับ
สุขภาพทางเทคนิคของ SEO. ปัญหาเช่น หน้าเนื้อหาบาง โดเมนซ้ำ ลิงก์เสีย แท็ก canonical ผิด หรือการตั้ง noindex ผิด ยังคงกีดกันผลลัพธ์ดีได้ แม้ใช้ SSR อยู่ก็ตาม
คิดว่า SSR เป็นการปรับปรุงความน่าเชื่อถือในการครอว์และเรนเดอร์ มันเป็นพื้นฐานที่ดี ไม่ใช่ทางลัดสู่การจัดอันดับ
การคุยเรื่องประสิทธิภาพกับ SSR มักจะหดมาเป็นเมตริกไม่กี่อย่าง—และความรู้สึกของผู้ใช้ว่า "หน้าแสดงเร็วไหม?" SSR ช่วยให้ผู้ใช้เห็นสิ่งต่าง ๆ ก่อน แต่ก็สามารถย้ายงานไปที่เซิร์ฟเวอร์และการไฮเดรท
TTFB (Time to First Byte) คือเวลาที่เซิร์ฟเวอร์เริ่มส่งอะไรกลับมา กับ SSR TTFB มักมีความสำคัญขึ้นเพราะเซิร์ฟเวอร์อาจต้องดึงข้อมูลและเรนเดอร์ HTML ก่อนตอบ หากเซิร์ฟเวอร์ช้า SSR อาจทำให้ TTFB แย่ลง
FCP (First Contentful Paint) คือเวลาที่เบราว์เซอร์เพนต์เนื้อหาใด ๆ ครั้งแรก SSR มักช่วย FCP เพราะเบราว์เซอร์ได้รับ HTML พร้อมแสดงแทนที่จะเป็นเชลล์ว่าง
LCP (Largest Contentful Paint) คือเวลาที่องค์ประกอบหลักสุดของหน้า (มักเป็นฮีโร่ หัวเรื่อง รูปภาพ หรือชื่อสินค้า) ปรากฎ SSR ช่วย LCP ได้เช่นกัน ถ้า HTML มาถึงเร็วและ CSS/แอสเซ็ทสำคัญไม่บล็อกการเรนเดอร์
SSR เพิ่มงานบนเซิร์ฟเวอร์ต่อคำขอ (ถ้าไม่ได้แคช) ข้อจำกัดสองอย่างที่พบบ่อยคือ:
ข้อสรุปเชิงปฏิบัติ: ประสิทธิภาพ SSR มักเกี่ยวกับเส้นทางข้อมูลของคุณ มุ่งลดรอบการเรียก API ใช้คิวรีที่เร็วขึ้น หรือคำนวณส่วนของหน้าล่วงหน้าจะช่วยได้มากกว่าแก้โค้ดฝั่งหน้าเพียงอย่างเดียว
SSR ดีในแง่ "มุมมองแรก" ผู้ใช้อาจเห็นเนื้อหา เลื่อนหน้า และรู้สึกว่าไซต์ตอบสนองเร็ว แต่การไฮเดรทยังต้อง JS เพื่อเชื่อมปุ่ม เมนู และฟอร์ม
นั่นทำให้เกิดข้อแลกเปลี่ยน:
SSR ที่เร็วที่สุดมักเป็น SSR ที่ถูกแคช หากคุณแคช HTML ที่เรนเดอร์แล้ว (ที่ CDN, reverse proxy, หรือระดับแอป) คุณหลีกเลี่ยงการเรนเดอร์ซ้ำและการดึงข้อมูล ทำให้ TTFB และ LCP ดีขึ้น
กุญแจคือเลือกกลยุทธ์การแคชที่เหมาะกับเนื้อหา (สาธารณะ vs แบบบุคคล) เพื่อให้ได้ความเร็วโดยไม่เผลอส่งข้อมูลของผู้ใช้คนอื่น
SSR อาจรู้สึกช้าเมื่อทุกคำขอบังคับให้เซิร์ฟเวอร์เรนเดอร์ HTML ใหม่ การแคชแก้ปัญหานี้—แต่ต้องระวังว่าปลอดภัยที่จะเก็บอะไร
สแตก SSR ส่วนใหญ่มีหลายชั้นแคช:
การตอบกลับ SSR ที่ถูกแคชจะถูกต้องเมื่อ คีย์แคช ครอบคลุมทุกอย่างที่เปลี่ยนผลลัพธ์ นอกจากพาธ URL แล้ว ความแตกต่างทั่วไปได้แก่:
HTTP ช่วยได้ที่นี่: ใช้ header Vary เมื่อเอาต์พุตเปลี่ยนตาม header ของคำขอ (เช่น Vary: Accept-Language). ระวัง Vary: Cookie—มันอาจทำให้อัตราโดนแคชตก
ใช้ Cache-Control เพื่อกำหนดพฤติกรรม:
public, max-age=0, s-maxage=600 (แคชที่ CDN/proxy 10 นาที)stale-while-revalidate=30 (ให้ส่ง HTML เก่าระหว่างรีเฟรชพื้นหลัง)อย่าแคช HTML ที่รวมข้อมูลส่วนตัวของผู้ใช้เว้นแต่แคชจะแยกต่อผู้ใช้จริง ๆ แนวทางปลอดภัยคือ: แคชเชลล์สาธารณะแล้วดึงข้อมูลเฉพาะบุคคลหลังโหลด (หรือเรนเดอร์ฝั่งเซิร์ฟเวอร์แต่ตั้ง private, no-store) ความผิดพลาดที่นี่อาจรั่วข้อมูลบัญชีผู้ใช้ข้ามคนได้
SSR ทำให้หน้ารู้สึกเร็วและสมบูรณ์บนการโหลดครั้งแรก แต่ก็ย้ายความซับซ้อนกลับมาที่เซิร์ฟเวอร์ ก่อนเลือกใช้ ควรรู้ว่ามีอะไรที่อาจพังได้บ้าง
กับ SSR เว็บไซต์ของคุณไม่ใช่แค่ไฟล์สเตติกบน CDN อีกต่อไป ตอนนี้คุณมีเซิร์ฟเวอร์ (หรือฟังก์ชัน serverless) ที่เรนเดอร์ HTML ตามคำขอ
นั่นหมายความว่าคุณต้องรับผิดชอบการตั้งค่า runtime การปล่อยที่ปลอดภัย (การย้อนกลับสำคัญ) และมอนิเตอร์พฤติกรรมแบบเรียลไทม์: อัตราข้อผิดพลาด คำขอช้า การใช้หน่วยความจำ และการล้มของดีเพนเดนซี การปล่อยที่ผิดพลาดอาจทำให้ทุกคำขอพังทันที ไม่ใช่แค่การดาวน์โหลด bundle ผิด
SSR มักเพิ่มการประมวลผลต่อคำขอ แม้การเรนเดอร์จะเร็วก็ยังเป็นงานที่เซิร์ฟเวอร์ต้องทำสำหรับทุกการเยี่ยมชม
เมื่อเทียบกับโฮสติ้งสเตติกเพียว ๆ ต้นทุนอาจเพิ่มจาก:
เพราะ SSR เกิดตอนคำขอ คุณอาจพบกรณีเช่น:
ถ้าโค้ด SSR เรียก API ภายนอก ดีเพนเดนซีช้าหนึ่งอย่างอาจทำให้หน้าโฮมช้าทั้งหน้า นั่นคือเหตุผลที่การตั้งค่าไทม์เอาต์ ฟอลแบ็ก และการแคชไม่ใช่เรื่องทางเลือก
กับนักพัฒนาหนึ่งปัญหาที่พบบ่อยคือเซิร์ฟเวอร์เรนเดอร์ HTML ที่ไม่ตรงกับสิ่งที่ไคลเอนต์จะเรนเดอร์ตอนไฮเดรท ผลคือคำเตือน การกระพริบ หรืออินเทอร์แอกชันใช้งานไม่ได้
สาเหตุทั่วไปรวมถึงค่าที่สุ่ม ตัวประทับเวลา ข้อมูลเฉพาะผู้ใช้ หรือการเรียก API ที่ใช้งานเฉพาะเบราว์เซอร์ในการเรนเดอร์เริ่มต้นโดยไม่ป้องกันอย่างเหมาะสม
การเลือก "SSR" มักหมายถึงการเลือกเฟรมเวิร์กที่สามารถเรนเดอร์ HTML บนเซิร์ฟเวอร์แล้วทำให้มันอินเทอร์แอกทีฟบนเบราว์เซอร์ได้ นี่คือทางเลือกที่พบบ่อยและคำที่ควรรู้
Next.js (React) เป็นตัวเลือกยอดนิยม รองรับ SSR ต่อเส้นทาง การสร้างสเตติก สตรีมมิง และเป้าการดีพลอยหลายแบบ (Node, serverless, edge)
Nuxt (Vue) ให้ประสบการณ์คล้ายกันสำหรับทีม Vue ด้วยการ routing แบบไฟล์และโหมดการเรนเดอร์ต่าง ๆ
Remix (React) เน้นมาตรฐานเว็บและ routing แบบ nested เหมาะกับแอปที่ดึงข้อมูลหนักที่ต้องการ coupling ระหว่าง routing กับ data loading
SvelteKit (Svelte) ผสาน SSR เอาต์พุตสเตติก และ adapter ให้โฮสต์ต่าง ๆ ด้วยน้ำหนักเบาและการโหลดข้อมูลที่ตรงไปตรงมา
เลือกจากไลบรารี UI ของทีม วิธีโฮสต์ที่ต้องการ (Node server, serverless, edge) และความต้องการควบคุมการแคช สตรีมมิง และการโหลดข้อมูล
ถ้าต้องการทดลองก่อนผูกมัดกับ SSR เต็มรูปแบบ แพลตฟอร์มอย่าง Koder.ai สามารถช่วยสร้างต้นแบบที่มีโครงสร้างโปรดักชันจากอินเทอร์เฟซแชท—มักมี frontend React และ backend Go + PostgreSQL—แล้วทำซ้ำด้วยฟีเจอร์อย่างโหมดวางแผน สแนปชอต และการย้อนกลับ การได้วงจร "ต้นแบบถึงดีพลอย" แบบนี้ช่วยให้วัดผลจริงของ TTFB/LCP ได้แทนการเดา
SSR มีประโยชน์ที่สุดเมื่อคุณต้องการให้หน้าดูพร้อมใช้งานเร็วและอ่านได้แน่นอนโดยเครื่องมือค้นหาและบอทพรีวิวโซเชียล มันไม่ใช่ปุ่มเวทมนตร์ด้านความเร็ว แต่เป็นข้อแลกเปลี่ยนที่ดีเมื่อความประทับใจแรกสำคัญ
SSR มักเด่นสำหรับ:
ถ้าหน้าเปิดสาธารณะและคุณใส่ใจการค้นพบ SSR มักควรพิจารณา
SSR อาจไม่เหมาะเมื่อ:
ในกรณีเหล่านี้ CSR หรือแนวทางผสมมักทำให้โครงสร้างพื้นฐานเรียบง่ายกว่า
พิจารณา SSR เมื่อข้อเหล่านี้เป็นจริง:
SSR ดี แต่สำเร็จได้ง่ายเมื่อคุณตัดสินใจบนข้อจำกัดจริง ไม่ใช่แค่ "อยากให้เร็ว" ใช้เช็คลิสต์นี้ทดสอบก่อนลงทุน
วัดฐานในสภาพแวดล้อมที่ใกล้เคียง production แล้วเปรียบเทียบหลังทำต้นแบบ:
ตั้งการแจ้งเตือนและแดชบอร์ดสำหรับ:
ถ้าเช็คลิสต์ชี้ช่องกังวล ให้ประเมิน แนวทางผสม (SSR + SSG): พรีเรนเดอร์หน้าที่นิ่งด้วย SSG และใช้ SSR เฉพาะที่ความสดหรือการปรับบุคคลจำเป็น นั่นมักให้สมดุลที่ดีที่สุดระหว่างความเร็วและความซับซ้อน
ถ้าตัดสินใจจะทำต้นแบบ ให้ทำวงจรสั้น: ปล่อยเส้นทาง SSR ขั้นพื้นฐาน เพิ่มแคช แล้ววัด ผลลัพธ์จะชัดเจนกว่าเดา เครื่องมือที่ช่วยกระบวนการสร้างและดีพลอย เช่น Koder.ai ช่วยให้การทดสอบ SSR ปลอดภัยและย้อนกลับได้ง่ายในขณะทำซ้ำ
SSR (server-side rendering) คือการที่เซิร์ฟเวอร์สร้าง HTML ของหน้าเมื่อมีผู้ขอ URL นั้น ๆ แล้วส่ง HTML ที่พร้อมแสดงไปยังเบราว์เซอร์
ต่างจากคำว่า “โฮสต์บนเซิร์ฟเวอร์” (แทบทุกอย่างก็โฮสต์บนเซิร์ฟเวอร์ได้) SSR ระบุเฉพาะว่า HTML เริ่มต้นถูกสร้างที่ไหน: บนเซิร์ฟเวอร์ต่อคำขอ (หรือเมื่อแคชหมดอายุ)
ลำดับการทำงาน SSR ทั่วไปเป็นดังนี้:
/products/123).ความแตกต่างด้าน UX ที่สำคัญคือ ผู้ใช้มักจะสามารถ อ่านเนื้อหาได้เร็วกว่า เพราะ HTML จริงมาถึงก่อน
SSR ช่วยให้ผู้ใช้เห็นเนื้อหาได้เร็วขึ้น แต่ไม่ได้ยกเลิกความจำเป็นของ JavaScript สำหรับฟีเจอร์แบบแอป
เว็บไซต์ SSR ส่วนใหญ่จะส่ง:
ดังนั้น SSR มักเป็น “เนื้อหาก่อน อินเทอร์แอกชันทีหลัง” ไม่ใช่ “ไม่มี JavaScript”
Hydration คือขั้นตอนบนฝั่งไคลเอนต์ที่ JavaScript “เปิดใช้งาน” HTML ที่เซิร์ฟเวอร์ส่งมา
ในทางปฏิบัติการไฮเดรทจะ:
บนอุปกรณ์ช้าหรือแพ็กเกจ JS ใหญ่ ผู้ใช้อาจเห็นเนื้อหาเร็วแต่ต้องรอ “UI เฉียบ” จนกว่า hydration จะเสร็จ
CSR มักดาวน์โหลด JavaScript ก่อนแล้วค่อยสร้าง HTML ในเบราว์เซอร์ ซึ่งอาจทำให้ผู้ใช้เห็นหน้าจอว่างหรือ UI แบบเปลือกจนกว่า JS จะรันเสร็จ
SSR ส่ง HTML พร้อมแสดง ตั้งแต่แรก ซึ่งมักทำให้การมองเห็นหน้าเร็วขึ้นสำหรับการเข้าชมครั้งแรก
กฎข้อสังเกตทั่วไป:
SSG สร้าง HTML ล่วงหน้าที่เวลาสร้าง/ดีพลอย และส่งเป็นไฟล์สเตติก—ทำให้แคชได้ดี ทนต่อทราฟิกสูง และง่ายต่อการบริหาร
SSR สร้าง HTML เมื่อมีคำขอ (หรือเมื่อแคชหมด) ซึ่งเหมาะกับเนื้อหาที่ต้องสดหรือขึ้นกับบริบทคำขอ
หลายไซต์ใช้แบบผสม: SSG สำหรับหน้าที่มั่นคง และ SSR สำหรับผลการค้นหา คลังสินค้า หรือหน้าที่ขึ้นกับผู้ใช้
SSR ช่วย SEO โดยใส่เนื้อหาและเมตาไว้ใน HTML เริ่มต้น ทำให้บอทค้นหาและจัดทำดัชนีได้แน่นอนขึ้น
สิ่งที่ SSR ช่วยได้:
สิ่งที่ SSR ไม่ได้แก้:
เมตริกสำคัญที่เกี่ยวข้องคือ:
ประสิทธิภาพ SSR มักขึ้นกับเส้นทางข้อมูล (API/DB) และการแคช มากกว่าเฟรมเวิร์กฝั่ง UI
การแคช HTML ที่เรนเดอร์แล้วทำให้ SSR เร็วขึ้น แต่ต้องระวังไม่ให้แสดงข้อมูลส่วนตัวของผู้ใช้คนอื่น
แนวทางปฏิบัติ:
ปัญหาพบบ่อยของ SSR ได้แก่:
การบรรเทาความเสี่ยง: ตั้งเวลาไทม์เอาต์/ฟอลแบ็ก ลดรอบการเรียกข้อมูล เพิ่มชั้นแคช และทำให้การเรนเดอร์คงที่ทั้งเซิร์ฟเวอร์/ไคลเอนต์
Cache-Control (เช่น s-maxage, stale-while-revalidate).Vary เมื่อจำเป็น เช่น Vary: Accept-Language ระวัง Vary: Cookie ที่ทำให้อัตราการโดนแคชต่ำลงprivate, no-store หรือแคชแยกต่อผู้ใช้เมื่อลังเล ให้แคชเฉพาะเชลล์สาธารณะแล้วดึงข้อมูลส่วนบุคคลหลังโหลด