Node.js היא סביבת הרצה של JavaScript שנבנתה על גבי מנוע V8 JavaScript engine של Google.
סביבת הרצה - Runtime environment
הכוונה בסביבת הרצה היא המקום שבו אנחנו מריצים קוד מסוים. כל סביבת הרצה היא שונה ותספק לנו פונקציות ויכולות מיוחדות בהתאם לסביבה בה אנחנו כותבים את הקוד. לדוגמה, Chrome היא גם סביבת הרצה כמו Node.js, שנבנתה על גבי V8 ומאפשרת לנו להריץ קוד ולגשת ל-DOM API's, או לבצע button click events. אבל ב-Node.js אין תמיכה טבעית (built-in) ב-DOM API's לדוגמה, אבל איך זה אם שניהם בנויים על אותה טכנולוגיה (V8 JavaScript engine)?
V8 JavaScript engine
המנוע V8 JavaScript engine נכתב בשפת ++C ותפקידו הוא לקחת קוד של JavaScript ולהמיר אותו לקוד מכונה, וכך המחשב שלכם יכול להריץ את אותו קוד. גם Node.js וגם Chrome נבנו על גבי V8, זה אומר ששניהם נבנו ברובם על ידי ++C וזה אומר שבאמצעות ++C בשילוב עם V8, יצרנו שתי סביבות הרצה שמספקות פונקציות ויכולות שונות בהתאם לסביבה. אבל זה אומר עוד משהו מיוחד, זה אומר שלכל מי שיש ידע ב-++C יכול לחבר את ה-V8 JavaScript engine לאפליקציה וליצור בעצמו סביבת הרצה ולהרחיב בעצמו את היכולות של Javascript!
בתמונה תוכלו לראות את שתי סביבות ההרצה שדיברנו עליהן (Node.js & Chrome) ואיך V8 JavaScript engine לוקח קוד JavaScript, וממיר אותו ל-machine code כך שהמחשב שלכם יוכל לבצע. שימו לב כי פונקציות שחשבתם שהם של Javascript הם בעצם Implementation של ++C, וכדי שנוכל לגשת אליהן, סביבת ההרצה מספק לנו את שכבה כמו Intermediate language שמאפשרת לנו לגשת אל אותן API's.
אם כך, נחזור לשאלה שלנו, מה חלק מ-JavaScript?
- DOM
- LocalStorage
- setTimeout
- console.log
התשובה כבר לא צריכה להפתיע אתכם, אבל אף אחד מהאפשרויות לא באמת חלק מ-JavaScript, זה רק ה-Implementation של סביבת ההרצה V8 JavaScript engine שנכתבה על ידי ++C שנותנת לנו לגשת ולבצע את הפעולות האלו של ה-API's דרך JavaScript.