JS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...
-
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
אבל בתכלס זה אינטרוולים.
זה לא טיימאאוטים.למיטב המחקר שחקרתי את הספריה מלמעלה.
זה טיימאאוט.
הוא בודק פעם אחת את הזמן הנוכחי לעומת הזמן שאתה אמור להריץ את זה ומפחית את הזמן הנוכחי ונותר לו שיש להריץ טיימאאוט בעוד ההפרש של הזמן.
גם בכרון שחוזר על עצמו, בכל ריצה הוא בודק מתי יהיה הפעם הבאה שירוץ, ומגדיר כבר עכשיו טיימאאוט לעוד כך וכך זמן.א"כ הרעיון פשוט אם אתה רוצה לעשות משהו הכי רזה אתה בודק פעם ביום לכל המשתמשים באיזה שעה הם אמורים לקבל את ההתראה, אתה עושה חישוב של השניות של זמן ההתראה מינוס זמן נוכחי = ההפרש שאותו אתה מגדיר בטיימאאוט שירוץ בעוד כך זמן.
ייתכן שנמצא שאתה ממציא גלגל הקיים בלאו הכי בתוך המעטפת של הספריה, וא"כ לא יהיה הבדל גדול בביצועים.@dovid אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
אולי היא עושה setTimeout מחושבים?
נראה לי שזה מה ש @dovid התכוין במשפט הקצר והקולע
-
@chv יש שמה בדוגמאות הפעלה חד פעמית של פעולה (עם תאריך קשיח שנה תאריך ושעה).
@חוקר אני התכוונתי setTimeout אחד לעוד חמש חודשים... אבל גיליתי שאי אפשר יותר מ25 יום... (אלא"כ עושים setTimeout רקורסיבי, לא טוב).
אז אם כבר צריך לעשות משהו פעם ביום, אז אפשר ללכת על בדיקה מתמדת עם setInterval של פעם בדקה וכדומה. אני מחפש באינטרנט ואני מוצא כאלה כיוונים:
How to set up 6 month timer in node.jsבאופן כללי בנוד אני תמיד לוקח ספריה, אם אני רואה שהיא בשימוש מסיבי וללא מתחרים חכמים יותר.
-
לדעתי, כל ועוד מדובר סה"כ לפרויקט לימודי, אז יש שני גישות,
או ליישם פתרון הכי low level, כדי באמת ללמוד את השפה ואת המגבלות שלה,
או להשתמש בספרייה הכי פעילה (מבחינת פיתוח) ופופולרית, להשתמש בה ולהתקדם הלאה.בתכלס, אם באמת היה מדובר באפליקציה גדולה, לדעתי מה שנכון זה להוציא החוצה את נושא תזמון המשימות.
יש פתרונות חזקים שיתנו סט כלים ופיצרים רחב, שחבל להשקיע עצמאית, וכללית כדאי להפריד..אני לא מתכנת בnode, אבל זה השנקל שלי..
-
@aaron אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
בתכלס, אם באמת היה מדובר באפליקציה גדולה, לדעתי מה שנכון זה להוציא החוצה את נושא תזמון המשימות.
אני גם נטיתי לחשוב ככה אבל בגלל השאלה פה קצת חשבתי יותר, וכעת אני חושב שדוקא הsetInterval אין לו שום חיסרון, לעומת שימוש במערכת חיצונית שיש לזה כמה חסרונות: פיזור המערכת על פני כמה גורמים, תקשורת, תלות בפלטפורמה ועוד.
-
@dovid
לא זוכר אם זה דעה שלך או לא, אבל מאנדהו פה בפורום טוען שאפליקציות נוד מראש מיועדות לטווח חיים קצר..אולי תפרט יותר למה לדעתך intrval פנימי מספיק טוב?
אני דיי מתקשה להבין\להסכים עם הרעיון..
העולם היום הרבה יותר בעד פיזור למרות החסרונות של תלות בתקשורת, פלטפורמה וכו'
העולם הוא לא סוף פסוק, אבל אני מניח שמאחורי הדעה יש הרבה מחקר ומסקנות.. -
@aaron לא יודע אם זה שווה דיון, אני די מסכים אם כל הצדדים, אבל אם אתה רוצה אסביר לך את עצמי.
טווח החיים לא רלוונטי, כי בטעינת האפליקציה הוא מפעיל שוב את הInterval.
אפליקציית נוד בהחלט עשויה לעבוד כל הזמן, זה הרי בראש ובראשונה תוכנת שירות http.למה אינטרוול זה טוב? כי הוא זול מאוד. נוד בנויה לקבל המווווון אירועי קלט בלי למצמץ וזה ממש כלום בשבילה אירוע של פעם בשניה לבדוק אם השעה הנוכחית נמצאת במילון. זה כמו פעולה חיבור וחיסור במחשבון - זה זול, וזה טוב.
העולם בעד פיזור זה נכון, של מיקרוסרויסים. אני לא חושב שקרון זה הפיזור בכיוון הזה אבל אתה צודק שאני פחות בקטע הפופולרי הזה ויותר בעד ריכוזיות וניידות, כשאתה מעביר אפליקציית נוד אתה רוצה לדעת שיש לה כמה שפחות תלויות סביבתיות.
-
@dovid אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
טווח החיים לא רלוונטי, כי בטעינת האפליקציה הוא מפעיל שוב את הInterval.
זה נכון אבל זה אומר יותר קוד שצריך לכתוב בעצמך והתייחסות למקרי קצה.
(מהניסיון שלי בקרון בפייתון, יש הרבה מקרי קצה, שלנהל אותם לבד זה ודאי לא אידיאלי.. אבל זה כמובן תלוי פר אפליקציה.
לדוג', אפליקציה שאחראית להעלות קבצים למערכת IVR לפי תזמון, אתה לא רוצה להריץ בו זמנית יותר מX פעולות, כי המשאבים לא מספיקים להמרה לדוג', או לטפל במה קורה עם הזמן להרצה התפספס, מתי להריץ או האם בכלל..)@dovid אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
כשאתה מעביר אפליקציית נוד אתה רוצה לדעת שיש לה כמה שפחות תלויות סביבתיות.
העולם לא מפחד מזה כי ביחד עם המיקרוסרוויסים הגיע התחום של דוקר וk8s..
-
@aaron אני לא מבין לעומק כלל, לא בנוד ולא בפייתון, אבל האין זאת שפייתון ונוד הן שני עולמות שאינם מתחברים?
לא יודע להסביר מעומק העניין - אבל לפחות מלמעלה אני יכול לומר .
לא חולק עליך כי אין לי מספיק הבנה בתחילת קצהו של כל אחת מהפלטפורמות האלו.אגב אני בסוף כן לקחתי את ה-schedule, אבל פשוט כדי ליצור interval כל יום בשעה מסוימת.
-
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
אבל האין זאת שפייתון ונוד הן שני עולמות שאינם מתחברים?
הם שני עולמות, אבל בתכנון ארכיטקטורה הכל מתחבר..
השאלה היא עקרונית האם להפריד בין מערכות וליצור תלויות, או לרכז הכל ביחד וליצור קוד בייס גדול ומורכב.. -
שכחתי מהאשכול הזה..
הנה מה שבניתי.. 'אפליקציית נוד הראשונה שלי' (yay )
הועלה להרוקו https://chvsunset.herokuapp.com/
אשמח להערות הארות גערות וכו'
CSS באדיבות @Men770 , הרבה הרבה עזרה והסברים מעמיקים (ונזיפות מוצלחות) מהגה"צ @yossizהקוד בגיטהב https://github.com/chaim-chv/zmanim-node
שוב - הארות וכו'המשך יום\לילה\יממה כללית נעימה לכולם
-
@www אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
@chv יפה מאד!
אם אני מבין נכון, אתה בכל פעם בודק את שם העיר בגוגל מפס, אני הייתי שומר את הנתונים באיזה DB / קובץ JSON או לפחות בזכרון, כי זה בעצם עוד בקשת אינטרנט שמאריך את זמן התגובה באתר.יותר נכון - בודק את ה-lat-long (קואורדינטות) של העיר (עם google geolocation API) כי הספרייה של בדיקת זמני הלכה (kosher-zmanim) דורשת את הנתונים האלו.
צודק בקשר למהירות - אכן רעיון לשמור כל בקשה שהצליחה - לאחסן אותה ב-DB. (בהמשך.. יש לי עכשיו מה לעשוץ)
אגב אני לא יודע עד כמה זה ישפר מהירות, ה-DB הזה וההתקשרות איתו לא ככ מוכיחים את עצמם בקטע של מהירות. גוגל דווקא מהיר. (אני משתמש במונגוDB של מונגו עצמם, כלומר מנוהל - מאוחסן אצלם, תוכנית חינמית. כנראה התוצאות בהתאם. פעם היה בהרוקו תוכנית חינמית של מונגוDB, זה הופסק בנובמבר האחרון. מכה קשה להרבה גיקים הודים, ולי (כיום יש רק תוכנית חינמית של postgresql.. חשבתי ללמוד את זה באמת, רק בגלל שיש לי שם תוכנית חינמית.. וגם כי @yossiz יוכל הרבה יותר לעזור לי ... )
-
@chv אני הייתי טוען לזכרון, ובמקביל שומר בקובץ JSON מקומי, וטוען את הJSON לזכרון בעת עליית האפליקציה.
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
יותר נכון - בודק את ה-lat-long (קואורדינטות) של העיר (עם google geolocation API) כי הספרייה של בדיקת זמני הלכה (kosher-zmanim) דורשת את הנתונים האלו.
לזה התכוונתי.
בספריות אחרות (כמו HEBCAL) יש כבר מערך של ערים נפוצות, רק הבעיה שיש טעויות הקלדה ושפות. -
@www אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
@chv אני הייתי טוען לזכרון, ובמקביל שומר בקובץ JSON מקומי, וטוען את הJSON לזכרון בעת עליית האפליקציה.
אה זה רעיון! לא חשבתי על זה בכלל. זה כאילו ליצור לעצמי DB פרטי במבנה ובסכמות שאני מחליט..
אני יבדוק זה נשמע לי מעניין. -
@chv בדרך כלל זה פחות יעיל, כשיש לך טבלאות וכו' בפרט עם שאילתות מורכבות.
[הרי כל DB זה גם קובץ מקומי, רק שזה מתוכנן נכון עם מנוע מיוחד שאמור לעזור לך לשלוף ולאחסן נתונים עם העלות הביצועית הזולה ביותר. (זכור לי ש @dovid כתב על זה פעם בהרחבה).]
אלא שבמקרה שלנו שמדובר בטבלה אחת, שלכאורה לא תצטרך לעדכן אותה יותר מידי לאחר שתתמלא, ומדובר בנוד שהמערך שמור בזכרון, לכאורה זה הפתרון הכי טוב. -
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
אשמח להערות הארות גערות וכו'
עוד הערה.
חסר בקוד טיפול במצב שדחיפת ההודעות לדפדפן נכשל, כגון שהמשתמש לא אישר הודעות (נפוץ).
מה שקורה כרגע זה:
שגיאה בקונסול:Uncaught (in promise) DOMException: Registration failed - permission denied
וכן הגלגל ממשיך להסתובב.
עריכה: עוד משהו:
הוא נותן להירשם גם לשם עיר שלא קיים. -
@www אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
אשמח להערות הארות גערות וכו'
עוד הערה.
חסר בקוד טיפול במצב שדחיפת ההודעות לדפדפן נכשל, כגון שהמשתמש לא אישר הודעות (נפוץ).
מה שקורה כרגע זה:
שגיאה בקונסול:Uncaught (in promise) DOMException: Registration failed - permission denied
וכן הגלגל ממשיך להסתובב.
עריכה: עוד משהו:
הוא נותן להירשם גם לשם עיר שלא קיים.סודר (שתי ההערות)
-
@chv אמר בJS | תזמון, המתנה לזמן מסוים להרצת פעולה - אבל לא settimeout...:
שכחתי מהאשכול הזה..
הנה מה שבניתי.. 'אפליקציית נוד הראשונה שלי' (yay )
הועלה להרוקו https://chvsunset.herokuapp.com/
אשמח להערות הארות גערות וכו'
CSS באדיבות @Men770 , הרבה הרבה עזרה והסברים מעמיקים (ונזיפות מוצלחות) מהגה"צ @yossizהקוד בגיטהב https://github.com/chaim-chv/zmanim-node
שוב - הארות וכו'המשך יום\לילה\יממה כללית נעימה לכולם
זה ממש לתועלת בשבילי . יש"כ