node.js vs .net

החיים היפים!!

משתמש פעיל
אולי הכותרת לא ממש מתאימה..
אבל במה node מתעלה על C#?
זה יותר מהיר? יותר קליט?
אשמח לשמוע..
תודה רבה!
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
במה עברית מתעלה על אנגלית?
מי שאוהב ויודע javascript שיכתוב בה, ומי שאוהב ויודע C# שיכתוב בה.

ההבדלים באמת לא הופכים את אחת השפות ליותר טובה על פני השניה.

לי באופן אישי קשה עם שפות טיפוסיות חלשה, אז אני מעדיף C#, ובמקרה שאני צריך לכתוב בנוד, אני מעדיף TypeScript שזאת מקבילה של Javascript עם טיפוסיות חזקה.

ולמקרה שאמרתי משהו לא מובן, nodejs זאת סביבת ריצה של javascript על מחשב או שרת, אבל השפה היא javascript.
כמו כן .net זאת הסביבת ריצה של C#, אבל השפה היא C#.

לכן גם ההשוואה צריכה להיות בין javascript ל-C#, ולא בין nodejs ל-C#.
 

KATZ

משתמש פעיל
צודק,
אבל התכוונתי שהיום יש הרבה שנוטים ללמוד node.js כי זה מבוסס על javascript שהיא מאוד פופולרי לצד client, וכך עושים בה שימוש גם ב- server.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
צודק,
אבל התכוונתי שהיום יש הרבה שנוטים ללמוד node.js כי זה מבוסס על javascript שהיא מאוד פופולרי לצד client, וכך עושים בה שימוש גם ב- server.
בכל מקרה יש עקומת למידה למי שיודע javascript כדי ללמוד גם לעבוד עם nodejs,
היום אפשר גם להריץ C# בדפדפן, אבל עדיין javascript יותר פופולרית בדפדפן.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
ד"א, אם הנקודה היא מה ללמוד בתור שפה ראשונה, שאז לא שייך להעדיף שפה אחת על פני השניה, אז לא משנה איזו שפה לומדים, העיקר לא javascript, כמות הטעויות שאפשר להגיע בה למתכנת לא מנוסה היא אסטרונומית, היא שפה יותר מידי מתירנית והיא תגרום אפילו למתכנתים מנוסים להגיע לבאגים לא צפויים.
אני לא שולל את השפה, היא מצוינת, רק לא כדאי להתחיל ממנה, בקטע הזה C# היא הרבה יותר טובה.
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
שפת c# היא שפה ממש מדהימה, אבל הסביבה הטבעית שלה - windows - זה החיסרון הגדול שלה.
לכן הפופולריות שלה יורדת.
לעומת זאת node סופר פופולרית
 

varchar

משתמש מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
D I G I T A L
עיצוב ואדריכלות פנים
node היא קוד פתוח
זמין, חינם ועוד יתרונות
עוד על קוד פתוח -קוד פתוח ויקיפדיה
שפת c# היא שפה ממש מדהימה, אבל הסביבה הטבעית שלה - windows - זה החיסרון הגדול שלה.
לכן הפופולריות שלה יורדת.
לעומת זאת node סופר פופולרית
יש .net core מתאים גם למערכות הפעלה אחרות
 

neom

משתמש מקצוען
ההבדל המשמעותי ביותר הוא שnode היא שפה א-סינכורנית בשל היותה single thread, מה שגורם לה לנתב במהירות רבה יותר פניות רבות שמתקבלות.
לעומת .net שהיא שפה סינכורנית, ותתקשה לטפל בעומס של פניות בלי לקרוס.
בשל כך, node היום היא אחת השפות היותר מומלצות לעמוד מול אתרים, במיוחד כאלו, שמצפים לעומס רב.
בשל אותה סיבה בדיוק, node היא לא השפה המומלצת לחישובים ולוגיקות שתופסות את כל התהליך.
ודרך אגב, node יכולה לעבוד יפה גם עם TS, שהמאפשרת כתיבת קוד OOP עד לרמה די גבוהה.
 

מוטי אורן

