מהי זרימת בקרה אסינכרונית ב-Node.js?

Mhy Zrymt Bqrh Synkrwnyt B Node Js



זרימת הבקרה היא דרך הביצוע שבה מבוצע תהליך השהייה של האפליקציה שלך. זרימה זו עוזרת מאוד כאשר אתה רוצה להפעיל חלק מסוים של כל התוכנית תחילה או לאחר השלמת שיטה אקראית. זרימת הביצוע נקבעת בדרך כלל בא-סינכרוני או סינכרוני בהתאם לאופי השיטה שבה נעשה שימוש.

כתיבה זו מסבירה את העבודה והיישום של זרימת בקרה אסינכרונית ב-Node.js.

מהי זרימת בקרה אסינכרונית ב-Node.js?

זרימת בקרה אסינכרונית ב-Node.js מתייחסת לאופן שבו אתה מנהל ושולט בזרימת הביצוע בעת התמודדות עם פעולות אסינכרוניות, כגון ביצוע בקשות רשת, טיפול באירועים וכו'. למרות ש-Node.js תוכנן במיוחד עבור אופי אסינכרוני, עדיף להבטיח שהקוד הספציפי יבוצע ברצף המיועד ויבצע טיפול בשגיאות ביעילות.







בואו נביא דוגמה לקוד כדי לשפר את רמת ההבנה של זרימת בקרה אסינכרונית:



היה fsObj = לִדרוֹשׁ ( 'fs' ) ;
//פונקציית התקשרות חוזרת מופשטת
פונקציה readFileAsync ( targetFilePath ) {
לַחֲזוֹר חָדָשׁ הַבטָחָה ( ( לפתור, לדחות ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( שגיאה, תוכן ) => {
אם ( שְׁגִיאָה ) {
לִדחוֹת ( שְׁגִיאָה ) ;
} אַחֵר {
לִפְתוֹר ( תוֹכֶן ) ;
}
} ) ;
} ) ;
}

// פונקציה לביצוע קריאת קבצים מרובים ברצף
פונקציית אסינכרון readFileSequentially ( ) {
לְנַסוֹת {
const file1Data = ממתין ל-readFileAsync ( 'mynewfile1.txt' ) ;
לְנַחֵם. עֵץ ( 'נתוני קובץ ראשון:' , file1Data ) ;

const file2Data = ממתין ל-readFileAsync ( 'usecase.txt' ) ;
לְנַחֵם. עֵץ ( 'נתוני קובץ שני:' , file2Data ) ;

const file3Data = ממתין ל-readFileAsync ( 'package.json' ) ;
לְנַחֵם. עֵץ ( 'נתוני קובץ שלישי:' , file3Data ) ;
} לתפוס ( שְׁגִיאָה ) {
לְנַחֵם. שְׁגִיאָה ( 'התרחשה שגיאה:' , שגיאה ) ;
}
}

readFileSequentially ( ) ;

ההסבר של הקוד לעיל הוא כדלקמן:



  • ראשית, ייבא את ' fs ' מודול ואחסן את האובייקט שלו ב' fsObj 'משתנה.
  • לאחר מכן, הגדר ' readFileAsync() ' פונקציה בשם עם הפרמטר היחיד של ' targetFilePath ' המכיל את הנתיב לקובץ ממוקד.
  • פונקציה זו מחזירה ' הַבטָחָה ' המכיל את פונקציית ההתקשרות הנדרשת המורכבת משני פרמטרים כלומר ' לִפְתוֹר ' ו' לִדחוֹת '.
  • בתוך פונקציית ההתקשרות חזרה, הפעל את ' readFile() ' השיטה שסופקה על ידי ' fs ' מודול. כמו כן, העבר את הפרמטר שסופק של ' targetFilePath ' בתור הפרמטר הראשון עבור שיטת 'readFile()'.
  • ה ' readFile השיטה מכילה גם את פונקציית ה-callback הנדרשת עם הפרמטרים של ' שְׁגִיאָה ' ו' תוֹכֶן '. תעביר את ה ' שְׁגִיאָה ' לתוך ה ' לִדחוֹת() 'שיטה למקרה של התרחשות שגיאות ו' תוֹכֶן ' לתוך ה ' לִפְתוֹר() ' שיטה במקרה של שגיאה לא נמצאה.
  • כעת, צור פונקציה אסינכרונית בשם ' readFileSequentialy() ' והוא מכיל ' נסה לתפוס ' לחסום.
  • בתוך ה ' לְנַסוֹת ' בלוק, צור שלושה משתנים המאחסנים את התוצאה שנוצרה על ידי הפעלת ה' שכבר נוצר ' readFileAsync() ' פונקציה. בכל פעם שהנתיב של הקובץ הרצוי שצריך לבצע מועבר בתוך סוגריים של פונקציה זו.
  • מילת המפתח ' לְהַמתִין 'מוצב גם מאחורי הפונקציה בזמן ההפעלה כדי לעצור את זרימת הבקרה עד להשלמת פעולת קריאת הקובץ.
  • כמו כן, הצג את המשתנים במסוף כדי להציג את תוכן הקובץ שאוחזר או נקרא.
  • לבסוף, הפעל את המכיל ' readFileSequentialy() ' פונקציה.

