Your SlideShare is downloading. ×
  • Like
Nodejs
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Nodejs

  • 466 views
Published

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

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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
466
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 1 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬shoham.gilad@gmail.com
  • 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 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬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.js1‫בשפת‬ ‫הכתוב‬ ‫קומפילציה‬ ‫מנוע‬C++.‫קוד‬ ‫לקמפל‬ ‫יודע‬ ‫המנוע‬java script.‫ולהריצו‬ ‫מכונה‬ ‫לשפת‬.‫כרום‬ ‫בדפדפן‬ ‫גוגל‬ ‫חברת‬ ‫ע"י‬ ‫בשימוש‬ ‫נמצא‬ ‫המנוע‬
  • 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 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬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.<?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 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬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 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 ‫גלעד‬ ‫ע"י‬ ‫נכתב‬‫שהם‬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/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-‫בלוגים‬ ‫אתר‬