לקחים משדרוג הבלוג שלי
Astro, Tailwind, MDX, Pagefind, ועוד!
לאחרונה יצאתי למסע לשדרוג האתר שלי מבוסס Gatsby v1, בן יותר מ-8 שנים.
פוסט זה יחלוק כמה לקחים שלמדתי בתהליך זה, כמו גם טכנולוגיות מהנות שחקרתי.
תוכן עניינים
- דרישות הפרויקט
- בחירת ערימת הטכנולוגיה המתאימה לי
- Astro: עקומת למידה ותכונות מפתח
- CSS מודרני: וואו
- חיפוש: Pagefind
- תגובות: Utterances
- Tailwind: חרטות
- סיכום
דרישות הפרויקט
לפני הצלילה לשדרוג, קבעתי סט דרישות:
מכיוון שהבלוג שלי מקבל מספר משתנה מאוד של צפיות יומיות, הרגשתי שאתר שנוצר מראש באופן סטטי ייתן את הביצועים שרציתי ללא מורכבות נוספת.
כמו כן, הייתי צריך לשמור על התוכן והתכונות הקיימים של האתר, כולל:
- הדגשת קוד
- תגובות
- חיפוש באתר
- רכיבי React קיימים: ממשק חידון, הטמעות Gist
- טופס יצירת קשר
- תמונות רספונסיביות
- זמן טעינה מתחת לשנייה
- תאימות דפדפנים: 2018 ומעלה
- פריסות אוטומטיות ומבוססות PR
בחירת ערימת הטכנולוגיה המתאימה לי
במהלך השנים עבדתי עם כלים רבים לאתרים סטטיים, מ-Jekyll, Hugo, Slate ו-Gatsby. וגם עם מסגרות פרונט-אנד רבות: Ember, Knockout, Angular, Vue וכמובן React.
אז, יש לי בדיוק יותר מדי אפשרויות, שבסופו של דבר צמצמתי ל-Remix, Next.js ו-Astro.
יכולתי לכתוב סדרת בלוגים שלמה על תהליך ההערכה שלי, אבל אסכם זאת כאן:
בחרתי ב-Astro כי מהר מאוד יכולתי לעשות דברים משמעותיים.
עיצוב ה-API שלהם פשוט באופן מרענן. זהו איזון מצוין בין גמישות לדעות עיצוביות טובות.
זה היה קצת מרגיע שלאסטרו אין הטיה ברורה לענן או אג’נדה של מסגרת.
אסטרו לא הייתה הטכנולוגיה היחידה שהשתמשתי בה, הנה פירוט מלא של הערימה:
- Astro: מחולל אתרים סטטיים מודרני.
- ShadcnUI: אוסף של רכיבים לשימוש חוזר.
- Tailwind CSS: מסגרת CSS מבוססת-תועלת.
- MDX: תוכן Markdown + רכיבים מוטמעים.
- Pagefind: ספריית חיפוש אתרים מהירה, סטטית ומצב לא מקוון. אין צורך ב-Algolia!
- Utterances: מערכת תגובות המבוססת על Issues של GitHub.
- Netlify: פריסות אוטומטיות, טופס יצירת קשר עם קפצ’ה.
אסטרו: עקומת למידה ותכונות מפתח
אסטרו הפכה במהירות לאבן הפינה של השדרוג שלי.
להלן כמה תכונות מפתח שמצאתי שימושיות במיוחד:
- קבצי
.astro: במבט ראשון, רכיבי Astro עשויים להיראות כמו רכיבי React JSX, אך הם שונים למדי ומשרתים מטרות שונות. (ראו טבלת השוואה להלן.) - מופעל על ידי כלי הבנייה משלו ב-Golang ו-Vite: זה פשוט עובד. מטפל בצורה חלקה ב-ESM/CJS, TypeScript, איגוד קוד, סגנונות, תמונות וכו’.
- ללא הטיית מסגרת או הטיית ענן. (שיעול Next.js, OpenNext)
- עיבוד סטטי לעומת היברידי: Astro מספקת גמישות למיקוד ברוב פלטפורמות הענן: AWS, GCP, Firebase, Netlify, Vercel, Cloudflare Pages, Azure, Fly.io ועוד רבות אחרות.
- אוספי תוכן: ה-API
getCollectionמפשט את העבודה עם קבצי תוכן כמקור נתונים. - ניתוב מבוסס קבצים: מערכת הניתוב מבוססת הקבצים של Astro, בשילוב עם
getStaticPaths, הופכת יצירת דפים לקלה ביותר. - SEO: Astro לא מפריע לך, ופולט רק כמות מינימלית של
פסולתקוד תבניתי (astro-island) בעת הצורך.
כמה דברים היו מעט מפתיעים, כמו עיצוב סביב הסימון המוזרק של Astro, וההשפעה של display:contents.
<style>astro-island,astro-slot,astro-static-slot{display:contents}</style>השוואת .astro לעומת רכיבי לקוח
רכיבי Astro הם בעצם תבניות HTML עם תבנית רכיבים ומאפיינים עוצמתית. הם יכולים לאחזר נתונים בזמן בנייה, לגשת למשאבי צד שרת, ולשמור מידע רגיש מסוים מוסתר.
הדרך הטובה ביותר להבין את רכיבי .astro של Astro היא להשוות ולהבדיל בינם לבין רכיבי צד לקוח. (React, Vue, Svelte וכו’)
| מה צריך לעשות? | רכיב .astro | רכיב לקוח |
|---|---|---|
| יצירת HTML עם תבנית רכיבים+תבניות עוצמתית | ✅ | ❌ |
| אחזור נתונים בזמן בנייה | ✅ | ❌ |
| גישה למשאבי צד שרת (ישירות) | ✅ | ❌ |
| שמירת מידע רגיש מוסתר (טוקני גישה, מפתחות API וכו’) | ✅ | ❌ |
| הפחתת JavaScript בצד הלקוח | ✅ | ❌ |
| שימוש ברכיבי לקוח (React, Vue, Svelte וכו’) | ✅ | ✅ |
הוספת אינטראקטיביות ומאזיני אירועים (onClick(), onChange() וכו’) | ❌ | ✅ |
שימוש במצב ואפקטים של מחזור חיים (useState(), useReducer(), useEffect() וכו’) | ❌ | ✅ |
| שימוש ב-API של דפדפן בלבד | ❌ | ✅ |
| שימוש בהוקים מותאמים אישית התלויים במצב, אפקטים או API של דפדפן בלבד | ❌ | ✅ |
CSS מודרני: וואו
CSS מודרני: וואו
בחזרה לפיתוח צד לקוח, שמחתי לראות את ההתקדמות ב-CSS המקורי:
- משתני CSS: זמינים כבר זמן מה, ויציבים למדי בין דפדפנים מאז 201*.
- קינון: סוף סוף בתקן, וללא התחביר המביך הקודם. עכשיו זה דומה ל-Less או SCSS.
- סלקטורים חדשים:
:is(),:where(), ו-:has()מאפשרים מיקוד מדויק יותר של אלמנטים. - יחידות מודרניות כמו
ch,vw, ופונקציות כמוclamp()מספקות שליטה טובה יותר על פריסות וטיפוגרפיה. - קביעת מרווחים בצורה טבעית יותר עם תכונות
-inlineו--block. הגדר padding או margin על הציר האופקי או האנכי. במקוםmargin: 0 1rem 0 1rem→margin-inline: 1rem. - פריסות מתקדמות: ללמוד מחדש CSS Grid. וואו, יש שם הרבה שטויות. זה יכול להיות מאיים עם אינספור דרכים להשתמש בו. זכור, אפשר להסתדר עם הבנה של דרך אחת או שתיים. בדוק את המשאבים המעולים האלה שעזרו לי לעשות טריקים עם grid: הסרטון של Kevin Powell: Learn CSS Grid the easy way, Responsive w/o media queries, Ten modern layouts in one line of CSS.
חיפוש: Pagefind
יישום חיפוש באתר ללא שירותי צד שלישי או אחסון מסד נתונים נראה כמו אתגר מהנה. אחרי הכל, אין לי 10,000 פוסטים לאינדקס (עדיין).
בזמן שעיינתי באינטגרציות הקהילה של Astro נתקלתי בכלי פנטסטי שהייתי רוצה להכיר מוקדם יותר: Pagefind.
מעט כלים פותרים בעיה כלשהי באותה מידה ש-Pagefind פותר חיפוש מקומי באתר.
הפשטות של יישום Pagefind היא תענוג. ניתן לשלב אותו עם כל תוכן אתר סטטי, ואתה יכול לבחור אם אתה רוצה ממשק משתמש ברירת מחדל, או לבנות משהו מותאם אישית אם תרצה.
הוא פתר בצורה מסודרת את כל מה שרציתי. לקח רק דקות לשלב, ורוב העבודה כללה הוספת תג <div id="search"></div> וקצת עיצוב!
תגובות: Utterances
לצערי, נאלצתי להיפרד מ-Disqus ומהתגובות שצברתי במשך שנים רבות.
רציתי שליטה/נראות טובה יותר על הסקריפטים של צד שלישי באתר שלי.
בנוסף, זה צריך להיות פשוט וניתן לתחזוקה.
זה הוביל אותי לבחור בשירות הנהדר Utterances. מערכת התגובות שלו (המבוססת על Issues של GitHub) מתאימה היטב לקהל שלי. בנוסף, קל להגדיר אותו, והוא חינמי.
Tailwind: חרטות
יש רק טכנולוגיה אחת שאני מתחרט יותר ויותר על השימוש בה: Tailwind.
עם הזמן, אני מרגיש את הבדל העלות בין כתיבה לעומת תחזוקה. Tailwind כל כך מהיר לכתיבה, אבל ברגע שהוא מספיק מורכב, הוא יכול להפוך למייגע לקריאה ולהרחבה.
סיכום
שדרוג האתר הישן שלי מבוסס Gatsby v1 לסטack מודרני סביב Astro היה חוויה מהנה. 10/10 ממליץ.
אם אתה שוקל לשדרג אתר ישן או לבנות אתר סטטי (או היברידי) חדש, אני ממליץ בחום להסתכל על Astro. עקומת הלמידה עשויה להיות תלולה לפעמים, אבל היתרונות מבחינת ביצועים, חוויית מפתח, והגנה על הפרויקט שלך לעתיד שווים בהחלט את המאמץ.