משתמש רשום
מוזיקה ונגינה
ההבדל המשמעותי ביותר הוא שnode היא שפה א-סינכורנית בשל היותה single thread, מה שגורם לה לנתב במהירות רבה יותר פניות רבות שמתקבלות.
אם אפשר תיקון לטעות הקטנה שרבים טועים בה, במחילה...
כמו שגזעי כבר כתב, Node איננה שפה, אלא פלטפורמה. קיימת טעות רווחת הגורסת שאסינכרוניות מקורה בשפה. כלומר: אם JS היא אסינכרונית, אז פיתוח בשפה כזו בכל סביבה שהיא, יהיה אסינכרוני.
האמת היא, שאסינכרוניות אינה קשורה כלל לשפה, אלא לפלפטפורמה המריצה אותה. כשריאן דל החליט לכתוב את פלטפורמת Node, הוא מימש את האסינכרוניות שלה באמצעות asynchronous API שנוסף בערך אז למערכות ההפעלה, המאפשר לקרוא לפונקציות המערכת ללא הצורך להמתין עד לסוף הביצוע שלהם, אלא להמשיך בביצוע פעולות אחרות ולקבל לאחר מכן עדכון ממערכת ההפעלה (מה שמומש בשנותיה הראשונות של Node באמצעות callbacks שפשוט היו נקראים כשהתקבל העדכון על השלמת הפעולה, עד להופעת הפרומיסים שאיפשרו כתיב יותר אלגנטי לעניין).
ריאן דל יכול היה לצורך העניין לבחור בשפת פייתון כשפה שתרוץ על Node, אבל הוא בחר ב-JS מסיבות מסויימות, ומימש את האסינכרוניות באמצעות ספריית libuv של C++ המאפשרת שימוש ב-API הנ"ל המסופק על ידי מערכת ההפעלה.
שימו לב, כל הנ"ל הוא על פי הידוע לי ממחקרי הקטן בנושא. ייתכן מאוד שאני טועה, אשמח שמישהו שמבין בנושא יאשר או יכחיש את הדברים.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
ההבדל המשמעותי ביותר הוא שnode היא שפה א-סינכורנית בשל היותה single thread, מה שגורם לה לנתב במהירות רבה יותר פניות רבות שמתקבלות.
לעומת .net שהיא שפה סינכורנית, ותתקשה לטפל בעומס של פניות בלי לקרוס.
בשל כך, node היום היא אחת השפות היותר מומלצות לעמוד מול אתרים, במיוחד כאלו, שמצפים לעומס רב.
בשל אותה סיבה בדיוק, node היא לא השפה המומלצת לחישובים ולוגיקות שתופסות את כל התהליך.
ודרך אגב, node יכולה לעבוד יפה גם עם TS, שהמאפשרת כתיבת קוד OOP עד לרמה די גבוהה.
אני חושב שיש פה בלבול בין מה זה סינכרוני ואסינכרוני, שתי השפות מאפשרות לעבוד בצורה סינכרונית ואסינכרונית, והמושג single thread זה מושג ששמור לקוד סינכרוני, ולא אסינכרוני, ונוד מממשת אסינכרוניות על גבי ת'רד יחיד בצורה של לולאת אירועים, זה לא פיצ'ר שהופך את האסינכרוניות שלה ליותר מוצלחת (יכול להיות שאפילו פחות, לא בדקתי).
ואם כבר, אז סביבת ההרצה .net הרבה יותר מפותחת מהבחינה הזו, ונותנת שליטה מאוד טובה על מה ירוץ ואיך, עם .net core לא יצא לי להתעסק עם הקצאת ת'רדים, הכל שם זה בTaskים.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
אני חושב שיש פה בלבול בין מה זה סינכרוני ואסינכרוני, שתי השפות מאפשרות לעבוד בצורה סינכרונית ואסינכרונית, והמושג single thread זה מושג ששמור לקוד סינכרוני, ולא אסינכרוני, ונוד מממשת אסינכרוניות על גבי ת'רד יחיד בצורה של לולאת אירועים, זה לא פיצ'ר שהופך את האסינכרוניות שלה ליותר מוצלחת (יכול להיות שאפילו פחות, לא בדקתי).
ואם כבר, אז סביבת ההרצה .net הרבה יותר מפותחת מהבחינה הזו, ונותנת שליטה מאוד טובה על מה ירוץ ואיך, עם .net core לא יצא לי להתעסק עם הקצאת ת'רדים, הכל שם זה בTaskים.
רציתי לערוך ואני כבר לא יכול:
אז בדקתי ובאמת nodejs מושפעת לרעה מבחינת אסינכרוניות, זה אומר שכל טאסק שתוסיף יאט את הביצועים של שאר הטאסקים, בגלל שכל הטאסקים מנסים לתפוס את מקומם בלולאת האירועים הראשית.
אז זה בעצם אומר ש.net עדיפה על פני נוד במקרה שהובא לעיל (עומס פניות לשרת), אני מאמין שיש דרך שבה שרתים כמו אקספרס (שרת HTTP של נוד) מצליחים לגבור על זה, אולי יש להם ניהול ת'רדים פנימי שלהם, ודו"ק.
 

neom

