דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. ושוב תא העינויים JavaScript גובה ממני בוקר שלם בתוך צינוק

ושוב תא העינויים JavaScript גובה ממני בוקר שלם בתוך צינוק

מתוזמן נעוץ נעול הועבר ארכיון code613m
32 פוסטים 7 כותבים 2.2k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

    למה לעזאזאל החמישי אי אפשר פשוט להגיד למיסטר JS, תהיה סינכרוני, רק פעם אחת!! רק לפונקציה הזו הכל כך קריטית, תמתין שיגיעו תשובות מהשרת, בלי קאלבק, בלי פרומיס, בלי אובזרבול (ובלי שאר חירטוטים שהבטיחו לנו שהנה חגיגות הקולבק הסתיימו ומשיח הגיע). למה אי אפשר לכתוב פונקציה בג'אווה סקריפט שלא תחזיר תשובה (כן כן פשוט תמתין!!! לא תאמינו, כמו בדוט נט ושאר השפות האנושיות) עד שמגיעה תשובת HTTP מהשרת.

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

    יש כאן איזה גאון עם תשובה?

    פורסם במקור בפורום CODE613 ב14/05/2017 15:01 (+03:00)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    2
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #2

      הנה המשך הניוול

      שימו לב: You have to put your code in the callback function you supply to setTimeout
      Any other code will execute immediately.

      פורסם במקור בפורום CODE613 ב14/05/2017 15:04 (+03:00)

      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

      תגובה 1 תגובה אחרונה
      0
      • נתנאלנ מנותק
        נתנאלנ מנותק
        נתנאל
        כתב ב נערך לאחרונה על ידי
        #3

        לתכנת בJS לווב זה כמו לנהל מרוץ סוסים. אני בריאקט, וזה סיוט מהבחינה הזו. מצטרף לצער.יש כאלה שחווים את זה כל יום.

        (געגועי לC#, השפה הברורה והצחה והיציבה, מועטת הפרימוורקים והפולישטיקים)

        פורסם במקור בפורום CODE613 ב14/05/2017 21:02 (+03:00)

        הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
        https://programing-tips.web.app/

        תגובה 1 תגובה אחרונה
        0
        • א מנותק
          א מנותק
          אהרן
          כתב ב נערך לאחרונה על ידי
          #4

          בדיוק תהיתי איך גורמים לך לחזור לכתוב כאן.. 🙂

          פורסם במקור בפורום CODE613 ב14/05/2017 21:29 (+03:00)

          תגובה 1 תגובה אחרונה
          2
          • M מנותק
            M מנותק
            magicode
            כתב ב נערך לאחרונה על ידי
            #5

            ככה זה שמתכנתים גם ב C# וגם ב JS.
            רק אני יספר לך שאצלי לתכנת ב C# זה מצוקה נוראית. אני מחפש משהו איסינכרוני נורמלי בלי קשיים מיותרים. ואצלי זה גיהנום עלי האדמות לתכנת ב C#.
            יש לי פרוייקט פה בגיטהאב.
            https://github.com/NetFree-Community/netfree-anywhere
            ב C# . שהוא לא עובד תקין בגלל שלא הצלחתי לעשות את זה איסנכוני.

            תראה איזה קטע מטופש זה.
            https://github.com/NetFree-Community/netfree-anywhere/blob/master/nfaService/oVpnConnetion.cs#L196
            נסיון קריאה כל 200MS. וזה לא משהו שאני המצאתי העתקתי את זה מפרוייקט אחר שמישהו כתב בC#.

            פורסם במקור בפורום CODE613 ב15/05/2017 06:57 (+03:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              אני לא סובל בכלל מהאסניכרוניות בJS. התרגלתי וזהו.
              mat, בקשר לC#, פעם הבאה שאל פה בפורום.

              פורסם במקור בפורום CODE613 ב15/05/2017 08:08 (+03:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              4
              • א מנותק
                א מנותק
                ארכיטקט
                כתב ב נערך לאחרונה על ידי
                #7

                דוד אמר שלא הסברתי את עצמי טוב, אז הנה הדוגמא שלי לטעינה עצלה של נתונים שנטענים אך ורק בפעם הראשונה שמישהו מבקש אותם, ועולים לזיכרון, שאותה אני עושה בחן ב C# או כל שפה דומה, נראה מישהו עושה את זה ככה ב JS בלי קאלבק!!!!! אני רוצה להחזיר ערך פרימיטיבי של מחרוזת!.
                class Class1
                {
                private static object LOCK = new object();
                private static string resource;
                /// <summary>
                /// הפעם הראשונה תיקח לכם שתי שניות בגלל הקריאה הראשונה לשרת
                /// לאחר מכן זה נמצא בקאש ותתקבל תשובה מיידית
                /// </summary>
                public string Resource
                {
                get
                {
                //נעילה בפני טרידים נוספים כדי שהאובייקט ייטען אך ורק פעם אחת ולמנוע קריאות מיותרות לשרת המרוחק
                lock (LOCK)
                {
                //בפעם הראשונה צריך לקרוא ל HTTP
                if (resource == null)
                {
                //הדמיה של המתנה לתשובת שרת
                System.Threading.Thread.Sleep(2000);
                //http.....
                resource = "http result....";
                }

                                }
                                return resource;
                            }
                        }
                    }
                

                פורסם במקור בפורום CODE613 ב15/05/2017 15:22 (+03:00)

                אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                תגובה 1 תגובה אחרונה
                0
                • רחמיםר מנותק
                  רחמיםר מנותק
                  רחמים מורחק
                  כתב ב נערך לאחרונה על ידי
                  #8

                  @ארכיטקט

                  דוד אמר שלא הסברתי את עצמי טוב, אז הנה הדוגמא שלי לטעינה עצלה של נתונים שנטענים אך ורק בפעם הראשונה שמישהו מבקש אותם, ועולים לזיכרון, שאותה אני עושה בחן ב C# או כל שפה דומה, נראה מישהו עושה את זה ככה ב JS בלי קאלבק!!!!! אני רוצה להחזיר ערך פרימיטיבי של מחרוזת!.
                  class Class1
                  {
                  private static object LOCK = new object();
                  private static string resource;
                  /// <summary>
                  /// הפעם הראשונה תיקח לכם שתי שניות בגלל הקריאה הראשונה לשרת
                  /// לאחר מכן זה נמצא בקאש ותתקבל תשובה מיידית
                  /// </summary>
                  public string Resource
                  {
                  get
                  {
                  //נעילה בפני טרידים נוספים כדי שהאובייקט ייטען אך ורק פעם אחת ולמנוע קריאות מיותרות לשרת המרוחק
                  lock (LOCK)
                  {
                  //בפעם הראשונה צריך לקרוא ל HTTP
                  if (resource == null)
                  {
                  //הדמיה של המתנה לתשובת שרת
                  System.Threading.Thread.Sleep(2000);
                  //http.....
                  resource = "http result....";
                  }

                                  }
                                  return resource;
                              }
                          }
                      }
                  

                  אתה מחפש איך עושים sleep ב JS? אז הנה:

                  function sleep(seconds) 
                  {
                    var e = new Date().getTime() + (seconds * 1000);
                    while (new Date().getTime() <= e) {}
                  }
                  

                  אגב, יש בעיה בקוד שלך, מה יקרה אם שתי שניות של המתנה לא יספיקו?

                  פורסם במקור בפורום CODE613 ב15/05/2017 16:08 (+03:00)

                  תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #9

                    רחמים, הsleep נועד לדמות פעולה שלוקחת זמן, לא מטרה בפני עצמה...
                    ואגב איך שכתבת sleep בדקת מה זה עושה למעבד ולזיכרון?

                    פורסם במקור בפורום CODE613 ב15/05/2017 16:17 (+03:00)

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    2
                    • רחמיםר מנותק
                      רחמיםר מנותק
                      רחמים מורחק
                      כתב ב נערך לאחרונה על ידי
                      #10

                      @דוד ל.ט.

                      רחמים, הsleep נועד לדמות פעולה שלוקחת זמן, לא מטרה בפני עצמה...
                      ואגב איך שכתבת sleep בדקת מה זה עושה למעבד ולזיכרון?

                      אז לא הבנתי את השאלה, איזה קטע בקוד הוא רוצה לתרגם ל JS? אם את ה lock אז אפשר פשוט לשים דגל בוליאני פשוט.
                      לא בדקתי, אבל אם רוצים בלי קל-בק זה מה יש, ב JS כותבים עם קל-בק, זו השפה אין מה לעשות.

                      פורסם במקור בפורום CODE613 ב15/05/2017 16:30 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • M מנותק
                        M מנותק
                        magicode
                        כתב ב נערך לאחרונה על ידי
                        #11

                        ארכיטקט דווקא בדוגמא שהבאת יש אפשרות לעשות סינכרוני.
                        אם אתה משתמש ישירות במחלקה XMLHttpRequest.
                        https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open

                        שים לב ארגומנט 3 זה async אם הוא false אז זה סינכרוני.
                        אבל זה מטופש לחלוטין.

                        פורסם במקור בפורום CODE613 ב15/05/2017 17:04 (+03:00)

                        תגובה 1 תגובה אחרונה
                        3
                        • dovidD מנותק
                          dovidD מנותק
                          dovid ניהול
                          כתב ב נערך לאחרונה על ידי
                          #12

                          @רחמים

                          @דוד ל.ט.
                          רחמים, הsleep נועד לדמות פעולה שלוקחת זמן, לא מטרה בפני עצמה...

                          ואגב איך שכתבת sleep בדקת מה זה עושה למעבד ולזיכרון?

                          אז לא הבנתי את השאלה, איזה קטע בקוד הוא רוצה לתרגם ל JS? אם את ה lock אז אפשר פשוט לשים דגל בוליאני פשוט.

                          לא את הlook כמו שלא את הget ואת הstatic וכו'.
                          הוא רק שואל אם תוכל לכתוב קוד כל שהוא בעולם שיספק את המטרה של הקוד הזה. למה בלי קלבק? כי הוא כבר כתב בכל האפליקציה מאות פעמים גישה למאפיין Resource ורק עכשיו הוא החליט להפוך את זה לטעינה עצלה והוא רוצה לשנות רק במקום הזה ולא ללכת לשנות בכל מקום.

                          פורסם במקור בפורום CODE613 ב15/05/2017 17:06 (+03:00)

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          תגובה 1 תגובה אחרונה
                          2
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            כתב ב נערך לאחרונה על ידי
                            #13

                            @mat

                            אבל זה מטופש לחלוטין.

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

                            פורסם במקור בפורום CODE613 ב15/05/2017 17:06 (+03:00)

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            0
                            • M מנותק
                              M מנותק
                              magicode
                              כתב ב נערך לאחרונה על ידי
                              #14

                              מטופש לתכנן ככה Resource

                              פיירפוקס מסמן את השימוש בסינכרוני במחלקה הנ"ל כמיושן זה אומר שבעוד כמה שנים הדפדפנים לא יתמכו בזה. כי זה הורס את חווית המשתמש.

                              פורסם במקור בפורום CODE613 ב15/05/2017 17:22 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • dovidD מנותק
                                dovidD מנותק
                                dovid ניהול
                                כתב ב נערך לאחרונה על ידי
                                #15

                                מה תכנון כאן?
                                חוץ מזה תתאר לעצמך שמדובר במקרה שהיה שינוי בתכנון.
                                באיזשהו שלב הפעולה נהפכה ליקרה והוחלט למנוע ממנה לרוץ בכל מקרה. יש לך רעיון איך לעשות את זה?

                                פורסם במקור בפורום CODE613 ב15/05/2017 17:43 (+03:00)

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                תגובה 1 תגובה אחרונה
                                0
                                • avrahamA מנותק
                                  avrahamA מנותק
                                  avraham
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  @דוד ל.ט.

                                  @רחמים
                                  @דוד ל.ט.
                                  רחמים, הsleep נועד לדמות פעולה שלוקחת זמן, לא מטרה בפני עצמה...

                                  ואגב איך שכתבת sleep בדקת מה זה עושה למעבד ולזיכרון?

                                  אז לא הבנתי את השאלה, איזה קטע בקוד הוא רוצה לתרגם ל JS? אם את ה lock אז אפשר פשוט לשים דגל בוליאני פשוט.

                                  לא את הlook כמו שלא את הget ואת הstatic וכו'.
                                  הוא רק שואל אם תוכל לכתוב קוד כל שהוא בעולם שיספק את המטרה של הקוד הזה. למה בלי קלבק? כי הוא כבר כתב בכל האפליקציה מאות פעמים גישה למאפיין Resource ורק עכשיו הוא החליט להפוך את זה לטעינה עצלה והוא רוצה לשנות רק במקום הזה ולא ללכת לשנות בכל מקום.

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

                                  פורסם במקור בפורום CODE613 ב15/05/2017 20:27 (+03:00)

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #17

                                    @avraham

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

                                    השאלה יפה, ואני אכן לא יודע מה היה ומה נהיה, זה רק היתה דוגמה.
                                    נניח שבכל מקרה זה מהשרת, רק שזה הפך להיות מטלה לא שכיחה והיא עולה עלות כל שהיא (למשל כסף כי זה API).
                                    אני מסכים שהמקרה לא מובן מאליו.

                                    פורסם במקור בפורום CODE613 ב15/05/2017 20:38 (+03:00)

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    2
                                    • א מנותק
                                      א מנותק
                                      ארכיטקט
                                      כתב ב נערך לאחרונה על ידי
                                      #18

                                      @דוד ל.ט.

                                      אני מסכים שהמקרה לא מובן מאליו.

                                      זה לא בדיוק לא מובן מאליו, אצלי זה כבר נעשה מעשים דבכל יום, בלי ניהול קאשינג ואופטימיזציות מהסוג הזה, הדטה בייס שלי יקרוס, וגם השרת.

                                      האפליקציה ככל שהיא גודלת זלילת המשאבים שלה עולה אקספוננציאלית (זו אפליקציית ERP כבדה מאוד באנגולר 2), ואם לא ארסן את החגיגה של קריאות לשרת, ולדטה בייס, ולשרת הקבצים של אמזון, ולשרת האימות, חוויית המתשמש תהיה גרועה מאוד עד בלתי אפשרית. כל תוכנה מהסוג הזה חייבת ניהול קש, ועדיף לעשות את זה בכמוסות כמו שהראיתי בקוד C#.
                                      כל גישה למשאב שאינו יושב בזיכרון (ועדיף של הקליינט) או הדורש יציאה מחוץ לעולמה של האפליקציה כגון מסד נתונים או קובץ, צריכה להיות חד פעמית ומינימלית. כשהזיכרון של הלקוח יתפוצץ נדבר, בינתיים זאת הגישה הכי טובה שיש בנמצא. שים לב שצורת העבודה הזאת מאפשרת לטפל באופטימיזציה גם בשלב מאוחר מאוד בפיתוח, אם עושים כמיסה טובה מלכתחילה. אז כשהתחלתי לכתוב אנגולר בצורה מאסיבית, ציפיתי לקצת היגיון מהסוג הזה.

                                      פורסם במקור בפורום CODE613 ב16/05/2017 00:02 (+03:00)

                                      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        כתב ב נערך לאחרונה על ידי
                                        #19

                                        בא נאמר ככה, נגיד שיש פתרון, לא תכעס שאי אפשר להציג חיווי למשתמש בעת ה"תקיעה" הסינכרונית?
                                        ואלא ע"כ תכתוב קלאבק... אני חושב שזה מה שמאט התכוון.
                                        בקיצור בתכנון JS, הכל צריך להיות קאלבקים על גבי קאלבקים.

                                        הפתרון הדבילי שלי להשתמש בalert...

                                        var obj = {
                                          ready: false,
                                          res: null,
                                          get resource() {
                                            if (!ready ) {
                                        		//callback
                                        		http.get(function(data) {
                                        			ready = true;
                                        			res = data;
                                        		});
                                        		while(!ready)
                                        			alert('אנא המתן שניה או שתיים לטעינה שלמה : )');
                                        		
                                        	}
                                            return this.res;
                                          }
                                        }
                                        

                                        פורסם במקור בפורום CODE613 ב16/05/2017 01:07 (+03:00)

                                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • M מנותק
                                          M מנותק
                                          magicode
                                          כתב ב נערך לאחרונה על ידי
                                          #20

                                          דוד אני לא התכוונתי לזה יש בבקשות http פרמטר שעושה את זה סינכרוני וכתבתי את זה למעלה.

                                          בכל מקרה אכן תיכנון של זה אמור להיות שהכל בנוי לאינסנכורני. מי שלא מסוגל להיכנס לראש הזה אין לו מה לחפש בתיכנות באינטרנט.

                                          ואין לזה שום קשר לקאש.
                                          אפשר לבנות פונקציה אינסכונית שתחזיר גם קאש.
                                          לדוגמא.

                                          var cache = false;
                                          function getData(arg,callback){
                                              if(cache) return callback(null,cache);
                                              http.get('/url',function(err,data){
                                                  if(err) return callback(err);
                                                  callback(err,(cache = data));
                                              });
                                          }
                                          

                                          פורסם במקור בפורום CODE613 ב16/05/2017 07:01 (+03:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום