SlideShare a Scribd company logo
1 of 17
Download to read offline
1 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
2 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫תוכן‬‫עניינים‬
‫רקע‬.........................................................................................................................................................................................3
‫מהות‬‫הטכנולוגיה‬.....................................................................................................................................................................4
‫ארכיטקטורה‬........................................................................................................................................................................4
01‫הדיברות‬‫לאורן‬‫מפותחת‬‫הטכנולוגיה‬:..............................................................................................................................5
‫פיתוח‬‫מונחה‬‫אירועי‬‫קלט‬/‫פלט‬............................................................................................................................................5
‫יתרונות‬....................................................................................................................................................................................8
‫חסרונות‬...................................................................................................................................................................................9
‫התקדמות‬/‫בשלות‬‫הפרויקט‬...................................................................................................................................................01
‫סיכו‬‫ם‬.....................................................................................................................................................................................00
‫נספח‬‫א‬:'‫האם‬node.js‫מתאים‬‫לאפליקציה‬‫שלי‬?.....................................................................................................................01
‫נספח‬‫ב‬:'Node.js vs PHP‫מבחן‬‫עומסים‬..................................................................................................................................03
‫מקורות‬..................................................................................................................................................................................01
3 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫רקע‬
‫העשרים‬ ‫בקומה‬‫של‬‫יושב‬ ‫פרנסיסקו‬ ‫בסן‬ ‫שחקים‬ ‫גורד‬‫ת‬‫קבוצה‬‫מתכנתים‬ ‫של‬‫ו‬‫עובד‬‫ת‬‫טכנולוגי‬ ‫על‬‫פיתוח‬ ‫ית‬‫שתשנה‬ ‫חדשה‬,
,‫הנראה‬ ‫ככל‬‫אפליקציות‬ ‫כותבים‬ ‫בה‬ ‫הדרך‬ ‫את‬( ‫אמת‬ ‫זמן‬real-time)‫ה‬ ‫בעולם‬–web‫אלו‬ ‫אפליקציות‬ ‫בה‬ ‫הדרך‬ ‫ואת‬
‫לה‬ ‫צריכות‬ ‫הן‬ ‫בהן‬ ‫המחשוב‬ ‫ענן‬ ‫לעידן‬ ‫עצמן‬ ‫מתאימות‬‫תרחב‬‫לצורך‬ ‫בהתאם‬ ‫ולגדול‬.
‫קוראים‬ ‫זו‬ ‫לטכנולוגיה‬node.js‫ל‬ ‫המפתחים‬ ‫בקהילת‬ ‫רבים‬ ‫בעיני‬ ‫נחשבת‬ ‫והיא‬-"Ruby on Rails.‫החדש‬ "
‫פיתוח‬node.js‫בשנת‬ ‫החל‬9002‫ע"י‬( ‫דל‬ ‫ראיין‬Ryan Dahl)‫בחברת‬ ‫כמהנדס‬ ‫שהועסק‬Joyent,‫פרנסיסקו‬ ‫מסאן‬‫העוסקת‬
.‫ווירטואליזציה‬ ‫ענן‬ ‫מחשוב‬ ‫בפתרונות‬
‫פרוייקט‬ ‫מטרת‬node.js:‫היוצר‬ ‫ידי‬ ‫על‬ ‫שנוסחה‬ ‫כפי‬
To provide a purely evented, non-blocking infrastructure to script highly concurrent programs
‫המאפשרים‬ ‫אתרים‬ ‫ליצור‬ ‫הייתה‬ ‫הפרויקט‬ ‫של‬ ‫המקורית‬ ‫מטרתו‬"‫דחיפ‬ ‫יכולות‬"‫מידע‬ ‫ת‬‫מהצד‬ ‫מגיעה‬ ‫הפנייה‬ ‫יוזמת‬ ‫בו‬ ‫(קונספט‬
‫המידע‬ ‫את‬ ‫המספק‬-server‫המבקש‬ ‫מהצד‬ ‫ולא‬-client).
‫מ‬ ‫על‬ ,‫חדש‬ ‫מבצע‬ ‫על‬ ‫הודעה‬ ‫לדוגמא‬ .‫בעצמו‬ ‫פעולות‬ ‫בביצוע‬ ‫צורך‬ ‫ללא‬ ‫מהשרת‬ ‫חדש‬ ‫מידע‬ ‫לקבל‬ ‫למשתמש‬ ‫המאפשר‬ ‫דבר‬‫ייל‬
‫חדש‬,.'‫וכד‬ ‫חדשות‬ ‫מבזק‬ ‫על‬
‫כי‬ ‫אם‬‫כי‬ ‫דל‬ ‫ראיין‬ ‫ציין‬ ‫לאחרונה‬ ‫איתו‬ ‫שבוצע‬ ‫בראיון‬‫למעשה‬‫ה‬ ‫פרוייקט‬ ‫את‬ ‫החל‬ ‫הוא‬node.js‫טובה‬ ‫דרך‬ ‫למצוא‬ ‫מנת‬ ‫על‬
.‫לרשת‬ ‫קובץ‬ ‫של‬ ‫העלאה‬ ‫סטאטוס‬ ‫על‬ ‫המשתמש‬ ‫את‬ ‫לעדכן‬
‫הפרוייקט‬‫בפועל‬ ‫אך‬ ,‫פתוח‬ ‫כקוד‬ ‫אמנם‬ ‫מפותח‬‫חברת‬Joyent‫המ‬ ‫היא‬‫ממנת‬‫של‬ ‫העיקרית‬‫הפרוייקט‬‫עובדים‬ ‫העסקת‬ ‫ע"י‬
‫ו‬‫אירועים‬ ‫אירוח‬‫מקצועיים‬.‫המפתחים‬ ‫קהיליית‬ ‫בקרב‬
node.js‫הפך‬‫לאחרונה‬‫לאחד‬‫מ‬‫ה‬Buzzword‫כיום‬ ‫ביותר‬ ‫הנפוצים‬‫ל‬ ‫הפיתוח‬ ‫בעולם‬ ,–web.
4 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫הטכנולוגיה‬ ‫מהות‬
node.js‫שרת‬ ‫צד‬ ‫אפליקציות‬ ‫לפיתוח‬ ‫פתוח‬ ‫בקוד‬ ‫כלים‬ ‫ערכת‬ ‫הוא‬‫ב‬-java script.
‫ב‬ ‫הבחירה‬java script‫(להלן‬js)‫נעשתה‬‫מ‬ ‫דווקא‬‫של‬ ‫כיוון‬-js‫קיים‬ ‫היה‬ ‫לא‬‫העת‬ ‫באותה‬( ‫פלט‬ ‫קלט‬ ‫ממשק‬I/O API)‫ודבר‬ ,
‫אפשר‬ ‫זה‬‫קונבנציה‬ ‫הגדרת‬(convention)‫מבוסס‬ ‫פלט‬ ‫קלט‬ ‫ממשק‬ ‫של‬ ‫חדשה‬.‫אירועים‬‫מטרה‬ ‫מתוך‬‫ל‬‫הרצת‬ ‫המשך‬ ‫אפשר‬
.‫שיסתיימו‬ ‫פלט‬ / ‫הקלט‬ ‫לפעולות‬ ‫בהמתנה‬ ‫צורך‬ ‫ללא‬ ‫התוכנית‬
‫ארכיטקטורה‬
‫בבסיס‬‫הארכיטקטורה‬‫נמצא‬"‫מנוע‬‫בשם‬ "‫תוכנה‬V81‫של‬ ‫עטיפה‬ ‫מעליו‬ ,node.js‫כגון‬ ‫שונים‬ ‫פרוטוקולים‬ ‫למימוש‬socket-‫ים‬
‫ו‬http‫(ב‬-C++‫של‬ ‫הסטנדרטית‬ ‫הספרייה‬ ‫ולמעלה‬ .)node.js‫(ב‬-java script.)
‫ה‬ ‫בשכבת‬–java script‫ל‬ ‫רק‬ ‫לגשת‬ ‫ניתן‬( ‫תהליך‬thread)‫משכב‬ ‫בעוד‬ ,‫הראשי‬‫ו‬‫ת‬‫הבסיס‬‫למספר‬ ‫לגשת‬ ‫ניתן‬‫תהליכים‬
(threads).
‫ה‬ ‫מנגנון‬ ‫של‬ ‫בפועל‬ ‫המימוש‬Asynchronous I/O‫ה‬ ‫בשכבת‬ ‫שונים‬ ‫תהליכים‬ ‫מספר‬ ‫יצירת‬ ‫ע"י‬ ‫ממומש‬-C.
‫איור‬1‫שרת‬ ‫של‬ ‫ארכיטקטורה‬ :node.js
1
‫בשפת‬ ‫הכתוב‬ ‫קומפילציה‬ ‫מנוע‬C++.
‫קוד‬ ‫לקמפל‬ ‫יודע‬ ‫המנוע‬java script.‫ולהריצו‬ ‫מכונה‬ ‫לשפת‬
.‫כרום‬ ‫בדפדפן‬ ‫גוגל‬ ‫חברת‬ ‫ע"י‬ ‫בשימוש‬ ‫נמצא‬ ‫המנוע‬
5 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
10‫הדיברות‬‫מפותחת‬ ‫לאורן‬:‫הטכנולוגיה‬
1.‫מובנית‬ ‫תמיכה‬( ‫החשובים‬ ‫בפרוטוקולים‬:‫דוגמת‬DNS, HTTP, TLS)
9.‫הכל‬ ‫להזרים‬(Streaming)‫מידע‬ ‫לחצוץ‬ ‫לא‬ ‫לעולם‬ ,(buffering)–‫בחוצצים‬ ‫נאגר‬ ‫ולא‬ ‫הלאה‬ ‫זורם‬ ‫הזמן‬ ‫כל‬ ‫המידע‬
.‫יותר‬ ‫מאוחר‬ ‫בשלב‬ ‫להישלח‬ ‫מנת‬ ‫על‬
3.‫בפלטפורמה‬ ‫תלות‬ ‫אי‬
4.‫על‬ ‫שמירה‬‫רישיון‬‫פתוח‬ ‫קוד‬"‫פשוט‬"
5.‫מועטות‬ ‫תלויות‬–‫בספריות‬ ‫צורך‬ ‫אין‬‫את‬ ‫להריץ‬ ‫מנת‬ ‫על‬ ‫רבות‬ ‫חיצוניות‬‫אפליקציה‬‫ב‬ ‫הכתובה‬node.js
6.‫סטאטי‬ ‫קישור‬–‫מקובץ‬ ‫חלק‬ ‫להיות‬ ‫הופך‬ ‫והוא‬ ‫התשתית‬ ‫מן‬ ‫חלק‬ ‫שאיננו‬ ‫הקוד‬ ‫לכל‬ ‫קישור‬ ‫מתבצע‬ ‫הקומפילציה‬ ‫בזמן‬
.‫הריצה‬
7.‫פונקציה‬ ‫אף‬‫אינה‬‫קלט/פלט‬ ‫פעולות‬ ‫לבצע‬ ‫אמורה‬‫ישירות‬‫תהליך‬ ‫דרך‬ ‫אלא‬Callback‫ריצת‬ ‫המשך‬ ‫לאפשר‬ ‫מנת‬ ‫על‬
‫הקלט/פל‬ ‫פעולות‬ ‫לסיום‬ ‫המתנה‬ ‫ללא‬ ‫התוכנית‬.)‫בהמשך‬ ‫הרחבה‬ ‫(ראה‬ ‫ט‬
8.‫ה‬ ‫(שכבת‬ ‫שמתחת‬ ‫מהשכבה‬ ‫פונקציונליות‬ ‫להסיר‬ ‫לא‬nterfaceIystemSperatingOportable-POSIX)–
‫של‬ ‫שונות‬ ‫גרסאות‬ ‫על‬ ‫זהה‬ ‫בצורה‬ ‫פעולות‬ ‫ביצוע‬ ‫שמאפשרת‬ ‫השכבה‬.‫יוניקס‬
2.‫תמיכה‬‫ויכולות‬ ‫בתכונות‬‫של‬HTML‫כגון‬:
o( ‫בחלקים‬ ‫קידוד‬Chunked encoding)
o( ‫מקושרות‬ ‫הודעות‬Pipelined messages)–‫חיבור‬ ‫באמצעות‬ ‫בקשות‬ ‫מספר‬ ‫לקבל‬ ‫יכול‬ ‫השרת‬ ‫בה‬ ‫טכניקה‬
TCP.‫הבקשות‬ ‫התקבלו‬ ‫בו‬ ‫בסדר‬ ‫תשובה‬ ‫בהחזרת‬ ‫צורך‬ ‫ללא‬ ,‫יחיד‬
o‫תמיכה‬‫ב‬‫אפליקציות‬‫במודל‬ ‫המשתמשות‬COMET,‫ללא‬ ,‫בדחיפה‬ ‫למשתמש‬ ‫מהשרת‬ ‫מועבר‬ ‫המידע‬ ‫בהן‬
‫ישירה‬ ‫בקשה‬.
10.‫ה‬–API‫למפתחי‬ ‫מוכר‬ ‫להיות‬ ‫צריך‬java script‫למשתמ‬ ‫וכן‬ .‫הלקוח‬ ‫בצד‬‫ש‬‫י‬unix.
‫ה‬ ‫הדיבר‬-11‫שהינו‬ ‫מוצר‬ ‫לאפשר‬ ‫הינו‬ ‫במימוש‬ ‫מקפידים‬ ‫עליו‬‫לפיתוח‬ ‫כיף‬.
‫מונחה‬ ‫פיתוח‬‫פלט‬ / ‫קלט‬ ‫אירועי‬
node.js‫של‬ ‫בצורה‬ ‫עובד‬‫קלט‬ ‫אירועי‬/( ‫פלט‬Evented I/O‫או‬Asynchronous I/O)‫שמאפשר‬ ‫מה‬ .‫ריצה‬‫יותר‬ ‫יעילה‬‫של‬
‫התוכניות‬.'‫לדוג‬‫המתנה‬ ‫בעת‬‫ל‬‫פעולת‬ ‫סיום‬I/O‫אחרות‬ ‫פעולות‬ ‫לבצע‬ ‫ניתן‬.‫ממ‬ ‫בד"כ‬ ‫אחרות‬ ‫שרת‬ ‫בשפות‬‫מ‬‫זו‬ ‫פעולה‬ ‫שים‬
‫הוספת‬ ‫באמצעות‬listener-‫ים‬.‫הקוד‬ ‫בקריאות‬ ‫ופוגם‬ ‫נוסף‬ ‫קוד‬ ‫כתיבת‬ ‫שדורש‬ ‫מה‬
‫פי‬‫אירועי‬ ‫מונחה‬ ‫תוח‬‫קלט/פלט‬:‫חלקים‬ ‫שני‬ ‫ישנם‬ ‫האפליקציה‬ ‫של‬ ‫המרכזית‬ ‫הלולאה‬ ‫שבתוך‬ )‫מופשטת‬ ‫(בצורה‬ ‫משמעותו‬‫גילוי‬
‫אירוע‬‫ו‬‫באירוע‬ ‫טיפול‬.
‫אירוע‬ ‫שמתגלה‬ ‫ברגע‬,‫בו‬ ‫לטפל‬ ‫מתחילה‬ ‫האפליקציה‬,‫במקביל‬ .‫האירועים‬ ‫גילוי‬ ‫של‬ ‫הלולאה‬‫ו‬ ‫לעבוד‬ ‫ממשיכה‬‫לגלות‬ ‫יכולה‬
‫גם‬ ‫לטפל‬ ‫ולהתחיל‬ ‫חדש‬ ‫אירוע‬‫לדוג‬ .‫לרוץ‬ ‫ממשיכה‬ ‫שהמערכת‬ ‫לפני‬ ‫מסויים‬ ‫חלק‬ ‫של‬ ‫לסיום‬ ‫המתנה‬ ‫אין‬ .‫בו‬,‫מא‬‫קובץ‬ ‫נבקש‬ ‫אם‬
,‫מסוים‬‫בקשה‬ ‫תשלח‬ ‫המערכת‬( ‫הקובץ‬ ‫אותו‬ ‫את‬ ‫להביא‬fetch).‫בו‬ ‫תטפל‬ ‫היא‬ ‫יחזור‬ ‫שהקובץ‬ ‫ברגע‬ .‫הלאה‬ ‫לרוץ‬ ‫ותמשיך‬
‫ההבדלים‬ ‫את‬ ‫לראות‬ ‫ניתן‬‫בשיט‬‫ו‬‫הפעולה‬ ‫ת‬‫של‬Synchronous I/O‫ו‬-A-Synchronous I/O,:‫הבא‬ ‫בתרשים‬
6 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫קלט‬ ‫פעולת‬ ‫המתאר‬ ,‫העליון‬ ‫בחלק‬/‫בזמן‬ ,‫סינכרונית‬ ‫פלט‬T1-T2,‫עושה‬ ‫שהמערכת‬ ‫מה‬ ‫כל‬ )‫הזמן‬ ‫את‬ ‫מייצג‬ ‫האמצעי‬ ‫(הציר‬
.‫במקביל‬ ‫אחר‬ ‫דבר‬ ‫שום‬ ‫קורה‬ ‫ולא‬ ,‫פלט‬ / ‫בקלט‬ ‫טיפול‬ ‫הינו‬
‫קלט‬ ‫פעולת‬ ‫לבצע‬ ‫ביקשה‬ ‫שהמערכת‬ ‫לראות‬ ‫ניתן‬ ,‫אסינכרונית‬ ‫פלט‬ / ‫קלט‬ ‫פעולת‬ ‫המתאר‬ ‫התחתון‬ ‫בחלק‬/‫בתהליך‬ ‫שרצה‬ ‫פלט‬
‫(אין‬ ‫לרוץ‬ ‫ממשיכה‬ ‫המערכת‬ ‫הראשי‬ ‫ובתהליך‬ ,‫נפרד‬‫קיטוע‬.)‫הראשי‬ ‫התהליך‬ ‫את‬ ‫שמייצג‬ ‫העליון‬ ‫בקו‬
‫איור‬9‫אסינכרוני‬ ‫פלט‬ / ‫קלט‬ ‫לעומת‬ )‫(למעלה‬ ‫סינכורני‬ ‫פלט‬ / ‫קלט‬ :
7 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫הבאה‬ ‫הקוד‬ ‫בדוגמת‬ ‫זאת‬ ‫נמחיש‬:
,‫הבאים‬ ‫הקוד‬ ‫קטעי‬ ‫שני‬‫ב‬ ‫אחד‬PHP‫ב‬ ‫ואחד‬js‫עבור‬node.js,‫מקובץ‬ ‫קריאה‬ ‫שבבסיסה‬ ‫פעולה‬ ‫אותה‬ ‫מבצעים‬sample.txt
‫(שורה‬3‫ה‬ ‫בקטע‬PHP‫ושורות‬3,4‫ב‬ ‫הקוד‬ ‫בקטע‬node.js).‫השורה‬ ‫רשומה‬ ‫בקובץ‬–“sample txt file”.
‫ב‬ ‫הקוד‬ ‫קטע‬ ‫את‬ ‫שמריצים‬ ‫שברגע‬ ‫לראות‬ ‫ניתן‬js‫הקובץ‬ ‫קריאת‬ ‫שאחרי‬ ‫השורה‬ ,‫(שורה‬7).‫הקובץ‬ ‫תוכן‬ ‫לפני‬ ‫נכתבת‬
‫פעולת‬ ‫מבצעים‬ ‫שכאשר‬ ‫היא‬ ‫הסיבה‬I/O‫ב‬-js.‫בינתיים‬ ‫לרוץ‬ ‫ממשיכה‬ ‫התוכנית‬‫התוכניות‬ ‫שפלט‬ ‫הסיבה‬ ‫וזו‬‫במסגרת‬ ‫(מופיע‬
Output).‫שונה‬
1.<?php
2.echo "Startingn";
3.$contents =
4.file_get_contents("sample.txt");
5.echo "contents of file: " . $contents;
6.echo "Finished.
7.?>
1.var fs = require("fs");
2.console.log("Starting");
3.fs.readFile("sample.txt", function(error,
4.data) {
5. console.log("contents of file: " + data);
6.});
7.console.log("Finished")
Output:
Starting
contents of file: sample txt file
Finished
Output:
Starting
Finished
contents of file: sample txt file
‫איור‬3‫ב‬ ‫קוד‬ ‫קטע‬ :PHP‫לעומת‬node.js
8 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫יתרונות‬
‫ב‬ ‫השימוש‬-node.js‫בחובו‬ ‫טומן‬:‫מרכזיים‬ ‫יתרונות‬ ‫מספר‬
1.‫עם‬ ‫העבודה‬ ‫עקב‬ ‫גבוהים‬ ‫ביצועים‬js.‫קלט/פלט‬ ‫אירועי‬ ‫מונחית‬ ‫הפיתוח‬ ‫ושיטת‬
9.‫אחידה‬ ‫שפה‬(js)‫שימוש‬ ‫שמאפשר‬ ‫מה‬ ,‫השרת‬ ‫ובצד‬ ‫הלקוח‬ ‫בצד‬‫חוזר‬‫גם‬ ‫הלקוח‬ ‫בצד‬ ‫שנכתב‬ ‫בקוד‬‫עבור‬‫השרת‬ ‫צד‬
‫ולהפך‬‫הדבר‬ .‫מיותר‬ ‫קוד‬ ‫כתיבת‬ ‫חוסך‬‫החל‬ ‫כתיבת‬ ‫עבור‬ ‫ייחודי‬ ‫בכ"א‬ ‫צורך‬ ‫וחוסך‬ ,‫השונים‬ ‫קים‬‫ו‬ ‫מאחר‬‫להכיר‬ ‫צורך‬ ‫אין‬
.‫שפות‬ ‫מספר‬‫ה‬ ‫כן‬ ‫כמו‬‫דבר‬‫שמכי‬ ‫יותר‬ ‫אינטגרטיבי‬ ‫בצוות‬ ‫עבודה‬ ‫מאפשר‬‫ר‬‫שני‬ ‫את‬‫צדי‬.‫האפליקציה‬
3.‫אירועי‬ ‫מונחה‬ ‫פיתוח‬‫מאפשר‬ ‫קלט/פלט‬‫במקביל‬ ‫פעולות‬ ‫ביצוע‬‫שה‬ ‫כך‬‫משתפרים‬ ‫ביצועים‬‫קטנה‬ ‫המשאבים‬ ‫וצריכת‬.
‫עם‬ ‫בעבודה‬ ‫מיוחדת‬ ‫בהיכרות‬ ‫צורך‬ ‫ללא‬ ‫במקביל‬ ‫פעולות‬ ‫לבצע‬ ‫ניתן‬Thread-.‫ים‬
4.‫של‬ ‫הבקבוק‬ ‫צוואר‬ ‫הינו‬ ‫הנתונים‬ ‫לבסיס‬ ‫האפליקציה‬ ‫שרת‬ ‫בין‬ ‫הפנימית‬ ‫התקשורת‬ ‫מסורתיות‬ ‫פיתוח‬ ‫בשפות‬
.‫האפליקציות‬node.js‫צורך‬ ‫פי‬ ‫על‬ ‫משאבים‬ ‫מקצה‬ ‫שהוא‬ ‫כך‬ ‫יד‬ ‫על‬ ‫האפליקציה‬ ‫שרת‬ ‫על‬ ‫נמוכה‬ ‫רגל‬ ‫טביעת‬ ‫מאפשר‬
.‫מראש‬ ‫משאבים‬ ‫של‬ ‫גדולה‬ ‫כמות‬ ‫להקצות‬ ‫במקום‬
‫לדוגמה‬‫להקצות‬ ‫עשוי‬ ‫אפאצ'י‬ ‫בהן‬ ‫במקומות‬mb8,‫משתמש‬ ‫עבור‬ ‫זיכרון‬node.js‫להקצות‬ ‫עשוי‬kb8‫בלבד‬.
node.js‫הנתונים‬ ‫מבסיס‬ ‫לתשובה‬ ‫מחכה‬ ‫שהשרת‬ ‫בזמן‬ .‫ההמתנה‬ ‫בזמן‬ ‫משאבים‬ ‫מקצה‬ ‫לא‬ ‫שהוא‬ ‫כך‬ ‫ע"י‬ ‫זאת‬ ‫מאפשר‬
‫זה‬ ‫דבר‬ .‫התשובה‬ ‫לעיבוד‬ ‫משאבים‬ ‫מקצה‬ ‫השרת‬ ‫מגיב‬ ‫הנתונים‬ ‫בסיס‬ ‫כאשר‬ ‫ורק‬ ‫אחרות‬ ‫פעולות‬ ‫בביצוע‬ ‫ממשיך‬ ‫הוא‬
.‫במקביל‬ ‫בקשות‬ ‫של‬ ‫יותר‬ ‫רב‬ ‫מספר‬ ‫עיבוד‬ ‫מאפשר‬
5.Java script‫פופולרית‬ ‫שפה‬ ‫הינה‬.‫בקלות‬ ‫הטכנולוגיה‬ ‫את‬ ‫מכירים‬ ‫אשר‬ ‫מפתחים‬ ‫למצוא‬ ‫שמאפשר‬ ‫מה‬ .‫מאוד‬ ‫ונפוצה‬
6.Java script‫שפה‬ ‫הינה‬‫ב‬ ‫יעילה‬‫עם‬ ‫עבודה‬Json-‫ים‬‫ו‬ )‫נתונים‬ ‫לייצוג‬ ‫(סטנדרט‬‫כתיבת‬ ‫מאפשר‬ ‫זה‬ ‫דבר‬API‫בקלות‬,
.‫טבעית‬ ‫ובצורה‬ ‫במהירות‬
7.‫יכולות‬‫להתרחבות‬‫בקלות‬ ‫גדול‬ ‫משתמשים‬ ‫למספר‬(scalable.)
9 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫חסרונות‬
‫יחסית‬ ‫צעירה‬ ‫הטכנולוגיה‬: ‫מישורים‬ ‫בכמה‬ ‫שמשפיע‬ ‫מה‬ ,
o‫קהילה‬‫יחסית‬ ‫מצומצמת‬-.‫בעיות‬ ‫כשיש‬ ‫תמיכה‬ ‫קבלת‬ ‫על‬ ‫מקשה‬
o‫מקורות‬‫לימוד‬‫איכותיים‬‫מצומצמים‬.
o‫מיעוט‬‫תשתיות‬‫הטכנולוגיה‬ ‫בסיס‬ ‫על‬ ‫אפליקטיביות‬
.‫והתנסות‬ ‫למידה‬ ‫מחייב‬ ‫קלט/פלט‬ ‫אירועי‬ ‫מונחית‬ ‫בשיטה‬ ‫פיתוח‬
Node.js‫באמצעות‬ ‫רץ‬process(‫תהליך‬)‫ו‬ ‫אחד‬thread)‫(תהליכון‬‫שלו‬ ‫ההתרחבות‬ ‫על‬ ‫שמקשה‬ ‫מה‬ ,‫אחד‬
(scalable.‫ליבות‬ ‫מרובי‬ ‫שרתים‬ ‫עבור‬ ‫)יות‬
‫לקוח‬ ‫צד‬ ‫ופיתוח‬ ‫שרת‬ ‫צד‬ ‫פיתוח‬‫זהה‬ ‫בשפה‬–‫זהו‬‫אמנם‬‫ש‬ ‫מכיוון‬ ‫חיסרון‬ ‫גם‬ ‫אך‬ ‫יתרון‬‫לרוב‬‫איתם‬ ‫האתגרים‬
‫הלקוח‬ ‫ובצד‬ ‫השרת‬ ‫בצד‬ ‫מתמודדים‬.‫אחרות‬ ‫פיתוח‬ ‫וטכנולוגיות‬ ‫מתודולוגיות‬ ‫נדרשות‬ ‫דווקא‬ ‫ולעיתים‬ ,‫שונים‬ ‫הנם‬
,‫לסיכום‬‫היא‬ ‫האם‬ ‫לבחון‬ ‫תוכלו‬ '‫א‬ ‫בנספח‬ .‫ספציפיים‬ ‫ליישומים‬ ,‫לפחות‬ ‫בינתיים‬ ,‫מתאימה‬ ‫החדשה‬ ‫הטכנולוגיה‬ ‫כי‬ ‫לראות‬ ‫ניתן‬
.‫שלכם‬ ‫היישום‬ ‫עבור‬ ‫מתאימה‬
10 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫הפרויקט‬ ‫בשלות‬ / ‫התקדמות‬
‫לבחור‬ ‫הולך‬ ‫גוף‬ ‫כאשר‬,‫טכנולוגיה‬‫פיתוח‬ ‫טכנולוגיית‬ ‫ובפרט‬ ,‫בכלל‬‫הוא‬ ‫המרכזיים‬ ‫הפרמטרים‬ ‫אחד‬‫בו‬ ‫והאופן‬ ‫הפרוייקט‬ ‫בשלות‬
,‫טוב‬ ‫כנראה‬ ‫שהוא‬ ‫סימן‬ ,'‫וכד‬ ‫לפרוייקט‬ )‫קוד‬ ‫(בעיקר‬ ‫תורמים‬ ,‫יותר‬ ‫טובה‬ ‫קהילה‬ ,‫משתמשים‬ ‫יותר‬ ‫שישנם‬ ‫ככל‬ .‫מתפתח‬ ‫הוא‬
.‫ויציב‬
‫כד‬ ‫פתוח‬ ‫קוד‬ ‫טכנולוגיית‬ ‫בשלות‬ ‫על‬ ‫המעידים‬ ‫המדדים‬ ‫אחד‬‫וגמת‬node.js‫ה‬ ‫פעולות‬ '‫מס‬ ‫הוא‬–commit‫המתבצעות‬
.‫הפיתוח‬ ‫בסביבת‬
‫ה‬‫הבאים‬ ‫גרפים‬‫המתארים‬ ,‫מעידים‬ ‫זאת‬‫שוטף‬ ‫באופן‬ ‫מתפתח‬ ‫הפרויקט‬ ‫כי‬‫ו‬‫בשימוש‬ ‫נמצא‬‫גדולה‬ ‫קהילה‬ ‫על‬ ‫שמעיד‬ ‫מה‬ ,‫גבוה‬
.‫שהתגלו‬ ‫ולבעיות‬ ‫בשוק‬ ‫לשינויים‬ ‫בהתאם‬ ‫המתפתח‬ ‫דינאמי‬ ‫פרויקט‬ ‫ועל‬ ‫ופעילה‬
‫איור‬4‫מספר‬ :‫ה‬ ‫פעולות‬-Commit‫בפרויקט‬node.js–‫בכתום‬ ‫והתחתון‬ ‫הפרויקט‬ ‫תקופת‬ ‫כל‬ ‫את‬ ‫מייצג‬ ‫בירוק‬ ‫העליון‬ ‫החלק‬
‫האחרונה‬ ‫השנה‬ ‫את‬.
11 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫סיכום‬
node.js‫בשנת‬ ‫במיוחד‬ ‫לפופולרי‬ ‫הפך‬9010‫כמו‬ ‫כמעט‬ ‫פופולריות‬ ‫תופס‬ ‫ומאז‬ ,Ruby On Rails‫פיתוח‬ ‫(טכנולוגיית‬web
)‫נוספת‬.‫כי‬ ‫נראה‬‫שה‬ ‫מכיוון‬-framework‫שפת‬ ‫בסיס‬ ‫על‬ ‫נכתב‬java script,‫נמוכים‬ ‫אליו‬ ‫הכניסה‬ ‫חסמי‬ ,‫הנפוצה‬
‫אפליקציות‬ ‫עבור‬ ‫בו‬ ‫לשימוש‬ ‫והמוטיבציה‬real time / near real time.‫גבוהה‬ ‫הינה‬
‫ה‬ ‫שורשי‬ .‫הטכנולוגיה‬ ‫משתמשי‬ ‫קהילת‬ ‫בקרב‬ ‫התלהבות‬ ‫קיימת‬ ‫עתה‬ ‫שעד‬ ‫נראה‬-frameworks‫ב‬-java script‫גם‬ ‫פונים‬
‫למפתחי‬‫ו‬‫מעצבי‬‫תוכנה‬‫ה‬ ‫לעולם‬ ‫נכנסו‬ ‫עתה‬ ‫שזה‬-web‫למפתחים‬ ‫וכן‬‫מנוסים‬‫המחפשים‬‫אפליקציות‬ ‫לפתח‬ ‫יותר‬ ‫טובה‬ ‫דרך‬
real time.
‫אפליקציית‬ ‫לבנות‬ ‫נכונה‬ ‫אחת‬ ‫דרך‬ ‫שאין‬ ‫היא‬ ‫רבים‬ ‫מפתחים‬ ‫בקרב‬ ‫נפוצה‬ ‫חכמה‬web‫כי‬ ‫נראה‬ ‫אך‬ ,node.js‫ונתפש‬ ‫הולך‬
.‫אפליקציות‬ ‫של‬ ‫מסוים‬ ‫סוג‬ ‫עבור‬ ‫ביותר‬ ‫הטוב‬ ‫כפתרון‬
‫ב‬ ‫המשתמשת‬ ‫מוכרת‬ ‫חברה‬-node.js‫החברתית‬ ‫הרשת‬ ‫היא‬-‫מקצועית‬–Linkedin‫החברה‬ ‫של‬ ‫הראשי‬ ‫המהנדס‬ .‫מר‬ ,‫קירן‬
( ‫פרסד‬Kiran Prasad:‫לאחרונה‬ ‫צוטט‬ )
‫על‬ ‫לגמרי‬ ‫מבוססת‬ ,‫המובייל‬ ‫בגרסת‬ ‫שלנו‬ ‫התוכנה‬ ‫השרת‬ ‫"בצד‬node.‫היא‬ ‫ראשונה‬ ‫סיבה‬‫סקלביל‬‫יות‬(scalability)‫והשנייה‬
‫ש‬ ‫היא‬node.js."‫ענקיים‬ ‫ביצועים‬ ‫יתרונות‬ ‫לנו‬ ‫הראה‬
12 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
:'‫א‬ ‫נספח‬‫האם‬node.js?‫שלי‬ ‫לאפליקציה‬ ‫מתאים‬
?‫להשתמש‬ ‫מתי‬
‫אפליקציות‬near real time–‫ש‬ ‫הביצועים‬ .‫חברתיות‬ ‫רשתות‬ ,‫צ'טים‬ ,‫מידיים‬ ‫מסרים‬ ‫כגון‬node.js‫נותנים‬ ‫מאפשר‬
‫ש‬ ‫מכיוון‬ ‫להיזהר‬ ‫יש‬ ‫אך‬ ,‫זה‬ ‫מסוג‬ ‫אפליקציות‬ ‫במימוש‬ ‫משמעותי‬ ‫יתרון‬ ‫לו‬java script‫שזמני‬ ‫כך‬ ‫דינאמית‬ ‫שפה‬ ‫היא‬
‫ה‬ ‫ריצת‬ ‫מזמני‬ ‫מושפעים‬ ‫להיות‬ ‫עלולים‬ ‫התגובה‬garbage collection.
‫אפליקציות‬ ‫עבור‬ ‫לכן‬real time.‫המיטבי‬ ‫הפתרון‬ ‫את‬ ‫לעומק‬ ‫לבחון‬ ‫יש‬ ‫אמיתיות‬
Json API–‫באמצעות‬ ‫גישה‬ ‫אליו‬ ‫ולספק‬ ,‫נתונים‬ ‫מקור‬ "‫"לעטוף‬ ‫רוצה‬ ‫הכל‬ ‫בסך‬ ‫אתה‬ ‫אם‬Json API, node.js
‫של‬ ‫בתצורה‬ ‫לעבוד‬ ‫שלו‬ ‫היכולת‬ ‫בשל‬ ,‫אולטימטיבי‬ ‫פיתרון‬ ‫לספק‬ ‫עשוי‬non-blocking I/O‫של‬ ‫העוצמה‬ ‫עם‬ ‫יחד‬
java script‫ב‬ ‫בטיפול‬–json.
‫עמוד‬ ‫של‬ ‫אפליקציות‬web( ‫אחד‬Single Page App)–‫א‬‫פעולות‬ ‫הרבה‬ ‫שמבצעת‬ ‫אפליקציה‬ ‫בונה‬ ‫אתה‬ ‫ם‬AJAX
,‫הלקוח‬ ‫בצד‬ ‫עיבוד‬ ‫ומבצעת‬ ‫השרת‬ ‫מול‬node.js‫בקשות‬ ‫הרבה‬ ‫לעבד‬ ‫שלו‬ ‫האפשרות‬ ‫בזכות‬ ‫אידיאלי‬ ‫להיות‬ ‫יכול‬
‫השרת‬ ‫בצד‬ )‫תקינות‬ ‫בדיקות‬ ‫(כגון‬ ‫זהה‬ ‫בקוד‬ ‫להשתמש‬ ‫שלו‬ ‫היכולת‬ ‫גם‬ ‫כי‬ ‫לציין‬ ‫ניתן‬ .‫קצרים‬ ‫תגובה‬ ‫זמני‬ ‫עם‬ ‫במקביל‬
‫תומכת‬ ‫הלקוח‬ ‫ובצד‬.‫זה‬ ‫מסוג‬ ‫אפליקציות‬ ‫בפיתוח‬
‫פקודות‬ ‫לעטיפת‬ ‫אפליקציות‬command line–‫של‬ ‫היכולת‬node.js‫שלהם‬ ‫לפלט‬ ‫ולהתייחס‬ ‫רבים‬ ‫בן‬ ‫תהליכי‬ ‫ליצור‬
‫פקודות‬ ‫עבור‬ ‫יותר‬ ‫ונוחה‬ ‫יפה‬ ‫מעטפת‬ ‫ליצירת‬ ‫לאידיאלי‬ ‫אותו‬ ‫הופך‬ ,"‫מידע‬ ‫של‬ ‫"כזרם‬command line.‫קיימות‬
‫מידע‬ ‫הזרמת‬–‫לבקשות‬ ‫מתייחסות‬ ‫בד"כ‬ ‫מסורתיות‬ ‫אפליקציות‬http‫אינם‬ ‫הם‬ ‫בפועל‬ ‫אך‬ ,‫אטומיים‬ ‫אירועים‬ ‫כאל‬
‫של‬ ‫היכולת‬ .‫כאלה‬node.js‫לבקשות‬ ‫להתייחס‬http.‫בתוצאות‬ ‫ניכר‬ ‫לשיפור‬ ‫להביא‬ ‫עשויה‬ ‫אטומיים‬ ‫אירועים‬ ‫כאל‬
.‫שונות‬ ‫מידע‬ ‫שכבות‬ ‫בין‬ ‫גישור‬ ‫או‬ ‫העלאה‬ ‫בזמן‬ ‫קובץ‬ ‫עיבוד‬ ‫בעת‬ ‫לדוגמא‬
‫להשת‬ ‫לא‬ ‫מתי‬?‫מש‬
‫טובה‬ ‫סיבה‬ ‫אין‬ ‫פלט‬ ‫קלט‬ ‫פעולות‬ ‫מעט‬ ‫עם‬ ,‫עיבוד‬ ‫בעיקר‬ ‫לעשות‬ ‫נועדה‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬ .‫עיבוד‬ ‫אפליקציות‬
‫ב‬ ‫להשתמש‬node.js.‫מלאכותית‬ ‫בבינה‬ ‫שימוש‬ ‫העושות‬ ‫ואפליקציות‬ ‫בוידאו‬ )‫(רינדור‬ ‫לטיפול‬ ‫אפליקציות‬ :'‫לדוג‬ .
‫אפליקציות‬CRUD (create, read, update, delete)‫עם‬HTML–‫מבצעת‬ ‫בעיקר‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬
‫בעזרת‬ ‫הנתונים‬ ‫את‬ ‫ומציגה‬ ,‫נתונים‬ ‫בסיס‬ ‫מול‬ ‫פעולות‬HTML‫ל‬ ‫אין‬ ‫זה‬ ‫בשלב‬ .node.js‫פני‬ ‫על‬ ‫משמעותי‬ ‫יתרון‬
‫כגון‬ ‫אחרות‬ ‫טכנולוגיות‬Rails‫או‬PHP‫בסיס‬ ‫על‬ ‫מתקדמות‬ ‫אפליקטיביות‬ ‫תשתיות‬ ‫עדיין‬ ‫אין‬ ‫כי‬ ‫העובדה‬ ‫בשל‬ ‫וזאת‬
node.
‫ב‬ ‫שימוש‬node.js‫ע‬ ‫יחד‬‫רלציוני‬ ‫לא‬ ‫נתונים‬ ‫בסיס‬ ‫ם‬–‫מושגי‬ ‫של‬ ‫בישול‬ ‫ספר‬ ‫כמו‬ ‫נראית‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬
noSQL DB‫עם‬ ‫יחד‬ ‫זאת‬ ‫לערבב‬ ‫האם‬ ‫שוב‬ ‫שתשקול‬ ‫כדאי‬node‫שאינך‬ ‫טכנולוגיות‬ ‫במספר‬ ‫שימוש‬ ‫כי‬ ‫היא‬ ‫כוונתי‬ .
...‫לפרוייקט‬ ‫משמעותי‬ ‫סיכון‬ ‫להוות‬ ‫עשויה‬ ,‫טוב‬ ‫מספיק‬ ‫מכיר‬
13 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
:'‫ב‬ ‫נספח‬Node.js vs PHP‫עומסים‬ ‫מבחן‬
‫בין‬ ‫השוואה‬ ‫בוצעה‬ ‫הבא‬ ‫בניסוי‬Node.js‫לבין‬PHP(Apache2‫ו‬–(mod_php‫שזוהי‬ ‫כיוון‬ ,‫כך‬ ‫בוצעה‬ ‫ההשוואה‬ .
‫ב‬ ‫בשימוש‬ ‫ביותר‬ ‫הנפוצה‬ ‫הארכיטקטורה‬-PHP‫ב‬ ‫שימוש‬ ‫ידי‬ ‫על‬ ‫יותר‬ ‫טובים‬ ‫ביצועים‬ ‫לקבל‬ ‫שניתן‬ )‫שבצדק‬ ‫(ייתכן‬ ‫שיגידו‬ ‫יש‬ .
Nginx or Lighthttpd‫כשרת‬HTTP‫עבור‬PHP‫דבר‬ ‫של‬ ‫בסופו‬ .PHP‫זה‬ ‫ואין‬ ,‫ונפרדים‬ ‫רבים‬ ‫בתהליכים‬ ‫רץ‬ ‫השרת‬ ‫בצד‬
( ‫אותם‬ ‫שיצרה‬ ‫המכניקה‬ ‫מה‬ ‫משנה‬mod_php‫או‬fastcgi‫מכניקה‬ ‫או‬‫לארכיטקטורה‬ ‫ניצמד‬ ‫ההשוואה‬ ‫לשם‬ ‫לכן‬ .)‫אחרת‬
.‫הנפוצה‬
‫הניסוי‬ ‫סביבת‬
‫הניסוי‬ ‫לצורך‬‫נכתבה‬‫ב‬ ‫פשוטה‬ ‫אפליקציה‬–java script‫וב‬–php5‫שולפת‬ ‫האפליקציה‬ .50‫מ‬ ‫שורות‬–wordpress
)‫פתוח‬ ‫בקוד‬ ‫בלוגים‬ ‫(סביבת‬‫בצורת‬ ‫החוצה‬ ‫המידע‬ ‫את‬ ‫ומייצאת‬json‫לא‬ ‫שאנו‬ ‫כיוון‬ ‫היא‬ ‫פשוטה‬ ‫שהאפליקציה‬ ‫לכך‬ ‫הסיבה‬ .
‫העיקרית‬ ‫שהמטרה‬ ‫וכן‬ ,‫השפות‬ ‫בין‬ ‫מימוש‬ ‫להבדלי‬ ‫להיכנס‬ ‫רוצים‬‫היא‬‫להשוות‬‫הארכיטקטורה‬ ‫את‬‫בין‬‫הפיתוח‬ ‫טכנולוגיות‬‫ולא‬
.‫הקוד‬ ‫איכות‬ ‫את‬
‫חומרה‬:
:‫הבא‬ ‫המפרט‬ ‫בעל‬ ‫וירטואלי‬ ‫שרת‬
 1 x Core Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
 2 Gb RAM.
 OS is 64 Bit Ubuntu 12.10 installed fresh before running these tests.
 We installed the Load Impact Server metric agent.
‫תוכנה‬:
 Apache/2.2.22 and
 PHP 5.4.6.
 Node.js version 0.8.18 (built using this script)
 MySQL is version 5.5.29.
 The data table in the tests is the options table from a random WordPress blog.
14 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
:‫שרצו‬ ‫הקוד‬ ‫קטעי‬
// Include http module,
var http = require('http'),
mysql = require("mysql");
// Create the connection.
// Data is default to new mysql installation and should be changed according to your
configuration.
var connection = mysql.createConnection({
user: "wp",
password: "****",
database: "random"
});
// Create the http server.
http.createServer(function (request, response) {
// Attach listener on end event.
request.on('end', function () {
// Query the database.
connection.query('SELECT * FROM wp_options limit 50;', function (error, rows,
fields) {
response.writeHead(200, {
'Content-Type': 'text/html'
});
// Send data as JSON string.
// Rows variable holds the result of the query.
response.end(JSON.stringify(rows));
});
});
// Listen on the 8080 port.
}).listen(8080);
<!--?php $db = new PDO('mysql:host=localhost;dbname=*****', 'wp', '*****'); $all= $db--->query('SELECT *
FROM wp_options limit 50;')->fetchAll();
echo json_encode($all);
15 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫הניסוי‬ ‫אופן‬:
‫בדפדפן‬ ‫משתמשים‬ ‫של‬ ‫דימוי‬ ‫כלל‬ ‫הניסוי‬
‫מ‬ ‫היה‬ ‫במשתמשים‬ ‫הגידול‬–0-500‫של‬ ‫זמן‬ ‫בפרק‬ ‫משתמשים‬5.‫דקות‬
.‫גיאוגרפית‬ ‫אחד‬ ‫ממקום‬ ‫הגיעו‬ ‫הבקשות‬ ‫כל‬
‫תוצאות‬:
‫איור‬5‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :node.js
‫איור‬6‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :PHP
:‫מקרא‬
‫ה‬ ‫את‬ ‫מייצג‬CPU‫של‬
‫השרת‬
‫מספר‬ ‫את‬ ‫מייצג‬
‫המשתמשים‬
‫את‬ ‫מייצג‬‫התגובה‬ ‫זמני‬
16 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫התוצאות‬ ‫ניתוח‬:
‫שב‬ ‫לראות‬ ‫ניתן‬ ‫בגרפים‬node.js‫על‬ ‫בערך‬ ‫ועומד‬ ‫הניסוי‬ ‫כל‬ ‫לאורך‬ ‫יציב‬ ‫התגובה‬ ‫זמן‬900‫ב‬ ‫בעוד‬ ,‫שניות‬ ‫מילי‬PHP‫בנקודה‬
‫מסוימת‬‫ב‬ ‫(בערך‬-400‫ה‬ ‫קו‬ ‫את‬ ‫שחצה‬ ‫עד‬ ‫גבוה‬ ‫בקצב‬ ‫לעלות‬ ‫התחיל‬ ‫הוא‬ )‫משתמשים‬–400.‫שניות‬ ‫מילי‬
:‫להבדלים‬ ‫הסיבה‬
‫ה‬ ‫עמוד‬ ‫את‬ ‫טוען‬ ‫האפאצ'י‬ ‫כאשר‬PHP‫בו‬ ‫אחת‬ ‫בבקשה‬ ‫רק‬ ‫לטפל‬ ‫יכול‬ ‫הבן‬ ‫תהליך‬ .‫בבקשה‬ ‫שיטפל‬ ‫בן‬ ‫לתהליך‬ ‫זאת‬ ‫משאיר‬ ‫הוא‬
‫בשרת‬ .‫לחכות‬ ‫צריכות‬ ‫האחרות‬ ‫מאחת‬ ‫יותר‬ ‫יש‬ ‫אם‬ ‫ולכן‬ ‫זמנית‬‫של‬ ‫פרמטר‬ ‫באפאצ'י‬ ‫הוגדר‬ ‫הניסוי‬ ‫בוצע‬ ‫עליו‬MaxClients
‫להיות‬956‫(במקום‬150)‫מחדל‬ ‫כברירת‬ ‫שמוגדר‬‫להיווצר‬ ‫יכולים‬ ‫כלומר‬ .956‫זה‬ ‫אך‬ ,‫הפרמטר‬ ‫ערך‬ ‫את‬ ‫להגדיל‬ ‫ניתן‬ .‫בן‬ ‫תהליכי‬
( ‫זיכרון‬ ‫לבעיות‬ ‫להוביל‬ ‫עלול‬RAM‫לבין‬ ‫במקביל‬ ‫שמטופלות‬ ‫הבקשות‬ ‫מספר‬ ‫בין‬ ‫האיזון‬ ‫את‬ ‫למצוא‬ ‫צריך‬ ‫ולכן‬ )‫של‬ ‫הזיכרון‬ ‫כמות‬
. ‫השרת‬
‫ב‬node.js‫ב‬ ‫בערך‬ ‫מהירה‬ ,‫עצמה‬ ‫בפני‬ ‫בקשה‬ ‫כל‬–30%‫ב‬ ‫מאשר‬ ‫יותר‬PHP‫זו‬ ‫בסיסית‬ ‫בקונפיגורציה‬ ‫לכן‬ .node‫מהיר‬ ‫אכן‬
‫ב‬ ‫בנוסף‬ .‫יותר‬node‫הבן‬ ‫תהליכי‬ ‫ובין‬ ,‫השונים‬ ‫התהליכים‬ ‫בין‬ ‫בתקשורת‬ ‫צורך‬ ‫אין‬ ‫ולכן‬ .‫השרת‬ ‫על‬ ‫אחד‬ ‫בתהליך‬ ‫רץ‬ ‫הכל‬
‫שצרי‬ ‫(כפי‬ ‫האב‬ ‫לתהליך‬‫ב‬ ‫ך‬PHP‫בנוסף‬ .)node.‫זיכרון‬ ‫צריכת‬ ‫מבחינת‬ ‫יותר‬ ‫יעיל‬PHP‫דורש‬overhead‫יותר‬ ‫גבוה‬ ‫מספר‬ ‫עבור‬
‫בעוד‬ ,‫במקביל‬ ‫בקשות‬ ‫של‬node.‫הבקשות‬ ‫בין‬ ‫שלו‬ ‫הזיכרון‬ ‫מרבית‬ ‫את‬ ‫משתף‬
‫ה‬ ‫צריכת‬ ‫המקרים‬ ‫שבשני‬ ,‫לב‬ ‫לשים‬ ‫חשוב‬ ‫בנוסף‬CPU‫מ‬ ‫(פחות‬ ‫משמעותי‬ ‫גורם‬ ‫היוותה‬ ‫לא‬–5%‫כלומר‬ ,)‫המקרים‬ ‫בשני‬‫ניסוי‬
.‫הארכיטקטורות‬ ‫בין‬ ‫ההבדלים‬ ‫את‬ ‫בעיקר‬ ‫לבדוק‬ ‫בא‬ ‫זה‬
‫אם‬node.js....‫טוב‬ ‫כך‬ ‫כל‬
Node.js‫מביא‬‫עמו‬.‫תרבותית‬ ‫מבחינה‬ ‫והן‬ ‫טכנית‬ ‫מבחינה‬ ‫הן‬ ,‫אתגרים‬ ‫גם‬
‫הטכנית‬ ‫מהבחינה‬-‫בשרת‬ ‫שימוש‬ ‫נעשה‬ ‫זה‬ ‫בניסוי‬‫של‬ ‫לטובתו‬ ‫שמשחק‬ ‫דבר‬ ,‫אחת‬ ‫ליבה‬ ‫בעל‬node‫ש‬ ‫כיוון‬ .node‫על‬ ‫רץ‬
‫ובו‬ ,‫אחד‬ ‫תהליך‬ ‫באמצעות‬ ‫השרת‬thread.‫ליבות‬ ‫מרובי‬ ‫בשרתים‬ ‫אידיאלית‬ ‫בצורה‬ ‫גדילתו‬ ‫על‬ ‫מקשה‬ ‫הדבר‬ ,‫אחד‬
‫התרבותית‬ ‫מהבחינה‬–‫ש‬ ‫מכיוון‬node,‫בעצמך‬ ‫קוד‬ ‫יותר‬ ‫הרבה‬ ‫לממש‬ ‫מוכן‬ ‫להיות‬ ‫עליך‬ ,‫נפוץ‬ ‫ממש‬ ‫ולא‬ ‫יחסית‬ ‫צעיר‬ ‫עדיין‬
.‫בעצמך‬ ‫שלך‬ ‫הבעיות‬ ‫את‬ ‫ולפתור‬ ,‫יותר‬ ‫לחקור‬
‫כמובן‬‫שבחיים‬‫האמתיים‬‫ה‬ ‫מבחינת‬ ‫הן‬ ,‫כאן‬ ‫שראינו‬ ‫הפערים‬ ‫לצמצום‬ ‫טכניקות‬ ‫ישנן‬ ,-PHP‫של‬ ‫היכולת‬ ‫מבחינת‬ ‫והן‬node
.‫ליבות‬ ‫מרובי‬ ‫מעבדים‬ ‫על‬ ‫משופרים‬ ‫לביצועים‬
17 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬
shoham.gilad@gmail.com
‫מקורות‬:
‫ישראל‬ ‫אינטרנט‬ ‫אתר‬-israel.com/-http://www.internet-‫לפיתוח‬ ‫המוקדש‬ ‫אתר‬WEB
node.jsAn Introduction to-TutsPlus--to-introduction-an-http://tutolearning.com/tutsplus
js/-node
http://nodejs.org–‫הפרוייקט‬ ‫של‬ ‫הרשמי‬ ‫האתר‬
http://en.wikipedia.org/wiki/Nodejs
js-http://mashable.com/2011/03/10/node/-‫כתבות‬ / ‫חדשות‬ ‫פורטל‬
‫של‬ ‫מצגת‬‫דל‬ ‫ראיין‬)‫הפרוייקט‬ ‫(יוצר‬-http://nodejs.org/cinco_de_node.pdf
http://nodeguide.com/convincing_the_boss.html-‫ב‬ ‫לשימוש‬ )‫רשמי‬ ‫(לא‬ ‫מדריך‬node.js
http://stackoverflow.com/-‫פיתוח‬ ‫בנושאי‬ ‫ותשובות‬ ‫שאלות‬ ‫אתר‬
vZryQEDVI_A4P6kVye-http://clipboard.com/clip/LQY8YknhoHfI_m8mT-‫מי‬ ‫לשיתוף‬ ‫אתר‬‫דע‬
http://www.quora.com–‫מידע‬ ‫לשיתוף‬ ‫אתר‬
youtube - Ryan Dahl - History of node.js
http://elegantcode.com–‫טכנולוגיה‬ ‫ואנשי‬ ‫למפתחים‬ ‫בלוגים‬ ‫אתר‬
-node-visualize-to-impact-load-using-php-vs-js-http://blog.loadimpact.com/2013/02/01/node
efficency/-js-‫בלוגים‬ ‫אתר‬

More Related Content

Viewers also liked

Planificación y organización de dominio
Planificación y organización de dominioPlanificación y organización de dominio
Planificación y organización de dominiolilidani103
 
Spa Architecture with Durandal and Friends
Spa Architecture with Durandal and FriendsSpa Architecture with Durandal and Friends
Spa Architecture with Durandal and FriendsJohnny Tordgeman
 
Angular 2 NgModule
Angular 2 NgModuleAngular 2 NgModule
Angular 2 NgModuleEyal Vardi
 
Routing And Navigation
Routing And NavigationRouting And Navigation
Routing And NavigationEyal Vardi
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0Eyal Vardi
 
Upgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xUpgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xEyal Vardi
 
Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Eyal Vardi
 
Angular 2.0 Dependency injection
Angular 2.0 Dependency injectionAngular 2.0 Dependency injection
Angular 2.0 Dependency injectionEyal Vardi
 
Angular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationAngular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationEyal Vardi
 
Performance Optimization In Angular 2
Performance Optimization In Angular 2Performance Optimization In Angular 2
Performance Optimization In Angular 2Eyal Vardi
 
Angular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xAngular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xEyal Vardi
 
Modules in ECMAScript 6.0
Modules in ECMAScript 6.0Modules in ECMAScript 6.0
Modules in ECMAScript 6.0Eyal Vardi
 
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraAllen Wirfs-Brock
 
Basics of angular directive (Part - 1)
Basics of angular directive (Part - 1)Basics of angular directive (Part - 1)
Basics of angular directive (Part - 1)Vijay Kani
 
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Eyal Vardi
 
AngularJS Testing
AngularJS TestingAngularJS Testing
AngularJS TestingEyal Vardi
 
Custom AngularJS Directives
Custom AngularJS DirectivesCustom AngularJS Directives
Custom AngularJS Directivesyprodev
 
AngularJS Custom Directives
AngularJS Custom DirectivesAngularJS Custom Directives
AngularJS Custom Directivesyprodev
 
AngularJS custom directive
AngularJS custom directiveAngularJS custom directive
AngularJS custom directiveNascenia IT
 
AngularJS Compile Process
AngularJS Compile ProcessAngularJS Compile Process
AngularJS Compile ProcessEyal Vardi
 

Viewers also liked (20)

Planificación y organización de dominio
Planificación y organización de dominioPlanificación y organización de dominio
Planificación y organización de dominio
 
Spa Architecture with Durandal and Friends
Spa Architecture with Durandal and FriendsSpa Architecture with Durandal and Friends
Spa Architecture with Durandal and Friends
 
Angular 2 NgModule
Angular 2 NgModuleAngular 2 NgModule
Angular 2 NgModule
 
Routing And Navigation
Routing And NavigationRouting And Navigation
Routing And Navigation
 
Template syntax in Angular 2.0
Template syntax in Angular 2.0Template syntax in Angular 2.0
Template syntax in Angular 2.0
 
Upgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.xUpgrading from Angular 1.x to Angular 2.x
Upgrading from Angular 1.x to Angular 2.x
 
Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0Component lifecycle hooks in Angular 2.0
Component lifecycle hooks in Angular 2.0
 
Angular 2.0 Dependency injection
Angular 2.0 Dependency injectionAngular 2.0 Dependency injection
Angular 2.0 Dependency injection
 
Angular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time CompilationAngular 2 - Ahead of-time Compilation
Angular 2 - Ahead of-time Compilation
 
Performance Optimization In Angular 2
Performance Optimization In Angular 2Performance Optimization In Angular 2
Performance Optimization In Angular 2
 
Angular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.xAngular 1.x vs. Angular 2.x
Angular 1.x vs. Angular 2.x
 
Modules in ECMAScript 6.0
Modules in ECMAScript 6.0Modules in ECMAScript 6.0
Modules in ECMAScript 6.0
 
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing EraECMAScript 6: A Better JavaScript for the Ambient Computing Era
ECMAScript 6: A Better JavaScript for the Ambient Computing Era
 
Basics of angular directive (Part - 1)
Basics of angular directive (Part - 1)Basics of angular directive (Part - 1)
Basics of angular directive (Part - 1)
 
Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)Angular 2 Architecture (Bucharest 26/10/2016)
Angular 2 Architecture (Bucharest 26/10/2016)
 
AngularJS Testing
AngularJS TestingAngularJS Testing
AngularJS Testing
 
Custom AngularJS Directives
Custom AngularJS DirectivesCustom AngularJS Directives
Custom AngularJS Directives
 
AngularJS Custom Directives
AngularJS Custom DirectivesAngularJS Custom Directives
AngularJS Custom Directives
 
AngularJS custom directive
AngularJS custom directiveAngularJS custom directive
AngularJS custom directive
 
AngularJS Compile Process
AngularJS Compile ProcessAngularJS Compile Process
AngularJS Compile Process
 

Similar to Nodejs

217197388 rt-development-security-2011
217197388 rt-development-security-2011217197388 rt-development-security-2011
217197388 rt-development-security-2011Inbalraanan
 
251802547 esm-cmdb-2014 (1)
251802547 esm-cmdb-2014 (1)251802547 esm-cmdb-2014 (1)
251802547 esm-cmdb-2014 (1)Inbalraanan
 
251802547 esm-cmdb-2014
251802547 esm-cmdb-2014251802547 esm-cmdb-2014
251802547 esm-cmdb-2014Inbalraanan
 
Dw124 3-kernel so-injector
Dw124 3-kernel so-injectorDw124 3-kernel so-injector
Dw124 3-kernel so-injectorAdirMakmel
 
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik Amos
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik AmosFinal Project - 6 Segment Pipeline - Aharon Ofir & Aizik Amos
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik AmosAmos Aizik
 
קורס אנדרואיד
קורס אנדרואידקורס אנדרואיד
קורס אנדרואידNathan Krasney
 
217196516 rt-siem-soc-2010
217196516 rt-siem-soc-2010217196516 rt-siem-soc-2010
217196516 rt-siem-soc-2010Inbalraanan
 
217188253 vdi-case-final-2010
217188253 vdi-case-final-2010217188253 vdi-case-final-2010
217188253 vdi-case-final-2010Inbalraanan
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDEDaniel Cnaan
 
Fire Wall Solutions Final
Fire Wall Solutions FinalFire Wall Solutions Final
Fire Wall Solutions Finalhaimkarel
 
מהי אנליזה סטטית?
מהי אנליזה סטטית?מהי אנליזה סטטית?
מהי אנליזה סטטית?TrinitySB
 
335653790 cyber-decisions-2016
335653790 cyber-decisions-2016335653790 cyber-decisions-2016
335653790 cyber-decisions-2016Inbalraanan
 
354479451 data-center
354479451 data-center354479451 data-center
354479451 data-centerInbalraanan
 

Similar to Nodejs (16)

PHP Scalability
PHP ScalabilityPHP Scalability
PHP Scalability
 
217197388 rt-development-security-2011
217197388 rt-development-security-2011217197388 rt-development-security-2011
217197388 rt-development-security-2011
 
251802547 esm-cmdb-2014 (1)
251802547 esm-cmdb-2014 (1)251802547 esm-cmdb-2014 (1)
251802547 esm-cmdb-2014 (1)
 
251802547 esm-cmdb-2014
251802547 esm-cmdb-2014251802547 esm-cmdb-2014
251802547 esm-cmdb-2014
 
Jpeg encoder
Jpeg encoderJpeg encoder
Jpeg encoder
 
Dw124 3-kernel so-injector
Dw124 3-kernel so-injectorDw124 3-kernel so-injector
Dw124 3-kernel so-injector
 
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik Amos
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik AmosFinal Project - 6 Segment Pipeline - Aharon Ofir & Aizik Amos
Final Project - 6 Segment Pipeline - Aharon Ofir & Aizik Amos
 
קורס אנדרואיד
קורס אנדרואידקורס אנדרואיד
קורס אנדרואיד
 
217196516 rt-siem-soc-2010
217196516 rt-siem-soc-2010217196516 rt-siem-soc-2010
217196516 rt-siem-soc-2010
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
217188253 vdi-case-final-2010
217188253 vdi-case-final-2010217188253 vdi-case-final-2010
217188253 vdi-case-final-2010
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
Fire Wall Solutions Final
Fire Wall Solutions FinalFire Wall Solutions Final
Fire Wall Solutions Final
 
מהי אנליזה סטטית?
מהי אנליזה סטטית?מהי אנליזה סטטית?
מהי אנליזה סטטית?
 
335653790 cyber-decisions-2016
335653790 cyber-decisions-2016335653790 cyber-decisions-2016
335653790 cyber-decisions-2016
 
354479451 data-center
354479451 data-center354479451 data-center
354479451 data-center
 

More from Eyal Vardi

Smart Contract
Smart ContractSmart Contract
Smart ContractEyal Vardi
 
Angular 2 Architecture
Angular 2 ArchitectureAngular 2 Architecture
Angular 2 ArchitectureEyal Vardi
 
Proxies in ECMAScript 6.0
Proxies in ECMAScript 6.0Proxies in ECMAScript 6.0
Proxies in ECMAScript 6.0Eyal Vardi
 
Iterators & Generators in ECMAScript 6.0
Iterators & Generators in ECMAScript 6.0Iterators & Generators in ECMAScript 6.0
Iterators & Generators in ECMAScript 6.0Eyal Vardi
 
Symbols in ECMAScript 6.0
Symbols in ECMAScript 6.0Symbols in ECMAScript 6.0
Symbols in ECMAScript 6.0Eyal Vardi
 
Objects & Classes in ECMAScript 6.0
Objects & Classes in ECMAScript 6.0Objects & Classes in ECMAScript 6.0
Objects & Classes in ECMAScript 6.0Eyal Vardi
 
Scope & Functions in ECMAScript 6.0
Scope & Functions in ECMAScript 6.0Scope & Functions in ECMAScript 6.0
Scope & Functions in ECMAScript 6.0Eyal Vardi
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS InternalEyal Vardi
 
Node.js Spplication Scaling
Node.js Spplication ScalingNode.js Spplication Scaling
Node.js Spplication ScalingEyal Vardi
 
Node.js Socket.IO
Node.js  Socket.IONode.js  Socket.IO
Node.js Socket.IOEyal Vardi
 

More from Eyal Vardi (11)

Why magic
Why magicWhy magic
Why magic
 
Smart Contract
Smart ContractSmart Contract
Smart Contract
 
Angular 2 Architecture
Angular 2 ArchitectureAngular 2 Architecture
Angular 2 Architecture
 
Proxies in ECMAScript 6.0
Proxies in ECMAScript 6.0Proxies in ECMAScript 6.0
Proxies in ECMAScript 6.0
 
Iterators & Generators in ECMAScript 6.0
Iterators & Generators in ECMAScript 6.0Iterators & Generators in ECMAScript 6.0
Iterators & Generators in ECMAScript 6.0
 
Symbols in ECMAScript 6.0
Symbols in ECMAScript 6.0Symbols in ECMAScript 6.0
Symbols in ECMAScript 6.0
 
Objects & Classes in ECMAScript 6.0
Objects & Classes in ECMAScript 6.0Objects & Classes in ECMAScript 6.0
Objects & Classes in ECMAScript 6.0
 
Scope & Functions in ECMAScript 6.0
Scope & Functions in ECMAScript 6.0Scope & Functions in ECMAScript 6.0
Scope & Functions in ECMAScript 6.0
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS Internal
 
Node.js Spplication Scaling
Node.js Spplication ScalingNode.js Spplication Scaling
Node.js Spplication Scaling
 
Node.js Socket.IO
Node.js  Socket.IONode.js  Socket.IO
Node.js Socket.IO
 

Nodejs

  • 1. 1 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com
  • 2. 2 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫תוכן‬‫עניינים‬ ‫רקע‬.........................................................................................................................................................................................3 ‫מהות‬‫הטכנולוגיה‬.....................................................................................................................................................................4 ‫ארכיטקטורה‬........................................................................................................................................................................4 01‫הדיברות‬‫לאורן‬‫מפותחת‬‫הטכנולוגיה‬:..............................................................................................................................5 ‫פיתוח‬‫מונחה‬‫אירועי‬‫קלט‬/‫פלט‬............................................................................................................................................5 ‫יתרונות‬....................................................................................................................................................................................8 ‫חסרונות‬...................................................................................................................................................................................9 ‫התקדמות‬/‫בשלות‬‫הפרויקט‬...................................................................................................................................................01 ‫סיכו‬‫ם‬.....................................................................................................................................................................................00 ‫נספח‬‫א‬:'‫האם‬node.js‫מתאים‬‫לאפליקציה‬‫שלי‬?.....................................................................................................................01 ‫נספח‬‫ב‬:'Node.js vs PHP‫מבחן‬‫עומסים‬..................................................................................................................................03 ‫מקורות‬..................................................................................................................................................................................01
  • 3. 3 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫רקע‬ ‫העשרים‬ ‫בקומה‬‫של‬‫יושב‬ ‫פרנסיסקו‬ ‫בסן‬ ‫שחקים‬ ‫גורד‬‫ת‬‫קבוצה‬‫מתכנתים‬ ‫של‬‫ו‬‫עובד‬‫ת‬‫טכנולוגי‬ ‫על‬‫פיתוח‬ ‫ית‬‫שתשנה‬ ‫חדשה‬, ,‫הנראה‬ ‫ככל‬‫אפליקציות‬ ‫כותבים‬ ‫בה‬ ‫הדרך‬ ‫את‬( ‫אמת‬ ‫זמן‬real-time)‫ה‬ ‫בעולם‬–web‫אלו‬ ‫אפליקציות‬ ‫בה‬ ‫הדרך‬ ‫ואת‬ ‫לה‬ ‫צריכות‬ ‫הן‬ ‫בהן‬ ‫המחשוב‬ ‫ענן‬ ‫לעידן‬ ‫עצמן‬ ‫מתאימות‬‫תרחב‬‫לצורך‬ ‫בהתאם‬ ‫ולגדול‬. ‫קוראים‬ ‫זו‬ ‫לטכנולוגיה‬node.js‫ל‬ ‫המפתחים‬ ‫בקהילת‬ ‫רבים‬ ‫בעיני‬ ‫נחשבת‬ ‫והיא‬-"Ruby on Rails.‫החדש‬ " ‫פיתוח‬node.js‫בשנת‬ ‫החל‬9002‫ע"י‬( ‫דל‬ ‫ראיין‬Ryan Dahl)‫בחברת‬ ‫כמהנדס‬ ‫שהועסק‬Joyent,‫פרנסיסקו‬ ‫מסאן‬‫העוסקת‬ .‫ווירטואליזציה‬ ‫ענן‬ ‫מחשוב‬ ‫בפתרונות‬ ‫פרוייקט‬ ‫מטרת‬node.js:‫היוצר‬ ‫ידי‬ ‫על‬ ‫שנוסחה‬ ‫כפי‬ To provide a purely evented, non-blocking infrastructure to script highly concurrent programs ‫המאפשרים‬ ‫אתרים‬ ‫ליצור‬ ‫הייתה‬ ‫הפרויקט‬ ‫של‬ ‫המקורית‬ ‫מטרתו‬"‫דחיפ‬ ‫יכולות‬"‫מידע‬ ‫ת‬‫מהצד‬ ‫מגיעה‬ ‫הפנייה‬ ‫יוזמת‬ ‫בו‬ ‫(קונספט‬ ‫המידע‬ ‫את‬ ‫המספק‬-server‫המבקש‬ ‫מהצד‬ ‫ולא‬-client). ‫מ‬ ‫על‬ ,‫חדש‬ ‫מבצע‬ ‫על‬ ‫הודעה‬ ‫לדוגמא‬ .‫בעצמו‬ ‫פעולות‬ ‫בביצוע‬ ‫צורך‬ ‫ללא‬ ‫מהשרת‬ ‫חדש‬ ‫מידע‬ ‫לקבל‬ ‫למשתמש‬ ‫המאפשר‬ ‫דבר‬‫ייל‬ ‫חדש‬,.'‫וכד‬ ‫חדשות‬ ‫מבזק‬ ‫על‬ ‫כי‬ ‫אם‬‫כי‬ ‫דל‬ ‫ראיין‬ ‫ציין‬ ‫לאחרונה‬ ‫איתו‬ ‫שבוצע‬ ‫בראיון‬‫למעשה‬‫ה‬ ‫פרוייקט‬ ‫את‬ ‫החל‬ ‫הוא‬node.js‫טובה‬ ‫דרך‬ ‫למצוא‬ ‫מנת‬ ‫על‬ .‫לרשת‬ ‫קובץ‬ ‫של‬ ‫העלאה‬ ‫סטאטוס‬ ‫על‬ ‫המשתמש‬ ‫את‬ ‫לעדכן‬ ‫הפרוייקט‬‫בפועל‬ ‫אך‬ ,‫פתוח‬ ‫כקוד‬ ‫אמנם‬ ‫מפותח‬‫חברת‬Joyent‫המ‬ ‫היא‬‫ממנת‬‫של‬ ‫העיקרית‬‫הפרוייקט‬‫עובדים‬ ‫העסקת‬ ‫ע"י‬ ‫ו‬‫אירועים‬ ‫אירוח‬‫מקצועיים‬.‫המפתחים‬ ‫קהיליית‬ ‫בקרב‬ node.js‫הפך‬‫לאחרונה‬‫לאחד‬‫מ‬‫ה‬Buzzword‫כיום‬ ‫ביותר‬ ‫הנפוצים‬‫ל‬ ‫הפיתוח‬ ‫בעולם‬ ,–web.
  • 4. 4 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫הטכנולוגיה‬ ‫מהות‬ node.js‫שרת‬ ‫צד‬ ‫אפליקציות‬ ‫לפיתוח‬ ‫פתוח‬ ‫בקוד‬ ‫כלים‬ ‫ערכת‬ ‫הוא‬‫ב‬-java script. ‫ב‬ ‫הבחירה‬java script‫(להלן‬js)‫נעשתה‬‫מ‬ ‫דווקא‬‫של‬ ‫כיוון‬-js‫קיים‬ ‫היה‬ ‫לא‬‫העת‬ ‫באותה‬( ‫פלט‬ ‫קלט‬ ‫ממשק‬I/O API)‫ודבר‬ , ‫אפשר‬ ‫זה‬‫קונבנציה‬ ‫הגדרת‬(convention)‫מבוסס‬ ‫פלט‬ ‫קלט‬ ‫ממשק‬ ‫של‬ ‫חדשה‬.‫אירועים‬‫מטרה‬ ‫מתוך‬‫ל‬‫הרצת‬ ‫המשך‬ ‫אפשר‬ .‫שיסתיימו‬ ‫פלט‬ / ‫הקלט‬ ‫לפעולות‬ ‫בהמתנה‬ ‫צורך‬ ‫ללא‬ ‫התוכנית‬ ‫ארכיטקטורה‬ ‫בבסיס‬‫הארכיטקטורה‬‫נמצא‬"‫מנוע‬‫בשם‬ "‫תוכנה‬V81‫של‬ ‫עטיפה‬ ‫מעליו‬ ,node.js‫כגון‬ ‫שונים‬ ‫פרוטוקולים‬ ‫למימוש‬socket-‫ים‬ ‫ו‬http‫(ב‬-C++‫של‬ ‫הסטנדרטית‬ ‫הספרייה‬ ‫ולמעלה‬ .)node.js‫(ב‬-java script.) ‫ה‬ ‫בשכבת‬–java script‫ל‬ ‫רק‬ ‫לגשת‬ ‫ניתן‬( ‫תהליך‬thread)‫משכב‬ ‫בעוד‬ ,‫הראשי‬‫ו‬‫ת‬‫הבסיס‬‫למספר‬ ‫לגשת‬ ‫ניתן‬‫תהליכים‬ (threads). ‫ה‬ ‫מנגנון‬ ‫של‬ ‫בפועל‬ ‫המימוש‬Asynchronous I/O‫ה‬ ‫בשכבת‬ ‫שונים‬ ‫תהליכים‬ ‫מספר‬ ‫יצירת‬ ‫ע"י‬ ‫ממומש‬-C. ‫איור‬1‫שרת‬ ‫של‬ ‫ארכיטקטורה‬ :node.js 1 ‫בשפת‬ ‫הכתוב‬ ‫קומפילציה‬ ‫מנוע‬C++. ‫קוד‬ ‫לקמפל‬ ‫יודע‬ ‫המנוע‬java script.‫ולהריצו‬ ‫מכונה‬ ‫לשפת‬ .‫כרום‬ ‫בדפדפן‬ ‫גוגל‬ ‫חברת‬ ‫ע"י‬ ‫בשימוש‬ ‫נמצא‬ ‫המנוע‬
  • 5. 5 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com 10‫הדיברות‬‫מפותחת‬ ‫לאורן‬:‫הטכנולוגיה‬ 1.‫מובנית‬ ‫תמיכה‬( ‫החשובים‬ ‫בפרוטוקולים‬:‫דוגמת‬DNS, HTTP, TLS) 9.‫הכל‬ ‫להזרים‬(Streaming)‫מידע‬ ‫לחצוץ‬ ‫לא‬ ‫לעולם‬ ,(buffering)–‫בחוצצים‬ ‫נאגר‬ ‫ולא‬ ‫הלאה‬ ‫זורם‬ ‫הזמן‬ ‫כל‬ ‫המידע‬ .‫יותר‬ ‫מאוחר‬ ‫בשלב‬ ‫להישלח‬ ‫מנת‬ ‫על‬ 3.‫בפלטפורמה‬ ‫תלות‬ ‫אי‬ 4.‫על‬ ‫שמירה‬‫רישיון‬‫פתוח‬ ‫קוד‬"‫פשוט‬" 5.‫מועטות‬ ‫תלויות‬–‫בספריות‬ ‫צורך‬ ‫אין‬‫את‬ ‫להריץ‬ ‫מנת‬ ‫על‬ ‫רבות‬ ‫חיצוניות‬‫אפליקציה‬‫ב‬ ‫הכתובה‬node.js 6.‫סטאטי‬ ‫קישור‬–‫מקובץ‬ ‫חלק‬ ‫להיות‬ ‫הופך‬ ‫והוא‬ ‫התשתית‬ ‫מן‬ ‫חלק‬ ‫שאיננו‬ ‫הקוד‬ ‫לכל‬ ‫קישור‬ ‫מתבצע‬ ‫הקומפילציה‬ ‫בזמן‬ .‫הריצה‬ 7.‫פונקציה‬ ‫אף‬‫אינה‬‫קלט/פלט‬ ‫פעולות‬ ‫לבצע‬ ‫אמורה‬‫ישירות‬‫תהליך‬ ‫דרך‬ ‫אלא‬Callback‫ריצת‬ ‫המשך‬ ‫לאפשר‬ ‫מנת‬ ‫על‬ ‫הקלט/פל‬ ‫פעולות‬ ‫לסיום‬ ‫המתנה‬ ‫ללא‬ ‫התוכנית‬.)‫בהמשך‬ ‫הרחבה‬ ‫(ראה‬ ‫ט‬ 8.‫ה‬ ‫(שכבת‬ ‫שמתחת‬ ‫מהשכבה‬ ‫פונקציונליות‬ ‫להסיר‬ ‫לא‬nterfaceIystemSperatingOportable-POSIX)– ‫של‬ ‫שונות‬ ‫גרסאות‬ ‫על‬ ‫זהה‬ ‫בצורה‬ ‫פעולות‬ ‫ביצוע‬ ‫שמאפשרת‬ ‫השכבה‬.‫יוניקס‬ 2.‫תמיכה‬‫ויכולות‬ ‫בתכונות‬‫של‬HTML‫כגון‬: o( ‫בחלקים‬ ‫קידוד‬Chunked encoding) o( ‫מקושרות‬ ‫הודעות‬Pipelined messages)–‫חיבור‬ ‫באמצעות‬ ‫בקשות‬ ‫מספר‬ ‫לקבל‬ ‫יכול‬ ‫השרת‬ ‫בה‬ ‫טכניקה‬ TCP.‫הבקשות‬ ‫התקבלו‬ ‫בו‬ ‫בסדר‬ ‫תשובה‬ ‫בהחזרת‬ ‫צורך‬ ‫ללא‬ ,‫יחיד‬ o‫תמיכה‬‫ב‬‫אפליקציות‬‫במודל‬ ‫המשתמשות‬COMET,‫ללא‬ ,‫בדחיפה‬ ‫למשתמש‬ ‫מהשרת‬ ‫מועבר‬ ‫המידע‬ ‫בהן‬ ‫ישירה‬ ‫בקשה‬. 10.‫ה‬–API‫למפתחי‬ ‫מוכר‬ ‫להיות‬ ‫צריך‬java script‫למשתמ‬ ‫וכן‬ .‫הלקוח‬ ‫בצד‬‫ש‬‫י‬unix. ‫ה‬ ‫הדיבר‬-11‫שהינו‬ ‫מוצר‬ ‫לאפשר‬ ‫הינו‬ ‫במימוש‬ ‫מקפידים‬ ‫עליו‬‫לפיתוח‬ ‫כיף‬. ‫מונחה‬ ‫פיתוח‬‫פלט‬ / ‫קלט‬ ‫אירועי‬ node.js‫של‬ ‫בצורה‬ ‫עובד‬‫קלט‬ ‫אירועי‬/( ‫פלט‬Evented I/O‫או‬Asynchronous I/O)‫שמאפשר‬ ‫מה‬ .‫ריצה‬‫יותר‬ ‫יעילה‬‫של‬ ‫התוכניות‬.'‫לדוג‬‫המתנה‬ ‫בעת‬‫ל‬‫פעולת‬ ‫סיום‬I/O‫אחרות‬ ‫פעולות‬ ‫לבצע‬ ‫ניתן‬.‫ממ‬ ‫בד"כ‬ ‫אחרות‬ ‫שרת‬ ‫בשפות‬‫מ‬‫זו‬ ‫פעולה‬ ‫שים‬ ‫הוספת‬ ‫באמצעות‬listener-‫ים‬.‫הקוד‬ ‫בקריאות‬ ‫ופוגם‬ ‫נוסף‬ ‫קוד‬ ‫כתיבת‬ ‫שדורש‬ ‫מה‬ ‫פי‬‫אירועי‬ ‫מונחה‬ ‫תוח‬‫קלט/פלט‬:‫חלקים‬ ‫שני‬ ‫ישנם‬ ‫האפליקציה‬ ‫של‬ ‫המרכזית‬ ‫הלולאה‬ ‫שבתוך‬ )‫מופשטת‬ ‫(בצורה‬ ‫משמעותו‬‫גילוי‬ ‫אירוע‬‫ו‬‫באירוע‬ ‫טיפול‬. ‫אירוע‬ ‫שמתגלה‬ ‫ברגע‬,‫בו‬ ‫לטפל‬ ‫מתחילה‬ ‫האפליקציה‬,‫במקביל‬ .‫האירועים‬ ‫גילוי‬ ‫של‬ ‫הלולאה‬‫ו‬ ‫לעבוד‬ ‫ממשיכה‬‫לגלות‬ ‫יכולה‬ ‫גם‬ ‫לטפל‬ ‫ולהתחיל‬ ‫חדש‬ ‫אירוע‬‫לדוג‬ .‫לרוץ‬ ‫ממשיכה‬ ‫שהמערכת‬ ‫לפני‬ ‫מסויים‬ ‫חלק‬ ‫של‬ ‫לסיום‬ ‫המתנה‬ ‫אין‬ .‫בו‬,‫מא‬‫קובץ‬ ‫נבקש‬ ‫אם‬ ,‫מסוים‬‫בקשה‬ ‫תשלח‬ ‫המערכת‬( ‫הקובץ‬ ‫אותו‬ ‫את‬ ‫להביא‬fetch).‫בו‬ ‫תטפל‬ ‫היא‬ ‫יחזור‬ ‫שהקובץ‬ ‫ברגע‬ .‫הלאה‬ ‫לרוץ‬ ‫ותמשיך‬ ‫ההבדלים‬ ‫את‬ ‫לראות‬ ‫ניתן‬‫בשיט‬‫ו‬‫הפעולה‬ ‫ת‬‫של‬Synchronous I/O‫ו‬-A-Synchronous I/O,:‫הבא‬ ‫בתרשים‬
  • 6. 6 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫קלט‬ ‫פעולת‬ ‫המתאר‬ ,‫העליון‬ ‫בחלק‬/‫בזמן‬ ,‫סינכרונית‬ ‫פלט‬T1-T2,‫עושה‬ ‫שהמערכת‬ ‫מה‬ ‫כל‬ )‫הזמן‬ ‫את‬ ‫מייצג‬ ‫האמצעי‬ ‫(הציר‬ .‫במקביל‬ ‫אחר‬ ‫דבר‬ ‫שום‬ ‫קורה‬ ‫ולא‬ ,‫פלט‬ / ‫בקלט‬ ‫טיפול‬ ‫הינו‬ ‫קלט‬ ‫פעולת‬ ‫לבצע‬ ‫ביקשה‬ ‫שהמערכת‬ ‫לראות‬ ‫ניתן‬ ,‫אסינכרונית‬ ‫פלט‬ / ‫קלט‬ ‫פעולת‬ ‫המתאר‬ ‫התחתון‬ ‫בחלק‬/‫בתהליך‬ ‫שרצה‬ ‫פלט‬ ‫(אין‬ ‫לרוץ‬ ‫ממשיכה‬ ‫המערכת‬ ‫הראשי‬ ‫ובתהליך‬ ,‫נפרד‬‫קיטוע‬.)‫הראשי‬ ‫התהליך‬ ‫את‬ ‫שמייצג‬ ‫העליון‬ ‫בקו‬ ‫איור‬9‫אסינכרוני‬ ‫פלט‬ / ‫קלט‬ ‫לעומת‬ )‫(למעלה‬ ‫סינכורני‬ ‫פלט‬ / ‫קלט‬ :
  • 7. 7 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫הבאה‬ ‫הקוד‬ ‫בדוגמת‬ ‫זאת‬ ‫נמחיש‬: ,‫הבאים‬ ‫הקוד‬ ‫קטעי‬ ‫שני‬‫ב‬ ‫אחד‬PHP‫ב‬ ‫ואחד‬js‫עבור‬node.js,‫מקובץ‬ ‫קריאה‬ ‫שבבסיסה‬ ‫פעולה‬ ‫אותה‬ ‫מבצעים‬sample.txt ‫(שורה‬3‫ה‬ ‫בקטע‬PHP‫ושורות‬3,4‫ב‬ ‫הקוד‬ ‫בקטע‬node.js).‫השורה‬ ‫רשומה‬ ‫בקובץ‬–“sample txt file”. ‫ב‬ ‫הקוד‬ ‫קטע‬ ‫את‬ ‫שמריצים‬ ‫שברגע‬ ‫לראות‬ ‫ניתן‬js‫הקובץ‬ ‫קריאת‬ ‫שאחרי‬ ‫השורה‬ ,‫(שורה‬7).‫הקובץ‬ ‫תוכן‬ ‫לפני‬ ‫נכתבת‬ ‫פעולת‬ ‫מבצעים‬ ‫שכאשר‬ ‫היא‬ ‫הסיבה‬I/O‫ב‬-js.‫בינתיים‬ ‫לרוץ‬ ‫ממשיכה‬ ‫התוכנית‬‫התוכניות‬ ‫שפלט‬ ‫הסיבה‬ ‫וזו‬‫במסגרת‬ ‫(מופיע‬ Output).‫שונה‬ 1.<?php 2.echo "Startingn"; 3.$contents = 4.file_get_contents("sample.txt"); 5.echo "contents of file: " . $contents; 6.echo "Finished. 7.?> 1.var fs = require("fs"); 2.console.log("Starting"); 3.fs.readFile("sample.txt", function(error, 4.data) { 5. console.log("contents of file: " + data); 6.}); 7.console.log("Finished") Output: Starting contents of file: sample txt file Finished Output: Starting Finished contents of file: sample txt file ‫איור‬3‫ב‬ ‫קוד‬ ‫קטע‬ :PHP‫לעומת‬node.js
  • 8. 8 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫יתרונות‬ ‫ב‬ ‫השימוש‬-node.js‫בחובו‬ ‫טומן‬:‫מרכזיים‬ ‫יתרונות‬ ‫מספר‬ 1.‫עם‬ ‫העבודה‬ ‫עקב‬ ‫גבוהים‬ ‫ביצועים‬js.‫קלט/פלט‬ ‫אירועי‬ ‫מונחית‬ ‫הפיתוח‬ ‫ושיטת‬ 9.‫אחידה‬ ‫שפה‬(js)‫שימוש‬ ‫שמאפשר‬ ‫מה‬ ,‫השרת‬ ‫ובצד‬ ‫הלקוח‬ ‫בצד‬‫חוזר‬‫גם‬ ‫הלקוח‬ ‫בצד‬ ‫שנכתב‬ ‫בקוד‬‫עבור‬‫השרת‬ ‫צד‬ ‫ולהפך‬‫הדבר‬ .‫מיותר‬ ‫קוד‬ ‫כתיבת‬ ‫חוסך‬‫החל‬ ‫כתיבת‬ ‫עבור‬ ‫ייחודי‬ ‫בכ"א‬ ‫צורך‬ ‫וחוסך‬ ,‫השונים‬ ‫קים‬‫ו‬ ‫מאחר‬‫להכיר‬ ‫צורך‬ ‫אין‬ .‫שפות‬ ‫מספר‬‫ה‬ ‫כן‬ ‫כמו‬‫דבר‬‫שמכי‬ ‫יותר‬ ‫אינטגרטיבי‬ ‫בצוות‬ ‫עבודה‬ ‫מאפשר‬‫ר‬‫שני‬ ‫את‬‫צדי‬.‫האפליקציה‬ 3.‫אירועי‬ ‫מונחה‬ ‫פיתוח‬‫מאפשר‬ ‫קלט/פלט‬‫במקביל‬ ‫פעולות‬ ‫ביצוע‬‫שה‬ ‫כך‬‫משתפרים‬ ‫ביצועים‬‫קטנה‬ ‫המשאבים‬ ‫וצריכת‬. ‫עם‬ ‫בעבודה‬ ‫מיוחדת‬ ‫בהיכרות‬ ‫צורך‬ ‫ללא‬ ‫במקביל‬ ‫פעולות‬ ‫לבצע‬ ‫ניתן‬Thread-.‫ים‬ 4.‫של‬ ‫הבקבוק‬ ‫צוואר‬ ‫הינו‬ ‫הנתונים‬ ‫לבסיס‬ ‫האפליקציה‬ ‫שרת‬ ‫בין‬ ‫הפנימית‬ ‫התקשורת‬ ‫מסורתיות‬ ‫פיתוח‬ ‫בשפות‬ .‫האפליקציות‬node.js‫צורך‬ ‫פי‬ ‫על‬ ‫משאבים‬ ‫מקצה‬ ‫שהוא‬ ‫כך‬ ‫יד‬ ‫על‬ ‫האפליקציה‬ ‫שרת‬ ‫על‬ ‫נמוכה‬ ‫רגל‬ ‫טביעת‬ ‫מאפשר‬ .‫מראש‬ ‫משאבים‬ ‫של‬ ‫גדולה‬ ‫כמות‬ ‫להקצות‬ ‫במקום‬ ‫לדוגמה‬‫להקצות‬ ‫עשוי‬ ‫אפאצ'י‬ ‫בהן‬ ‫במקומות‬mb8,‫משתמש‬ ‫עבור‬ ‫זיכרון‬node.js‫להקצות‬ ‫עשוי‬kb8‫בלבד‬. node.js‫הנתונים‬ ‫מבסיס‬ ‫לתשובה‬ ‫מחכה‬ ‫שהשרת‬ ‫בזמן‬ .‫ההמתנה‬ ‫בזמן‬ ‫משאבים‬ ‫מקצה‬ ‫לא‬ ‫שהוא‬ ‫כך‬ ‫ע"י‬ ‫זאת‬ ‫מאפשר‬ ‫זה‬ ‫דבר‬ .‫התשובה‬ ‫לעיבוד‬ ‫משאבים‬ ‫מקצה‬ ‫השרת‬ ‫מגיב‬ ‫הנתונים‬ ‫בסיס‬ ‫כאשר‬ ‫ורק‬ ‫אחרות‬ ‫פעולות‬ ‫בביצוע‬ ‫ממשיך‬ ‫הוא‬ .‫במקביל‬ ‫בקשות‬ ‫של‬ ‫יותר‬ ‫רב‬ ‫מספר‬ ‫עיבוד‬ ‫מאפשר‬ 5.Java script‫פופולרית‬ ‫שפה‬ ‫הינה‬.‫בקלות‬ ‫הטכנולוגיה‬ ‫את‬ ‫מכירים‬ ‫אשר‬ ‫מפתחים‬ ‫למצוא‬ ‫שמאפשר‬ ‫מה‬ .‫מאוד‬ ‫ונפוצה‬ 6.Java script‫שפה‬ ‫הינה‬‫ב‬ ‫יעילה‬‫עם‬ ‫עבודה‬Json-‫ים‬‫ו‬ )‫נתונים‬ ‫לייצוג‬ ‫(סטנדרט‬‫כתיבת‬ ‫מאפשר‬ ‫זה‬ ‫דבר‬API‫בקלות‬, .‫טבעית‬ ‫ובצורה‬ ‫במהירות‬ 7.‫יכולות‬‫להתרחבות‬‫בקלות‬ ‫גדול‬ ‫משתמשים‬ ‫למספר‬(scalable.)
  • 9. 9 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫חסרונות‬ ‫יחסית‬ ‫צעירה‬ ‫הטכנולוגיה‬: ‫מישורים‬ ‫בכמה‬ ‫שמשפיע‬ ‫מה‬ , o‫קהילה‬‫יחסית‬ ‫מצומצמת‬-.‫בעיות‬ ‫כשיש‬ ‫תמיכה‬ ‫קבלת‬ ‫על‬ ‫מקשה‬ o‫מקורות‬‫לימוד‬‫איכותיים‬‫מצומצמים‬. o‫מיעוט‬‫תשתיות‬‫הטכנולוגיה‬ ‫בסיס‬ ‫על‬ ‫אפליקטיביות‬ .‫והתנסות‬ ‫למידה‬ ‫מחייב‬ ‫קלט/פלט‬ ‫אירועי‬ ‫מונחית‬ ‫בשיטה‬ ‫פיתוח‬ Node.js‫באמצעות‬ ‫רץ‬process(‫תהליך‬)‫ו‬ ‫אחד‬thread)‫(תהליכון‬‫שלו‬ ‫ההתרחבות‬ ‫על‬ ‫שמקשה‬ ‫מה‬ ,‫אחד‬ (scalable.‫ליבות‬ ‫מרובי‬ ‫שרתים‬ ‫עבור‬ ‫)יות‬ ‫לקוח‬ ‫צד‬ ‫ופיתוח‬ ‫שרת‬ ‫צד‬ ‫פיתוח‬‫זהה‬ ‫בשפה‬–‫זהו‬‫אמנם‬‫ש‬ ‫מכיוון‬ ‫חיסרון‬ ‫גם‬ ‫אך‬ ‫יתרון‬‫לרוב‬‫איתם‬ ‫האתגרים‬ ‫הלקוח‬ ‫ובצד‬ ‫השרת‬ ‫בצד‬ ‫מתמודדים‬.‫אחרות‬ ‫פיתוח‬ ‫וטכנולוגיות‬ ‫מתודולוגיות‬ ‫נדרשות‬ ‫דווקא‬ ‫ולעיתים‬ ,‫שונים‬ ‫הנם‬ ,‫לסיכום‬‫היא‬ ‫האם‬ ‫לבחון‬ ‫תוכלו‬ '‫א‬ ‫בנספח‬ .‫ספציפיים‬ ‫ליישומים‬ ,‫לפחות‬ ‫בינתיים‬ ,‫מתאימה‬ ‫החדשה‬ ‫הטכנולוגיה‬ ‫כי‬ ‫לראות‬ ‫ניתן‬ .‫שלכם‬ ‫היישום‬ ‫עבור‬ ‫מתאימה‬
  • 10. 10 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫הפרויקט‬ ‫בשלות‬ / ‫התקדמות‬ ‫לבחור‬ ‫הולך‬ ‫גוף‬ ‫כאשר‬,‫טכנולוגיה‬‫פיתוח‬ ‫טכנולוגיית‬ ‫ובפרט‬ ,‫בכלל‬‫הוא‬ ‫המרכזיים‬ ‫הפרמטרים‬ ‫אחד‬‫בו‬ ‫והאופן‬ ‫הפרוייקט‬ ‫בשלות‬ ,‫טוב‬ ‫כנראה‬ ‫שהוא‬ ‫סימן‬ ,'‫וכד‬ ‫לפרוייקט‬ )‫קוד‬ ‫(בעיקר‬ ‫תורמים‬ ,‫יותר‬ ‫טובה‬ ‫קהילה‬ ,‫משתמשים‬ ‫יותר‬ ‫שישנם‬ ‫ככל‬ .‫מתפתח‬ ‫הוא‬ .‫ויציב‬ ‫כד‬ ‫פתוח‬ ‫קוד‬ ‫טכנולוגיית‬ ‫בשלות‬ ‫על‬ ‫המעידים‬ ‫המדדים‬ ‫אחד‬‫וגמת‬node.js‫ה‬ ‫פעולות‬ '‫מס‬ ‫הוא‬–commit‫המתבצעות‬ .‫הפיתוח‬ ‫בסביבת‬ ‫ה‬‫הבאים‬ ‫גרפים‬‫המתארים‬ ,‫מעידים‬ ‫זאת‬‫שוטף‬ ‫באופן‬ ‫מתפתח‬ ‫הפרויקט‬ ‫כי‬‫ו‬‫בשימוש‬ ‫נמצא‬‫גדולה‬ ‫קהילה‬ ‫על‬ ‫שמעיד‬ ‫מה‬ ,‫גבוה‬ .‫שהתגלו‬ ‫ולבעיות‬ ‫בשוק‬ ‫לשינויים‬ ‫בהתאם‬ ‫המתפתח‬ ‫דינאמי‬ ‫פרויקט‬ ‫ועל‬ ‫ופעילה‬ ‫איור‬4‫מספר‬ :‫ה‬ ‫פעולות‬-Commit‫בפרויקט‬node.js–‫בכתום‬ ‫והתחתון‬ ‫הפרויקט‬ ‫תקופת‬ ‫כל‬ ‫את‬ ‫מייצג‬ ‫בירוק‬ ‫העליון‬ ‫החלק‬ ‫האחרונה‬ ‫השנה‬ ‫את‬.
  • 11. 11 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫סיכום‬ node.js‫בשנת‬ ‫במיוחד‬ ‫לפופולרי‬ ‫הפך‬9010‫כמו‬ ‫כמעט‬ ‫פופולריות‬ ‫תופס‬ ‫ומאז‬ ,Ruby On Rails‫פיתוח‬ ‫(טכנולוגיית‬web )‫נוספת‬.‫כי‬ ‫נראה‬‫שה‬ ‫מכיוון‬-framework‫שפת‬ ‫בסיס‬ ‫על‬ ‫נכתב‬java script,‫נמוכים‬ ‫אליו‬ ‫הכניסה‬ ‫חסמי‬ ,‫הנפוצה‬ ‫אפליקציות‬ ‫עבור‬ ‫בו‬ ‫לשימוש‬ ‫והמוטיבציה‬real time / near real time.‫גבוהה‬ ‫הינה‬ ‫ה‬ ‫שורשי‬ .‫הטכנולוגיה‬ ‫משתמשי‬ ‫קהילת‬ ‫בקרב‬ ‫התלהבות‬ ‫קיימת‬ ‫עתה‬ ‫שעד‬ ‫נראה‬-frameworks‫ב‬-java script‫גם‬ ‫פונים‬ ‫למפתחי‬‫ו‬‫מעצבי‬‫תוכנה‬‫ה‬ ‫לעולם‬ ‫נכנסו‬ ‫עתה‬ ‫שזה‬-web‫למפתחים‬ ‫וכן‬‫מנוסים‬‫המחפשים‬‫אפליקציות‬ ‫לפתח‬ ‫יותר‬ ‫טובה‬ ‫דרך‬ real time. ‫אפליקציית‬ ‫לבנות‬ ‫נכונה‬ ‫אחת‬ ‫דרך‬ ‫שאין‬ ‫היא‬ ‫רבים‬ ‫מפתחים‬ ‫בקרב‬ ‫נפוצה‬ ‫חכמה‬web‫כי‬ ‫נראה‬ ‫אך‬ ,node.js‫ונתפש‬ ‫הולך‬ .‫אפליקציות‬ ‫של‬ ‫מסוים‬ ‫סוג‬ ‫עבור‬ ‫ביותר‬ ‫הטוב‬ ‫כפתרון‬ ‫ב‬ ‫המשתמשת‬ ‫מוכרת‬ ‫חברה‬-node.js‫החברתית‬ ‫הרשת‬ ‫היא‬-‫מקצועית‬–Linkedin‫החברה‬ ‫של‬ ‫הראשי‬ ‫המהנדס‬ .‫מר‬ ,‫קירן‬ ( ‫פרסד‬Kiran Prasad:‫לאחרונה‬ ‫צוטט‬ ) ‫על‬ ‫לגמרי‬ ‫מבוססת‬ ,‫המובייל‬ ‫בגרסת‬ ‫שלנו‬ ‫התוכנה‬ ‫השרת‬ ‫"בצד‬node.‫היא‬ ‫ראשונה‬ ‫סיבה‬‫סקלביל‬‫יות‬(scalability)‫והשנייה‬ ‫ש‬ ‫היא‬node.js."‫ענקיים‬ ‫ביצועים‬ ‫יתרונות‬ ‫לנו‬ ‫הראה‬
  • 12. 12 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com :'‫א‬ ‫נספח‬‫האם‬node.js?‫שלי‬ ‫לאפליקציה‬ ‫מתאים‬ ?‫להשתמש‬ ‫מתי‬ ‫אפליקציות‬near real time–‫ש‬ ‫הביצועים‬ .‫חברתיות‬ ‫רשתות‬ ,‫צ'טים‬ ,‫מידיים‬ ‫מסרים‬ ‫כגון‬node.js‫נותנים‬ ‫מאפשר‬ ‫ש‬ ‫מכיוון‬ ‫להיזהר‬ ‫יש‬ ‫אך‬ ,‫זה‬ ‫מסוג‬ ‫אפליקציות‬ ‫במימוש‬ ‫משמעותי‬ ‫יתרון‬ ‫לו‬java script‫שזמני‬ ‫כך‬ ‫דינאמית‬ ‫שפה‬ ‫היא‬ ‫ה‬ ‫ריצת‬ ‫מזמני‬ ‫מושפעים‬ ‫להיות‬ ‫עלולים‬ ‫התגובה‬garbage collection. ‫אפליקציות‬ ‫עבור‬ ‫לכן‬real time.‫המיטבי‬ ‫הפתרון‬ ‫את‬ ‫לעומק‬ ‫לבחון‬ ‫יש‬ ‫אמיתיות‬ Json API–‫באמצעות‬ ‫גישה‬ ‫אליו‬ ‫ולספק‬ ,‫נתונים‬ ‫מקור‬ "‫"לעטוף‬ ‫רוצה‬ ‫הכל‬ ‫בסך‬ ‫אתה‬ ‫אם‬Json API, node.js ‫של‬ ‫בתצורה‬ ‫לעבוד‬ ‫שלו‬ ‫היכולת‬ ‫בשל‬ ,‫אולטימטיבי‬ ‫פיתרון‬ ‫לספק‬ ‫עשוי‬non-blocking I/O‫של‬ ‫העוצמה‬ ‫עם‬ ‫יחד‬ java script‫ב‬ ‫בטיפול‬–json. ‫עמוד‬ ‫של‬ ‫אפליקציות‬web( ‫אחד‬Single Page App)–‫א‬‫פעולות‬ ‫הרבה‬ ‫שמבצעת‬ ‫אפליקציה‬ ‫בונה‬ ‫אתה‬ ‫ם‬AJAX ,‫הלקוח‬ ‫בצד‬ ‫עיבוד‬ ‫ומבצעת‬ ‫השרת‬ ‫מול‬node.js‫בקשות‬ ‫הרבה‬ ‫לעבד‬ ‫שלו‬ ‫האפשרות‬ ‫בזכות‬ ‫אידיאלי‬ ‫להיות‬ ‫יכול‬ ‫השרת‬ ‫בצד‬ )‫תקינות‬ ‫בדיקות‬ ‫(כגון‬ ‫זהה‬ ‫בקוד‬ ‫להשתמש‬ ‫שלו‬ ‫היכולת‬ ‫גם‬ ‫כי‬ ‫לציין‬ ‫ניתן‬ .‫קצרים‬ ‫תגובה‬ ‫זמני‬ ‫עם‬ ‫במקביל‬ ‫תומכת‬ ‫הלקוח‬ ‫ובצד‬.‫זה‬ ‫מסוג‬ ‫אפליקציות‬ ‫בפיתוח‬ ‫פקודות‬ ‫לעטיפת‬ ‫אפליקציות‬command line–‫של‬ ‫היכולת‬node.js‫שלהם‬ ‫לפלט‬ ‫ולהתייחס‬ ‫רבים‬ ‫בן‬ ‫תהליכי‬ ‫ליצור‬ ‫פקודות‬ ‫עבור‬ ‫יותר‬ ‫ונוחה‬ ‫יפה‬ ‫מעטפת‬ ‫ליצירת‬ ‫לאידיאלי‬ ‫אותו‬ ‫הופך‬ ,"‫מידע‬ ‫של‬ ‫"כזרם‬command line.‫קיימות‬ ‫מידע‬ ‫הזרמת‬–‫לבקשות‬ ‫מתייחסות‬ ‫בד"כ‬ ‫מסורתיות‬ ‫אפליקציות‬http‫אינם‬ ‫הם‬ ‫בפועל‬ ‫אך‬ ,‫אטומיים‬ ‫אירועים‬ ‫כאל‬ ‫של‬ ‫היכולת‬ .‫כאלה‬node.js‫לבקשות‬ ‫להתייחס‬http.‫בתוצאות‬ ‫ניכר‬ ‫לשיפור‬ ‫להביא‬ ‫עשויה‬ ‫אטומיים‬ ‫אירועים‬ ‫כאל‬ .‫שונות‬ ‫מידע‬ ‫שכבות‬ ‫בין‬ ‫גישור‬ ‫או‬ ‫העלאה‬ ‫בזמן‬ ‫קובץ‬ ‫עיבוד‬ ‫בעת‬ ‫לדוגמא‬ ‫להשת‬ ‫לא‬ ‫מתי‬?‫מש‬ ‫טובה‬ ‫סיבה‬ ‫אין‬ ‫פלט‬ ‫קלט‬ ‫פעולות‬ ‫מעט‬ ‫עם‬ ,‫עיבוד‬ ‫בעיקר‬ ‫לעשות‬ ‫נועדה‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬ .‫עיבוד‬ ‫אפליקציות‬ ‫ב‬ ‫להשתמש‬node.js.‫מלאכותית‬ ‫בבינה‬ ‫שימוש‬ ‫העושות‬ ‫ואפליקציות‬ ‫בוידאו‬ )‫(רינדור‬ ‫לטיפול‬ ‫אפליקציות‬ :'‫לדוג‬ . ‫אפליקציות‬CRUD (create, read, update, delete)‫עם‬HTML–‫מבצעת‬ ‫בעיקר‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬ ‫בעזרת‬ ‫הנתונים‬ ‫את‬ ‫ומציגה‬ ,‫נתונים‬ ‫בסיס‬ ‫מול‬ ‫פעולות‬HTML‫ל‬ ‫אין‬ ‫זה‬ ‫בשלב‬ .node.js‫פני‬ ‫על‬ ‫משמעותי‬ ‫יתרון‬ ‫כגון‬ ‫אחרות‬ ‫טכנולוגיות‬Rails‫או‬PHP‫בסיס‬ ‫על‬ ‫מתקדמות‬ ‫אפליקטיביות‬ ‫תשתיות‬ ‫עדיין‬ ‫אין‬ ‫כי‬ ‫העובדה‬ ‫בשל‬ ‫וזאת‬ node. ‫ב‬ ‫שימוש‬node.js‫ע‬ ‫יחד‬‫רלציוני‬ ‫לא‬ ‫נתונים‬ ‫בסיס‬ ‫ם‬–‫מושגי‬ ‫של‬ ‫בישול‬ ‫ספר‬ ‫כמו‬ ‫נראית‬ ‫שלך‬ ‫האפליקציה‬ ‫אם‬ noSQL DB‫עם‬ ‫יחד‬ ‫זאת‬ ‫לערבב‬ ‫האם‬ ‫שוב‬ ‫שתשקול‬ ‫כדאי‬node‫שאינך‬ ‫טכנולוגיות‬ ‫במספר‬ ‫שימוש‬ ‫כי‬ ‫היא‬ ‫כוונתי‬ . ...‫לפרוייקט‬ ‫משמעותי‬ ‫סיכון‬ ‫להוות‬ ‫עשויה‬ ,‫טוב‬ ‫מספיק‬ ‫מכיר‬
  • 13. 13 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com :'‫ב‬ ‫נספח‬Node.js vs PHP‫עומסים‬ ‫מבחן‬ ‫בין‬ ‫השוואה‬ ‫בוצעה‬ ‫הבא‬ ‫בניסוי‬Node.js‫לבין‬PHP(Apache2‫ו‬–(mod_php‫שזוהי‬ ‫כיוון‬ ,‫כך‬ ‫בוצעה‬ ‫ההשוואה‬ . ‫ב‬ ‫בשימוש‬ ‫ביותר‬ ‫הנפוצה‬ ‫הארכיטקטורה‬-PHP‫ב‬ ‫שימוש‬ ‫ידי‬ ‫על‬ ‫יותר‬ ‫טובים‬ ‫ביצועים‬ ‫לקבל‬ ‫שניתן‬ )‫שבצדק‬ ‫(ייתכן‬ ‫שיגידו‬ ‫יש‬ . Nginx or Lighthttpd‫כשרת‬HTTP‫עבור‬PHP‫דבר‬ ‫של‬ ‫בסופו‬ .PHP‫זה‬ ‫ואין‬ ,‫ונפרדים‬ ‫רבים‬ ‫בתהליכים‬ ‫רץ‬ ‫השרת‬ ‫בצד‬ ( ‫אותם‬ ‫שיצרה‬ ‫המכניקה‬ ‫מה‬ ‫משנה‬mod_php‫או‬fastcgi‫מכניקה‬ ‫או‬‫לארכיטקטורה‬ ‫ניצמד‬ ‫ההשוואה‬ ‫לשם‬ ‫לכן‬ .)‫אחרת‬ .‫הנפוצה‬ ‫הניסוי‬ ‫סביבת‬ ‫הניסוי‬ ‫לצורך‬‫נכתבה‬‫ב‬ ‫פשוטה‬ ‫אפליקציה‬–java script‫וב‬–php5‫שולפת‬ ‫האפליקציה‬ .50‫מ‬ ‫שורות‬–wordpress )‫פתוח‬ ‫בקוד‬ ‫בלוגים‬ ‫(סביבת‬‫בצורת‬ ‫החוצה‬ ‫המידע‬ ‫את‬ ‫ומייצאת‬json‫לא‬ ‫שאנו‬ ‫כיוון‬ ‫היא‬ ‫פשוטה‬ ‫שהאפליקציה‬ ‫לכך‬ ‫הסיבה‬ . ‫העיקרית‬ ‫שהמטרה‬ ‫וכן‬ ,‫השפות‬ ‫בין‬ ‫מימוש‬ ‫להבדלי‬ ‫להיכנס‬ ‫רוצים‬‫היא‬‫להשוות‬‫הארכיטקטורה‬ ‫את‬‫בין‬‫הפיתוח‬ ‫טכנולוגיות‬‫ולא‬ .‫הקוד‬ ‫איכות‬ ‫את‬ ‫חומרה‬: :‫הבא‬ ‫המפרט‬ ‫בעל‬ ‫וירטואלי‬ ‫שרת‬  1 x Core Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz  2 Gb RAM.  OS is 64 Bit Ubuntu 12.10 installed fresh before running these tests.  We installed the Load Impact Server metric agent. ‫תוכנה‬:  Apache/2.2.22 and  PHP 5.4.6.  Node.js version 0.8.18 (built using this script)  MySQL is version 5.5.29.  The data table in the tests is the options table from a random WordPress blog.
  • 14. 14 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com :‫שרצו‬ ‫הקוד‬ ‫קטעי‬ // Include http module, var http = require('http'), mysql = require("mysql"); // Create the connection. // Data is default to new mysql installation and should be changed according to your configuration. var connection = mysql.createConnection({ user: "wp", password: "****", database: "random" }); // Create the http server. http.createServer(function (request, response) { // Attach listener on end event. request.on('end', function () { // Query the database. connection.query('SELECT * FROM wp_options limit 50;', function (error, rows, fields) { response.writeHead(200, { 'Content-Type': 'text/html' }); // Send data as JSON string. // Rows variable holds the result of the query. response.end(JSON.stringify(rows)); }); }); // Listen on the 8080 port. }).listen(8080); <!--?php $db = new PDO('mysql:host=localhost;dbname=*****', 'wp', '*****'); $all= $db--->query('SELECT * FROM wp_options limit 50;')->fetchAll(); echo json_encode($all);
  • 15. 15 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫הניסוי‬ ‫אופן‬: ‫בדפדפן‬ ‫משתמשים‬ ‫של‬ ‫דימוי‬ ‫כלל‬ ‫הניסוי‬ ‫מ‬ ‫היה‬ ‫במשתמשים‬ ‫הגידול‬–0-500‫של‬ ‫זמן‬ ‫בפרק‬ ‫משתמשים‬5.‫דקות‬ .‫גיאוגרפית‬ ‫אחד‬ ‫ממקום‬ ‫הגיעו‬ ‫הבקשות‬ ‫כל‬ ‫תוצאות‬: ‫איור‬5‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :node.js ‫איור‬6‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :PHP :‫מקרא‬ ‫ה‬ ‫את‬ ‫מייצג‬CPU‫של‬ ‫השרת‬ ‫מספר‬ ‫את‬ ‫מייצג‬ ‫המשתמשים‬ ‫את‬ ‫מייצג‬‫התגובה‬ ‫זמני‬
  • 16. 16 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫התוצאות‬ ‫ניתוח‬: ‫שב‬ ‫לראות‬ ‫ניתן‬ ‫בגרפים‬node.js‫על‬ ‫בערך‬ ‫ועומד‬ ‫הניסוי‬ ‫כל‬ ‫לאורך‬ ‫יציב‬ ‫התגובה‬ ‫זמן‬900‫ב‬ ‫בעוד‬ ,‫שניות‬ ‫מילי‬PHP‫בנקודה‬ ‫מסוימת‬‫ב‬ ‫(בערך‬-400‫ה‬ ‫קו‬ ‫את‬ ‫שחצה‬ ‫עד‬ ‫גבוה‬ ‫בקצב‬ ‫לעלות‬ ‫התחיל‬ ‫הוא‬ )‫משתמשים‬–400.‫שניות‬ ‫מילי‬ :‫להבדלים‬ ‫הסיבה‬ ‫ה‬ ‫עמוד‬ ‫את‬ ‫טוען‬ ‫האפאצ'י‬ ‫כאשר‬PHP‫בו‬ ‫אחת‬ ‫בבקשה‬ ‫רק‬ ‫לטפל‬ ‫יכול‬ ‫הבן‬ ‫תהליך‬ .‫בבקשה‬ ‫שיטפל‬ ‫בן‬ ‫לתהליך‬ ‫זאת‬ ‫משאיר‬ ‫הוא‬ ‫בשרת‬ .‫לחכות‬ ‫צריכות‬ ‫האחרות‬ ‫מאחת‬ ‫יותר‬ ‫יש‬ ‫אם‬ ‫ולכן‬ ‫זמנית‬‫של‬ ‫פרמטר‬ ‫באפאצ'י‬ ‫הוגדר‬ ‫הניסוי‬ ‫בוצע‬ ‫עליו‬MaxClients ‫להיות‬956‫(במקום‬150)‫מחדל‬ ‫כברירת‬ ‫שמוגדר‬‫להיווצר‬ ‫יכולים‬ ‫כלומר‬ .956‫זה‬ ‫אך‬ ,‫הפרמטר‬ ‫ערך‬ ‫את‬ ‫להגדיל‬ ‫ניתן‬ .‫בן‬ ‫תהליכי‬ ( ‫זיכרון‬ ‫לבעיות‬ ‫להוביל‬ ‫עלול‬RAM‫לבין‬ ‫במקביל‬ ‫שמטופלות‬ ‫הבקשות‬ ‫מספר‬ ‫בין‬ ‫האיזון‬ ‫את‬ ‫למצוא‬ ‫צריך‬ ‫ולכן‬ )‫של‬ ‫הזיכרון‬ ‫כמות‬ . ‫השרת‬ ‫ב‬node.js‫ב‬ ‫בערך‬ ‫מהירה‬ ,‫עצמה‬ ‫בפני‬ ‫בקשה‬ ‫כל‬–30%‫ב‬ ‫מאשר‬ ‫יותר‬PHP‫זו‬ ‫בסיסית‬ ‫בקונפיגורציה‬ ‫לכן‬ .node‫מהיר‬ ‫אכן‬ ‫ב‬ ‫בנוסף‬ .‫יותר‬node‫הבן‬ ‫תהליכי‬ ‫ובין‬ ,‫השונים‬ ‫התהליכים‬ ‫בין‬ ‫בתקשורת‬ ‫צורך‬ ‫אין‬ ‫ולכן‬ .‫השרת‬ ‫על‬ ‫אחד‬ ‫בתהליך‬ ‫רץ‬ ‫הכל‬ ‫שצרי‬ ‫(כפי‬ ‫האב‬ ‫לתהליך‬‫ב‬ ‫ך‬PHP‫בנוסף‬ .)node.‫זיכרון‬ ‫צריכת‬ ‫מבחינת‬ ‫יותר‬ ‫יעיל‬PHP‫דורש‬overhead‫יותר‬ ‫גבוה‬ ‫מספר‬ ‫עבור‬ ‫בעוד‬ ,‫במקביל‬ ‫בקשות‬ ‫של‬node.‫הבקשות‬ ‫בין‬ ‫שלו‬ ‫הזיכרון‬ ‫מרבית‬ ‫את‬ ‫משתף‬ ‫ה‬ ‫צריכת‬ ‫המקרים‬ ‫שבשני‬ ,‫לב‬ ‫לשים‬ ‫חשוב‬ ‫בנוסף‬CPU‫מ‬ ‫(פחות‬ ‫משמעותי‬ ‫גורם‬ ‫היוותה‬ ‫לא‬–5%‫כלומר‬ ,)‫המקרים‬ ‫בשני‬‫ניסוי‬ .‫הארכיטקטורות‬ ‫בין‬ ‫ההבדלים‬ ‫את‬ ‫בעיקר‬ ‫לבדוק‬ ‫בא‬ ‫זה‬ ‫אם‬node.js....‫טוב‬ ‫כך‬ ‫כל‬ Node.js‫מביא‬‫עמו‬.‫תרבותית‬ ‫מבחינה‬ ‫והן‬ ‫טכנית‬ ‫מבחינה‬ ‫הן‬ ,‫אתגרים‬ ‫גם‬ ‫הטכנית‬ ‫מהבחינה‬-‫בשרת‬ ‫שימוש‬ ‫נעשה‬ ‫זה‬ ‫בניסוי‬‫של‬ ‫לטובתו‬ ‫שמשחק‬ ‫דבר‬ ,‫אחת‬ ‫ליבה‬ ‫בעל‬node‫ש‬ ‫כיוון‬ .node‫על‬ ‫רץ‬ ‫ובו‬ ,‫אחד‬ ‫תהליך‬ ‫באמצעות‬ ‫השרת‬thread.‫ליבות‬ ‫מרובי‬ ‫בשרתים‬ ‫אידיאלית‬ ‫בצורה‬ ‫גדילתו‬ ‫על‬ ‫מקשה‬ ‫הדבר‬ ,‫אחד‬ ‫התרבותית‬ ‫מהבחינה‬–‫ש‬ ‫מכיוון‬node,‫בעצמך‬ ‫קוד‬ ‫יותר‬ ‫הרבה‬ ‫לממש‬ ‫מוכן‬ ‫להיות‬ ‫עליך‬ ,‫נפוץ‬ ‫ממש‬ ‫ולא‬ ‫יחסית‬ ‫צעיר‬ ‫עדיין‬ .‫בעצמך‬ ‫שלך‬ ‫הבעיות‬ ‫את‬ ‫ולפתור‬ ,‫יותר‬ ‫לחקור‬ ‫כמובן‬‫שבחיים‬‫האמתיים‬‫ה‬ ‫מבחינת‬ ‫הן‬ ,‫כאן‬ ‫שראינו‬ ‫הפערים‬ ‫לצמצום‬ ‫טכניקות‬ ‫ישנן‬ ,-PHP‫של‬ ‫היכולת‬ ‫מבחינת‬ ‫והן‬node .‫ליבות‬ ‫מרובי‬ ‫מעבדים‬ ‫על‬ ‫משופרים‬ ‫לביצועים‬
  • 17. 17 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬ shoham.gilad@gmail.com ‫מקורות‬: ‫ישראל‬ ‫אינטרנט‬ ‫אתר‬-israel.com/-http://www.internet-‫לפיתוח‬ ‫המוקדש‬ ‫אתר‬WEB node.jsAn Introduction to-TutsPlus--to-introduction-an-http://tutolearning.com/tutsplus js/-node http://nodejs.org–‫הפרוייקט‬ ‫של‬ ‫הרשמי‬ ‫האתר‬ http://en.wikipedia.org/wiki/Nodejs js-http://mashable.com/2011/03/10/node/-‫כתבות‬ / ‫חדשות‬ ‫פורטל‬ ‫של‬ ‫מצגת‬‫דל‬ ‫ראיין‬)‫הפרוייקט‬ ‫(יוצר‬-http://nodejs.org/cinco_de_node.pdf http://nodeguide.com/convincing_the_boss.html-‫ב‬ ‫לשימוש‬ )‫רשמי‬ ‫(לא‬ ‫מדריך‬node.js http://stackoverflow.com/-‫פיתוח‬ ‫בנושאי‬ ‫ותשובות‬ ‫שאלות‬ ‫אתר‬ vZryQEDVI_A4P6kVye-http://clipboard.com/clip/LQY8YknhoHfI_m8mT-‫מי‬ ‫לשיתוף‬ ‫אתר‬‫דע‬ http://www.quora.com–‫מידע‬ ‫לשיתוף‬ ‫אתר‬ youtube - Ryan Dahl - History of node.js http://elegantcode.com–‫טכנולוגיה‬ ‫ואנשי‬ ‫למפתחים‬ ‫בלוגים‬ ‫אתר‬ -node-visualize-to-impact-load-using-php-vs-js-http://blog.loadimpact.com/2013/02/01/node efficency/-js-‫בלוגים‬ ‫אתר‬