במדריך הזה מתוארות אופטימיזציות לשירותי Cloud Run שנכתבו ב-JavaScript או ב-TypeScript, ופועלים בזמן הריצה של Node.js. המידע בדף הזה הוא תוספת לטיפים כלליים לפיתוח, שרלוונטיים גם ל-Node.js.
אופטימיזציה של זמן ההפעלה
על ידי אופטימיזציה של זמן ההפעלה, ניתן להפחית את זמן ההשהיה, לשפר את זמן התגובה ולהשיג אופטימיזציה יעילה של עלויות. סעיף זה מתאר דרכים שונות לייעל את זמן ההפעלה.
הפעל את האפליקציה שלך באמצעות node במקום npm
הפעל את האפליקציה שלך ישירות באמצעות node index.js במקום npm start, מכיוון ש-npm מוסיף השהייה נוספת.
כדי להתחיל את השימוש באפליקציה עם node index.js, אפשר לפעול באחת מהשיטות הבאות:
השתמשו ב-
CMD node index.jsב-Dockerfile שלכם, לדוגמה:CMD node index.jsהגדרת
node index.jsכנקודת הכניסה. מריצים את הפקודה הבאה באמצעות Google Cloud CLI:gcloud run deploy SERVICE --command "node index.js"מידע נוסף ואפשרויות להגדרת נקודות כניסה זמינים במאמר הגדרת קונטיינרים לשירותים.
אם אתם משתמשים בפריסות מקוד מקור בלי קובץ Dockerfile, המערכת של Cloud Run מבצעת את האופטימיזציה.
חבילת קוד
bundler הוא כלי בנייה שממטב את הפריסה של קבצי המקור של JavaScript שלך לזמני טעינה מהירים יותר. כמה אופטימיזציות נפוצות של bundler כוללות tree shaking, הקטנה וקיבול של קבצים קטנים. חבילות (Bundlers) מקטינות משמעותית את הגודל הכולל של החבילה ומפחיתות את מספר בקשות קריאת הקבצים. חלק מהכלים הנפוצים ליצירת חבילות JavaScript הם esbuild, webpack ו-rollup.
טעינה מדורגת של פניות קשורות
בעת ההפעלה, Cloud Run מזרים כל קובץ שהקוד שלך טוען ממיקום מרוחק. בהשוואה למערכת קבצים מקומית, שימוש במיקום מרוחק מוביל להשהייה נוספת בכל פעם שקובץ נקרא. יכול להיות שחבילות Node.js ישתמשו בהרבה קבצים עם יחסי תלות עקיפים. במקום לייבא את כל התלויות בהפעלה, מומלץ לטעון רק את התלויות שנדרשות להפעלת השרת, ולטעון את שאר התלויות באמצעות ייבוא דינמי.
לדוגמה, במקום להשתמש בייבוא בחלק העליון של המודול, כמו import { Storage } from '@google-cloud/storage', משתמשים ב-import() בפונקציה כשנדרש האובייקט המיובא, למשל:
const { Storage } = await import('@google-cloud/storage');
כדי לזהות מודולים שנטענים במהלך האתחול ואת הזמן שלוקח לכל מודול להיטען במחשב שלך, הפעל את הפקודה הבאה:
node --trace-event-categories node.module_timer --trace-event-file-pattern 'trace-events.log' index.js
הגדרת הזמן הקצוב לתפוגה
ב-Node.js מגרסה 14 ואילך, לשרת ה-HTTP המובנה יש זמן קצוב לתפוגה כברירת מחדל של 0 (ללא זמן קצוב לתפוגה). בגרסאות Node.js קודמות מ-14, זמן הקצוב המוגדר כברירת מחדל היה 2 דקות. אם פסק הזמן של הבקשה בשירות Cloud Run ארוך יותר, צריך לשנות את פסק הזמן באמצעות server.setTimeout(msecs). צריך גם לשנות את הגדרת הזמן הקצוב לתפוגה (timeout) למסגרות שנבנו על שרת Node.js, כמו Express. כדי להשיג פסק זמן בלתי מוגבל ב-Node.js ולהסתמך על פסק הזמן המובנה של Cloud Run, השתמשו ב-server.setTimeout(0).