Nodejs

801 views

Published on

מאמר על Node.Js שנכתב ע"י גלעד שהם.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
801
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Nodejs

  1. 1. 1 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com
  2. 2. 2 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫תוכן‬‫עניינים‬‫רקע‬.........................................................................................................................................................................................3‫מהות‬‫הטכנולוגיה‬.....................................................................................................................................................................4‫ארכיטקטורה‬........................................................................................................................................................................401‫הדיברות‬‫לאורן‬‫מפותחת‬‫הטכנולוגיה‬:..............................................................................................................................5‫פיתוח‬‫מונחה‬‫אירועי‬‫קלט‬/‫פלט‬............................................................................................................................................5‫יתרונות‬....................................................................................................................................................................................8‫חסרונות‬...................................................................................................................................................................................9‫התקדמות‬/‫בשלות‬‫הפרויקט‬...................................................................................................................................................01‫סיכו‬‫ם‬.....................................................................................................................................................................................00‫נספח‬‫א‬:‫האם‬node.js‫מתאים‬‫לאפליקציה‬‫שלי‬?.....................................................................................................................01‫נספח‬‫ב‬:Node.js vs PHP‫מבחן‬‫עומסים‬..................................................................................................................................03‫מקורות‬..................................................................................................................................................................................01
  3. 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. 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.js1‫בשפת‬ ‫הכתוב‬ ‫קומפילציה‬ ‫מנוע‬C++.‫קוד‬ ‫לקמפל‬ ‫יודע‬ ‫המנוע‬java script.‫ולהריצו‬ ‫מכונה‬ ‫לשפת‬.‫כרום‬ ‫בדפדפן‬ ‫גוגל‬ ‫חברת‬ ‫ע"י‬ ‫בשימוש‬ ‫נמצא‬ ‫המנוע‬
  5. 5. 5 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com10‫הדיברות‬‫מפותחת‬ ‫לאורן‬:‫הטכנולוגיה‬1.‫מובנית‬ ‫תמיכה‬( ‫החשובים‬ ‫בפרוטוקולים‬:‫דוגמת‬DNS, HTTP, TLS)9.‫הכל‬ ‫להזרים‬(Streaming)‫מידע‬ ‫לחצוץ‬ ‫לא‬ ‫לעולם‬ ,(buffering)–‫בחוצצים‬ ‫נאגר‬ ‫ולא‬ ‫הלאה‬ ‫זורם‬ ‫הזמן‬ ‫כל‬ ‫המידע‬.‫יותר‬ ‫מאוחר‬ ‫בשלב‬ ‫להישלח‬ ‫מנת‬ ‫על‬3.‫בפלטפורמה‬ ‫תלות‬ ‫אי‬4.‫על‬ ‫שמירה‬‫רישיון‬‫פתוח‬ ‫קוד‬"‫פשוט‬"5.‫מועטות‬ ‫תלויות‬–‫בספריות‬ ‫צורך‬ ‫אין‬‫את‬ ‫להריץ‬ ‫מנת‬ ‫על‬ ‫רבות‬ ‫חיצוניות‬‫אפליקציה‬‫ב‬ ‫הכתובה‬node.js6.‫סטאטי‬ ‫קישור‬–‫מקובץ‬ ‫חלק‬ ‫להיות‬ ‫הופך‬ ‫והוא‬ ‫התשתית‬ ‫מן‬ ‫חלק‬ ‫שאיננו‬ ‫הקוד‬ ‫לכל‬ ‫קישור‬ ‫מתבצע‬ ‫הקומפילציה‬ ‫בזמן‬.‫הריצה‬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. 6 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫קלט‬ ‫פעולת‬ ‫המתאר‬ ,‫העליון‬ ‫בחלק‬/‫בזמן‬ ,‫סינכרונית‬ ‫פלט‬T1-T2,‫עושה‬ ‫שהמערכת‬ ‫מה‬ ‫כל‬ )‫הזמן‬ ‫את‬ ‫מייצג‬ ‫האמצעי‬ ‫(הציר‬.‫במקביל‬ ‫אחר‬ ‫דבר‬ ‫שום‬ ‫קורה‬ ‫ולא‬ ,‫פלט‬ / ‫בקלט‬ ‫טיפול‬ ‫הינו‬‫קלט‬ ‫פעולת‬ ‫לבצע‬ ‫ביקשה‬ ‫שהמערכת‬ ‫לראות‬ ‫ניתן‬ ,‫אסינכרונית‬ ‫פלט‬ / ‫קלט‬ ‫פעולת‬ ‫המתאר‬ ‫התחתון‬ ‫בחלק‬/‫בתהליך‬ ‫שרצה‬ ‫פלט‬‫(אין‬ ‫לרוץ‬ ‫ממשיכה‬ ‫המערכת‬ ‫הראשי‬ ‫ובתהליך‬ ,‫נפרד‬‫קיטוע‬.)‫הראשי‬ ‫התהליך‬ ‫את‬ ‫שמייצג‬ ‫העליון‬ ‫בקו‬‫איור‬9‫אסינכרוני‬ ‫פלט‬ / ‫קלט‬ ‫לעומת‬ )‫(למעלה‬ ‫סינכורני‬ ‫פלט‬ / ‫קלט‬ :
  7. 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.<?php2.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:Startingcontents of file: sample txt fileFinishedOutput:StartingFinishedcontents of file: sample txt file‫איור‬3‫ב‬ ‫קוד‬ ‫קטע‬ :PHP‫לעומת‬node.js
  8. 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. 9 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫חסרונות‬‫יחסית‬ ‫צעירה‬ ‫הטכנולוגיה‬: ‫מישורים‬ ‫בכמה‬ ‫שמשפיע‬ ‫מה‬ ,o‫קהילה‬‫יחסית‬ ‫מצומצמת‬-.‫בעיות‬ ‫כשיש‬ ‫תמיכה‬ ‫קבלת‬ ‫על‬ ‫מקשה‬o‫מקורות‬‫לימוד‬‫איכותיים‬‫מצומצמים‬.o‫מיעוט‬‫תשתיות‬‫הטכנולוגיה‬ ‫בסיס‬ ‫על‬ ‫אפליקטיביות‬.‫והתנסות‬ ‫למידה‬ ‫מחייב‬ ‫קלט/פלט‬ ‫אירועי‬ ‫מונחית‬ ‫בשיטה‬ ‫פיתוח‬Node.js‫באמצעות‬ ‫רץ‬process(‫תהליך‬)‫ו‬ ‫אחד‬thread)‫(תהליכון‬‫שלו‬ ‫ההתרחבות‬ ‫על‬ ‫שמקשה‬ ‫מה‬ ,‫אחד‬(scalable.‫ליבות‬ ‫מרובי‬ ‫שרתים‬ ‫עבור‬ ‫)יות‬‫לקוח‬ ‫צד‬ ‫ופיתוח‬ ‫שרת‬ ‫צד‬ ‫פיתוח‬‫זהה‬ ‫בשפה‬–‫זהו‬‫אמנם‬‫ש‬ ‫מכיוון‬ ‫חיסרון‬ ‫גם‬ ‫אך‬ ‫יתרון‬‫לרוב‬‫איתם‬ ‫האתגרים‬‫הלקוח‬ ‫ובצד‬ ‫השרת‬ ‫בצד‬ ‫מתמודדים‬.‫אחרות‬ ‫פיתוח‬ ‫וטכנולוגיות‬ ‫מתודולוגיות‬ ‫נדרשות‬ ‫דווקא‬ ‫ולעיתים‬ ,‫שונים‬ ‫הנם‬,‫לסיכום‬‫היא‬ ‫האם‬ ‫לבחון‬ ‫תוכלו‬ ‫א‬ ‫בנספח‬ .‫ספציפיים‬ ‫ליישומים‬ ,‫לפחות‬ ‫בינתיים‬ ,‫מתאימה‬ ‫החדשה‬ ‫הטכנולוגיה‬ ‫כי‬ ‫לראות‬ ‫ניתן‬.‫שלכם‬ ‫היישום‬ ‫עבור‬ ‫מתאימה‬
  10. 10. 10 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫הפרויקט‬ ‫בשלות‬ / ‫התקדמות‬‫לבחור‬ ‫הולך‬ ‫גוף‬ ‫כאשר‬,‫טכנולוגיה‬‫פיתוח‬ ‫טכנולוגיית‬ ‫ובפרט‬ ,‫בכלל‬‫הוא‬ ‫המרכזיים‬ ‫הפרמטרים‬ ‫אחד‬‫בו‬ ‫והאופן‬ ‫הפרוייקט‬ ‫בשלות‬,‫טוב‬ ‫כנראה‬ ‫שהוא‬ ‫סימן‬ ,‫וכד‬ ‫לפרוייקט‬ )‫קוד‬ ‫(בעיקר‬ ‫תורמים‬ ,‫יותר‬ ‫טובה‬ ‫קהילה‬ ,‫משתמשים‬ ‫יותר‬ ‫שישנם‬ ‫ככל‬ .‫מתפתח‬ ‫הוא‬.‫ויציב‬‫כד‬ ‫פתוח‬ ‫קוד‬ ‫טכנולוגיית‬ ‫בשלות‬ ‫על‬ ‫המעידים‬ ‫המדדים‬ ‫אחד‬‫וגמת‬node.js‫ה‬ ‫פעולות‬ ‫מס‬ ‫הוא‬–commit‫המתבצעות‬.‫הפיתוח‬ ‫בסביבת‬‫ה‬‫הבאים‬ ‫גרפים‬‫המתארים‬ ,‫מעידים‬ ‫זאת‬‫שוטף‬ ‫באופן‬ ‫מתפתח‬ ‫הפרויקט‬ ‫כי‬‫ו‬‫בשימוש‬ ‫נמצא‬‫גדולה‬ ‫קהילה‬ ‫על‬ ‫שמעיד‬ ‫מה‬ ,‫גבוה‬.‫שהתגלו‬ ‫ולבעיות‬ ‫בשוק‬ ‫לשינויים‬ ‫בהתאם‬ ‫המתפתח‬ ‫דינאמי‬ ‫פרויקט‬ ‫ועל‬ ‫ופעילה‬‫איור‬4‫מספר‬ :‫ה‬ ‫פעולות‬-Commit‫בפרויקט‬node.js–‫בכתום‬ ‫והתחתון‬ ‫הפרויקט‬ ‫תקופת‬ ‫כל‬ ‫את‬ ‫מייצג‬ ‫בירוק‬ ‫העליון‬ ‫החלק‬‫האחרונה‬ ‫השנה‬ ‫את‬.
  11. 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. 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. 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. 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 yourconfiguration.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. 15 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫הניסוי‬ ‫אופן‬:‫בדפדפן‬ ‫משתמשים‬ ‫של‬ ‫דימוי‬ ‫כלל‬ ‫הניסוי‬‫מ‬ ‫היה‬ ‫במשתמשים‬ ‫הגידול‬–0-500‫של‬ ‫זמן‬ ‫בפרק‬ ‫משתמשים‬5.‫דקות‬.‫גיאוגרפית‬ ‫אחד‬ ‫ממקום‬ ‫הגיעו‬ ‫הבקשות‬ ‫כל‬‫תוצאות‬:‫איור‬5‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :node.js‫איור‬6‫ב‬ ‫הניסוי‬ ‫תוצאות‬ :PHP:‫מקרא‬‫ה‬ ‫את‬ ‫מייצג‬CPU‫של‬‫השרת‬‫מספר‬ ‫את‬ ‫מייצג‬‫המשתמשים‬‫את‬ ‫מייצג‬‫התגובה‬ ‫זמני‬
  16. 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. 17 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com‫מקורות‬:‫ישראל‬ ‫אינטרנט‬ ‫אתר‬-israel.com/-http://www.internet-‫לפיתוח‬ ‫המוקדש‬ ‫אתר‬WEBnode.jsAn Introduction to-TutsPlus--to-introduction-an-http://tutolearning.com/tutsplusjs/-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/nodeefficency/-js-‫בלוגים‬ ‫אתר‬

×