על מנת לבצע, הצב את הקוד האמור לעיל בקובץ הרצוי שלך בעל סיומת ' .js ” השוכן בתוך פרויקט ה-Node.js שלך. התיק העיקרי בענייננו הוא ' controlFlow.js ', אז פקודת הביצוע שלנו תהיה כדלקמן:





צומת controlFlow. js

הפלט שנוצר מראה שהנתונים עבור הקבצים הרצויים באמצעות זרימת בקרה אסינכרונית מוצגים ברצף:



מהן הסיבות האפשריות ושלבי ההימנעות עבור קוד חסום של Node.js?

הקוד הסינכרוני ידוע גם בשם ' קוד חסום ' שכן הוא עוצר את ביצוע התהליכים עד לביצוע התהליך הרצה. זה גורם לביצועי יישומים ותגובתיות גרועים. קוד חסימה מתרחש בדרך כלל עקב פעולות סינכרוניות או קשורות למעבד. הגורמים האפשריים לחסימת קוד וכיצד להימנע מהם מצוינים להלן בטבלה:

סיבות לחסימת קוד פתרון לחסימת קוד
שימוש בפעולות קבצים סינכרוניים כמו fs.readFileSync(). השתמש בפעולות קובץ אסינכרוניות כמו fs.readFile.
שימוש בפעולות הקשורות למעבד כמו חישובים כבדים או לולאות ארוכות טווח. הורידו משימות הקשורות למעבד לשרשורי עובדים על ידי פירוקם לנתחים קטנים יותר, שאינם חוסמים.
בקשות רשת חיצוניות איטיות עקב השימוש בבקשות HTTP לממשקי API מרוחקים השתמש בספריות HTTP אסינכרוניות כמו Axios או המודולים המובנים 'http' או 'https'.
שאילתות מסד נתונים לא אופטימליות בצע אופטימיזציה של שאילתות מסד הנתונים באמצעות כלי אופטימיזציית השאילתות המסופקים על ידי מסד הנתונים.
שימוש בלולאות אינסופיות או לולאות הדוקות ללא הפסקות. ודא שללולאות יש תנאי יציאה ואינן פועלות ללא סוף.

סיכום

זרימת הבקרה האסינכרונית משתמשת במילות המפתח ' אסינכרן/ממתין ' כדי לשנות או לשלוט בזרימת הביצוע באופן אסינכרוני. ה-callback עבור השיטה האסינכרונית הנדרשת מופשט ומאוחסן בפונקציה נפרדת. לאחר מכן, פונקציה זו מופעלת בעזרת מילת המפתח await באופן רציף יחד עם שיטות אחרות לפי הצורך. פונקציות אלו מאוחסנות בפונקציה אסינכרונית מותאמת אישית אחרת אשר מופעלת לאחר מכן כדי להתחיל את הביצוע. מדריך זה הסביר את זרימת הבקרה הא-סינכרונית ב-Node.js.