C# או NODE.JS
-
@שואף אתה שם בפי מילים שכאילו גיניתי את המצב הזה וממילא מתרעם שאני אומר זאת לפני כולם.
יש אחד שעובד במשטרה כשוטר סיור. בערב הוא לומד תכנות או לומד בכולל ערב, כעבור כמה שנים לא תמצא אותו בדרך כלל מפקד תחנה אלא מתכנת או בן תורה. אפשר גם לתת דוגמאות פחות מחמיאות כמו עובד ניקיון (כמו נתניהו בשנות לימודיו באווארד כמדומני) שלא ייהפך להיות מנהל חברת אחזקה אלא ראש ממשלה.
אני חותם על כל מילה שאמרת, ומוסיף לזה עוד כמה מילים: במצב לגיטימי ונפלא כזה, קשה לעבור פלטפורמה, ועוד יותר קשה לייעץ לאיפה לעבור. -
@שואף אמר בC# או NODE.JS:
@dovid אמר בC# או NODE.JS:
אני בהחלט נהנה לתכנת, אבל לא משוגע על זה ויש לי הרבה ערכים אחרים בחיים שקודמים לזה. מה שלא מקדם אותי למטרה שהיא להרוויח את הממון שהמשפחה שלי צריכה, לא אשקיע עליו הרבה מאמץ וזמן. כנראה שלא כולם חושבים ככה. זכותם. אבל כפורום של בני תורה אני חושב שזו ההשקפה של חלק גדול מהחברים. אולי אני טועה.אם כבר נימה אישית, אם "תבזבז" חצי מהזמן שבו אתה מתכנת כדי להבין יותר או להכיר יותר את העולם שאיתו אתה עובד, אני חושב שהיית מקבל אותו בחזרה עם ריבית. פרנסה משמיים, ואני חושב שמה שעושים צריך לעשות מקצועי.
המציאות היא שאתה שואל פה בפורום ולא מוצא את הזמן לעבור על התשובות. זה אומר שאתה במצב שאתה מאמין שככל שתקליד יותר הרבה/מהר על המקלדת ככה תרויח יותר כסף. רק שכשאני אומר להשקיע יותר, ישר אתה חושב שאני מתכוון לקצץ בזמן השמור לכולל... -
@שואף אמר בC# או NODE.JS:
@nigun נקודה חשובה באמת. למרות שיש את החיסרון (שאני עדיין לא מספיק מבין לעומק) שבNODE אתה לא מריץ כל פעם את הסקריפט וממילא כשעושים שינוי צריך לעשות איזו הפעלה מחדש.
אכן בעיה
הפתרון הפשוט הוא לעבוד עם שתי סביבות עבודה
ולעדכן את הסביבת פרודקשן בשעות שקטות.אם זה לא שייך, אפשר להתגבר על זה ע"י חלוקה למיקרוסרביס
דהיינו לעשות שרת בנוד וכדו' שיהיה אחרי רק על שמירת נתונים בזיכרון וכדו'
ואת שאר הקוד לשים בסקריפטים/שרת נפרד. (כשאני כותב "שרת" אני לא מתכוון למכונה נפרדת כמובן). -
@yossiz אמר בC# או NODE.JS:
@שואף PHP לא נבנתה מתחילה עבור שימוש כזה. אבל במשך חייה הארוכות PHP עברה כמה אבלוציות...
אני לא ממליץ על שימוש ב-PHP עבור, אבל בשקלול העלות/תועלת של האפשרויות קח בחשבון ש(לכאורה) זה אפשרי לגמרי ב-PHP.
תבדוק את זה:
https://amphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://reactphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://github.com/WyriHaximus/reactphp-cronתודה, נראה מעניין. אם תוכל לעדכן כשהאתרים ייפתחו.
-
@שואף אמר בC# או NODE.JS:
למרות שיש את החיסרון (שאני עדיין לא מספיק מבין לעומק) שבNODE אתה לא מריץ כל פעם את הסקריפט וממילא כשעושים שינוי צריך לעשות איזו הפעלה מחדש.
לא הייתי אפילו לוקח את זה בחשבון.
PM2 יכול לטפל בזה.
בכל מקרה אני מקווה שאתה לא עובד ישירות על מכונת הפרודקשיין
ואם כן בעת העלאה אתה מפעיל מחדש את השרת גם כן. אפשר לחבר סקריפט קטנצ'יק עבור עדכון השרת.אלא מאי אתה מתכוון שאז אתה מפסיד את ה-state הגלובלי שבזכרון?
האם ב-PHP המצב יותר טוב? הרי שם אי אפשר בכלל לשמור על state גלובלי.@nigun אמר בC# או NODE.JS:
דהיינו לעשות שרת בנוד וכדו' שיהיה אחרי רק על שמירת נתונים בזיכרון וכדו'
לא צריך לממש בעצמך דברים שאחרים כבר מימשו. יש את redis, או ספריות שעושים את זה בתוך נוד.
-
@yossiz אמר בC# או NODE.JS:
לא צריך לממש בעצמך דברים שאחרים כבר מימשו. יש את redis, או ספריות שעושים את זה בתוך נוד.
גם את redis צריך ללמוד
אני מצאתי שיותר קל להשתמש בספריה מאשר ללמוד את הAPI של redis.@yossiz אמר בC# או NODE.JS:
לא הייתי אפילו לוקח את זה בחשבון.
PM2 יכול לטפל בזה.
בכל מקרה אני מקווה שאתה לא עובד ישירות על מכונת הפרודקשיין
ואם כן בעת העלאה אתה מפעיל מחדש את השרת גם כן. אפשר לחבר סקריפט קטנצ'יק עבור עדכון השרת.
אלא מאי אתה מתכוון שאז אתה מפסיד את ה-state הגלובלי שבזכרון?
האם ב-PHP המצב יותר טוב? הרי שם אי אפשר בכלל לשמור על state גלובלי.הבעיה היא שבהפעלה מחדש כל החיבורים נופלים
ובשרת אסטריסק זה בעיה. -
@dovid אמר בC# או NODE.JS:
מבחינת ארכיטקטורה, nodejs מאוד מאוד מתחיל מהקרשים, כל דבר מאוד מאוד "ידני" שמה,
אני לא מרגיש כך. בשימוש ב-express אני מקבל את הבקשה בצורה מסודרת מאוד. אני לא מכיר איך בדיוק הבקשה נראית בנוד native. אבל אין סיבה לא להשתמש בספריות.
@dovid אמר בC# או NODE.JS:
אם אתה מתכוון לכמות התחביר הרבה של C#, כלומר טיפוסים מחלקות ובכלל כל הטיפוסיות הקשוחה,
כן, לזה התכוונתי. אבל זה לא over engineered אלא שפה שונה.
זו שפה עם טייפים סטטיים (שהוא הרבה יותר טוב לביצועים). ו-object oriented. זה מסביר כל ה-over engineering, לא? -
איזה כיף! סוף סוף יש דיון מעניין
אין לי תשובה לשאלה שלך, אבל בתור אחד שבא מPHP (שרק עכשיו נחשפתי אליה בקוד של לקוח שלי..) אז מניח שיהיה לך הרבה יותר קל להגר לJS מאשר לC#.
JS יותר דומה לPHP מאשר לC#.
C# היא שפה עם טיפוסיות חזקה, כל דבר צריך להצהיר עליו לפני (מחלקות וכו') ואתה לא יכול פשוט לכתוב וזהו. אין דבר כזה.(הערת אגב - דווקא היום נראה שיש אופנה חזקה בJS לאמץ את הצדדים הללו של C#. הרבה אנשים עוברים לאמץ את התכונות של הטיפוסיות החזקה מC#, ועוברים להשתמש בTS (טייפסקריפט בלע"ז). לאט לאט אני שומע על הרבה מתכנתים שכבר לא משתמשים בexpress בnode, אלא בnestjs שהוא כעין אנגולר לשרת נוד. (בסוף כשאתה כותב פרוייקט לטווח ארוך, גם אם הוא פרוייקט קטן - זה מצדיק את עצמו. הפרוייקט בנוי בצורה מסודרת, כל אחד יכול להבין מה הולך בפנים, מה אתה מצפה מעביר לפונקציה / מחזיר ממנה וכו').
לעצם הצורך שלך, אני בכלל לא מבין למה אתה לא יכול להמשיך להשתמש בקטע קוד שאתה מריץ אותו בcron? מה רע לך בזה? ודווקא ספציפית לזה לא בטוח שנוד הכי טוב..
נוד עובד על תהליך (פרוסס) אחד, והוא משתמש בצורה אסינכורנית כדי לענות לאלפי בקשות בו זמנית. אבל דווקא בדברים שצריך בהם הרבה גישה לקבצים וכדו' (I/O) מקובל לומר שזה לא הצד החזק שלו.. וכן אם אתה צריך הרבה חישובים בדרך - זה גם לא הצד החזק של נוד. (ואם הבנתי אותך נכון, אתה צריך סקריפט שפונה לדטה בייס, עושה חישובים ואז מבצע פעולות, וכלל אין צורך להחזיר תשובה ללקוח..)
נוד נועדה לאפליקציות מרובות בקשות בו זמנית, וזה אכן הצד החזק שלה. (למרות שהיום .net core לא פחות מהיר ואולי אפי' יותר, תעשה חיפוש בגוגל ותמצא מלא השוואות ביניהם).אז כמו שדוד כתב - תוודא מה בדיוק הצרכים שלך (חישוביות / גישה להרבה קבצים או דטה בייס / החזרת תשובה ללקוח וכו'), ותעשה השוואה אחד מול השני מה יותר יעיל לך. שניהם אהובים טובים וברורים, ובשניהם יש עבודה ודרישה.
אם כי כמו שאמרתי בהתחלה, ללמוד JS בלי להבין יותר קל ומהר, מאשר ללמוד C#..
-
@yossiz אמר בC# או NODE.JS:
אני לא מרגיש כך. בשימוש ב-express אני מקבל את הבקשה בצורה מסודרת מאוד. אני לא מכיר איך בדיוק הבקשה נראית בנוד native. אבל אין סיבה לא להשתמש בספריות.
נכון אבל בASP.NET אתה בכלל יכול לא לדעת שיש דבר כזה שנקרא request..
וזה מה שדוד התכוון לברזלים.@dovid אמר בC# או NODE.JS:
אם אתה מתכוון לכמות התחביר הרבה של C#, כלומר טיפוסים מחלקות ובכלל כל הטיפוסיות הקשוחה,
כן, לזה התכוונתי. אבל זה לא over engineered אלא שפה שונה.
זו שפה עם טייפים סטטיים (שהוא הרבה יותר טוב לביצועים). ו-object oriented. זה מסביר כל ה-over engineering, לא?נראה לי שלטייפים סטטיים אין קשר להשפעה על הביצועים בכלל, אלא לכתיבה ותחזוקת הקוד וניפוי שגיאות. לכן הרבה עוברים לTS
-
@avr416 אמר בC# או NODE.JS:
אבל דווקא בדברים שצריך בהם הרבה גישה לקבצים וכדו' (I/O) מקובל לומר שזה לא הצד החזק שלו..
נראה לי שזה בדיוק הפוך. המודל של נוד לא טוב לקוד שצורך הרבה CPU כי הכל רץ בתוך thread אחד וה-multi-tasking הוא cooperative ולא preemtive. אבל בקוד עם הרבה I/O זה יותר חסכוני להשתמש ב-thread אחד ו-event loop במקום ב-thread pool. שלא לדבר על PHP בלי thread pool ושום דבר אלא thread (או תהליך) חדש לכל בקשה, זה הכי גרוע כי ה-I/O תוקע את ה-thread עד שהיא תסתיים.
-
@avr416 אמר בC# או NODE.JS:
נראה לי שלטייפים סטטיים אין קשר להשפעה על הביצועים בכלל
נראה לי שאתה לא צודק...
אתה צודק שזה תורם גם לתחזוקת הקוד וניפוי שגיאות, אבל הוא גם תורם גדול לביצועים.
אפשר להצדיק את דבריך ביחס ל-typescript כי שם זה מתקמפל ל-JS רגיל, אז מן הסתם אין יתרונות בביצועים, או אולי יתרון מינורי. אבל שפה שכל כולה טייפים סטטיים מסוגל לביצועים גבוהים יותר. -