באופן כללי יש שתי דרכים לבנות אתר
- דפי HTML+CSS+JS סטטיים
- אתר דינמי שיוצר את הדף מתוך הקוד בכל בקשה
במשך השנים מי שרצה להקים בלוג פשוט השתמש באתר דינמי (כמו וורדפרס) כי לבנות אותו לבד מדפי HTML זה קצת כאב ראש.
אבל בשנים האחרונות יש טרנד של כלים שאחרי כל שינוי ממירים את כל האתר לדפים סטטיים, וכך אפשר להעלות את כל האתר לS3 ולשכוח מניהול עומסים באתר עם תעבורה גבוה (כמו אתר חדשות) או לשים על שרת קטן עם כח עיבוד נמוך לאתר עם תעבורה נמוכה (כמו בלוג).
אפשר לבנות אפילו חנות ולבנות את כל הדפים מתוך מסד נתונים
ורק להוסיף API קטן לניהול העגלה.
חוץ מיעילות כמובן זה מוסיף גם לאבטחה
כי לתוקף יש גישה רק לקבצים סטטיים ולא יכול להזריק קוד וכו'
לקריאה נוספת:
https://jamstack.org/generators
https://www.cloudflare.com/learning/performance/static-site-generator
Discussion (3)
הדגש צריך להיות שאתר סטטי אינו עובר רינדור בשרת אלא רק בדפדפן. השרת רק שולח את הקבצים שמבקשים ממנו.
בניגוד לזה, server side rendering (ssr) מבצע בשרת רינדור ראשוני של ה html לפני שהוא שולח.
הייתרונות של ssr קשורים תמיד למידע דינאמי, כאשר הבחירה היא או שהדפדפן יבקש מידע מapi, או שהשרת יבקש.
כאשר הדפדפן מבקש את המידע הוא צריך לרנדר את כל העמוד אחרי שהוא ממתין לתוצאה.
בניגוד לכך רינדור שמתבצע בשרת יכול להסתמך על cache חכם וכך לחסוך ברינדורים.
וגם ייתכן שהמעבדים של השרת מהירים מהדפדפן.
כתוצאה מכל זה, ssr יכול להיות הרבה יותר מהיר במקרים מסוימים, ולכן גם לקבל קידום לא קטן ממנועי החיפוש.
אני לא מדבר על אפליקציית ריאקט וכדו'
אלא לרנדר בצד שרת את כל האתר בכל פעם כשכותבים את התוכן
ולא לרנדר כל דף בכל בקשה מחדש.
אין כאן API בכל הסיפור כל כל הדפים כבר מרונדרים, ולרוב לא צריך כמעט JS.
במקרה של בלוג סטנדרטי או אפילו אתר חדשות קלאסי אין רינדור נוסף בדפדפן בגלל שזה דף שרונדר לפני שעתיים ולא לפני 2 שניות, ואין סיבה שהצד שרת יאסוף את כל המידע מחדש מהמסד נתונים בכל בקשה.
הנה לדוגמה האתר של letsencrypt
יש בו רק קובץ js קטן, כל השאר זה HTML+CSS
אין סיבה לאחסן כזה אתר בוורדפרס
ולבנות את כל הדפים לבד עם HTML+CSS זה קצת מיותר.
הנה עוד כמה אתרים שמשתמשים במנוע SSG
כמובן שלפעמים צריך לשלב API דינמי, למשל למנוע חיפוש באתר.
kubernetes.io
vote.gov
docs.datadoghq.com
blog.getbootstrap.com