משתמש מקצוען
אני חושב שיש פה בלבול בין מה זה סינכרוני ואסינכרוני, שתי השפות מאפשרות לעבוד בצורה סינכרונית ואסינכרונית, והמושג single thread זה מושג ששמור לקוד סינכרוני, ולא אסינכרוני, ונוד מממשת אסינכרוניות על גבי ת'רד יחיד בצורה של לולאת אירועים, זה לא פיצ'ר שהופך את האסינכרוניות שלה ליותר מוצלחת (יכול להיות שאפילו פחות, לא בדקתי).
ואם כבר, אז סביבת ההרצה .net הרבה יותר מפותחת מהבחינה הזו, ונותנת שליטה מאוד טובה על מה ירוץ ואיך, עם .net core לא יצא לי להתעסק עם הקצאת ת'רדים, הכל שם זה בTaskים.
node עובדת כאסינכרונית בברירת מחדל וכדי לגרום לה לעבוד בסינכרוניות צריך לעבוד קשה...
העיקרון הראשי של single thread הוא שהמערכת מטפלת בתהליך אחד בלבד בכל שורת קוד, אך כל שורת קוד ששולחת לשרות אחר (קריאת קבצים, קריאה לDB, הצפנה או לא משנה מה) שולחת את הפקודה וממשיכה עד לקבלת callback (מה שמוכר יותר כ then בגרסאות המתקדמות או async/await).
.net אכן שיפרה ביצועים הרבה למול framework', אך עדיין דורשת הרבה מאמץ ותכנון למה שבא בקלות בנוד.
 

neom

משתמש מקצוען
אז זה בעצם אומר ש.net עדיפה על פני נוד במקרה שהובא לעיל (עומס פניות לשרת), אני מאמין שיש דרך שבה שרתים כמו אקספרס (שרת HTTP של נוד) מצליחים לגבור על זה, אולי יש להם ניהול ת'רדים פנימי שלהם, ודו"ק.
במקרה זה בדיוק נוד עדיפה על net , כי היא מקבלת קריאה ושולחת אותה מיד הלאה, וה thread הראשי מתפנה במיידית לקבל קריאה אחרת.
המקרה שתארת הוא במקרה שמנסים לבצע חישובים בנוד (בכלל לא מומלץ) ושולחים את החישוב לthread אחר. מה שמקל על הביצועים, אך עדיין לא ממש עדיף.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
במקרה זה בדיוק נוד עדיפה על net , כי היא מקבלת קריאה ושולחת אותה מיד הלאה, וה thread הראשי מתפנה במיידית לקבל קריאה אחרת.
המקרה שתארת הוא במקרה שמנסים לבצע חישובים בנוד (בכלל לא מומלץ) ושולחים את החישוב לthread אחר. מה שמקל על הביצועים, אך עדיין לא ממש עדיף.
אולי זאת מחלוקת במציאות, אבל גם .net וגם nodejs עובדות בדיוק באותה צורה, בnodejs מה שנקרא Promise ב-.net נקרא Task, בנוד זה הכל ירוץ בתהליכון אחד שכולם מנסים להידחף אליו, וב.net יש הקצאת תהליכונים לפי מה שנראה ל.net נכון. אבל בשניהם אני יכול לתת לפעולה להמשיך הלאה בלי לעכב את הפעולות שאחריה.

גם ב.net הפעולה יכולה להיות סינכרונית ואסינכרונית לפי מה שאני בוחר, וכנ"ל בnodejs.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
1648931950401.png

רציתי גם להוסיף שבאמת הרבה ספריות בכלל לא מייצאות פונקציות סינכרוניות, כי בד"כ אין צורך בזה (בגלל הthen\await), לכן באמת יהיה קשה להשתמש בנוד בצורה סינכרונית.
 

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכו

א שִׁיר הַמַּעֲלוֹת בְּשׁוּב יי אֶת שִׁיבַת צִיּוֹן הָיִינוּ כְּחֹלְמִים:ב אָז יִמָּלֵא שְׂחוֹק פִּינוּ וּלְשׁוֹנֵנוּ רִנָּה אָז יֹאמְרוּ בַגּוֹיִם הִגְדִּיל יי לַעֲשׂוֹת עִם אֵלֶּה:ג הִגְדִּיל יי לַעֲשׂוֹת עִמָּנוּ הָיִינוּ שְׂמֵחִים:ד שׁוּבָה יי אֶת (שבותנו) שְׁבִיתֵנוּ כַּאֲפִיקִים בַּנֶּגֶב:ה הַזֹּרְעִים בְּדִמְעָה בְּרִנָּה יִקְצֹרוּ:ו הָלוֹךְ יֵלֵךְ וּבָכֹה נֹשֵׂא מֶשֶׁךְ הַזָּרַע בֹּא יָבוֹא בְרִנָּה נֹשֵׂא אֲלֻמֹּתָיו:
נקרא  108  פעמים

אתגר AI

תאומים • אתגר 145

לוח מודעות

למעלה