ריענון מחדש של חלק מתהליך NODEJS
-
התחלתי לרכז כמה פרוייקטים תחת תהליך אחד בנוד, במקום לנהל מספר תהיליכים בו זמנית, (פחות בזבוב משאבים).
הרעיון הוא משהו כזה:app.use('/yeshiva_hal_kivro', require('./projects/yeshiva_hal_kivro')); app.use('/beney_aliya', require('./projects/beney_aliya'));
אך החסרון הוא שכל פעם שאני מעדכן/מוסיף פרוייקט, אצטרך לרענן את כל התהליך.
למען האמת זה לא כ"כ נורא, אבל זה מפריע לי, כי פה ושם יש מצב שלקוח נתקע בדיוק באמצע בקשה.
חשבתי על פתרון כזה:app.use('/yeshiva_hal_kivro', require('./projects/yeshiva_hal_kivro')); app.use('/beney_aliya', require('./projects/beney_aliya')); app.all('/update/:project', function (req, res) { let project = req.params.project; app.use('/' + project, require('./projects/' + project)); res.send('update!'); });
חשבתי שכך אוכל לגרום לרענן רק חלק תוך כדי תהליך קיים, אבל למסך אכן מודפס update, אבל בפועל לא מבוצעים שינויים.
האם יש למישהו פתרון אחר?
תודה -
א. נראה לי פיצול זה יעיל בביצועים ולא להיפך
ב. הrequire פעם נוספת לא טוען שוב כי הוא כבר טעון. אתה צריך למחוק מהקאש, אני רואה באינטרנט שאפשר ככהdelete require.cache[require.resolve('./projects/' + project)]
אבל התחושה שלי שזה די נוגד את הפילוסופיה של node. שים לב שnode זה לא סקריפט, זו תוכנה. ותוכנה שעוברת שינוי זה לא משהו שעתי וזה מצריך להפעיל מחדש, התנהגות תוכנה זה לא משהו דינמי, הקוד צריך להיות די דינמי כדי לחסוך את דינמיות השינויים בו.
במילים אחרות אם כיום כשאתה רוצה להגדיר משהו זמני בשעה X אתה מוסיף שורת קוד בתחילת השעה ואח"כ מסיר, אתה צריך לדאוג שהקוד יוכל לעשות את התנהגות זו או כל התנהגות נצפית אחרת בהתבסס על מסד הנתונים או קובץ וככה יהיה חכם מראש. -
@dovid
א. ייתכן, אבל כשאני צריך רוצה להקים 5 פרוייקטים, שכולם משתמשים באותם מודולים, ואותם מחלקות שבניתי, ובסך הכל הם דומים מבחינת התלויות, ורק כל אחד יש לו את הפעולות שלו ואת הטבלאות שלו, הם אני מריף לכל אחד תהליך, זה דורש לכל אחד כמאה מגה ראם, ואז יחד הקצאתי 500 מגה ראם.
משא"כ בתהליך אחד זה לא אמור לצאת יותר 150 מגה ראם, (לא שאני כבר סיימתי לחבר חמר, אלא רק 2, אבל כך זה נראה לי לפי החשבון של שתי פרוייקטים.
אולי זה לא כ"כ נורא, יש לי 4 גיגה שמתוכם בדר"כ 2 פנויים, אבל אני רוצה לנהל מראש את התקציב חסכוני יותר.
אדרבה, תקן אותי אם אני טועה.
ב. זה לא לשינויים שעתיים, אלא שדרוגים והתקדמות בפרוייקטים קיימים או אפילו הוספת פרוייקט חדש.
נניח בישיבה על קברו אני רוצה להוסיף הצגת נתון כללי של כל המשתתפים ביום זה, אני מבצע שינוי בקוד, מאתחל את התהליך, וכעת אני מאתחל סתם את שאר הפרוייקטים ג"כ, דבר שלעצמו לא כ"כ נורא, אבל ייתכנו פה ושם לקוחות שנעצרה להם הבקשה באמצע, וכן ריענון הנתונים השמורים וכו' שלכן אני מעדיך שאת מה שאני לא חייב אני לא מרענן. -
זה קשור לענין?
https://github.com/magicode/express-hot-reload