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

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

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

JS הערות על שיקולים בלולאת for

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 4 כותבים 335 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    השיב לdovid ב נערך לאחרונה על ידי
    #1

    @dovid אמר בריצה בלופ מהאחרון לראשון בJS:

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

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

    yossizY dovidD 2 תגובות תגובה אחרונה
    3
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לOdedDvir ב נערך לאחרונה על ידי yossiz
      #2

      @OdedDvir אני לא חושב שגודל המערך משפיע על הביצועים של הגישה לאורך. זה נשמר בשדה ולא מחושב כל פעם.

      עריכה: עכשיו הבנתי שאתה מתכוון שבמערך גדול יש המון איטרציות

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        6
        • dovidD מחובר
          dovidD מחובר
          dovid ניהול
          השיב לOdedDvir ב נערך לאחרונה על ידי dovid
          #4

          @OdedDvir בהמשך למה ש@yossiz כתב,
          שים לב ש@צדיק-תמים הציע (ובצדק בהתחשב בנסיבות) להפוך את המערך, וגם ליצור עותק אם רוצים לשמור על הסדר במקורי... מדובר בהכבדה של אלפי אחוזים על המעבד והזיכרון, אלפי אלפי אבל בלתי מורגש ולא ראוי לייחס במקרים קלאסיים.
          זה מאוד רווח ושכיח בJS, כשהגעתי לJS (עם ניסיון C#) יצאתי מדעתי על כל כזה דבר.
          כיום אני חושב שבמידה מסויימת זה בריא, כי הגיוני להתעלם מזה. מתכנת חייב לסגל לעצמו גם את האפשרות להתמקד במטרה ולא בפרטי הביצוע (ניהול ברזולוציה נמוכה..). אני שילמתי יקר על השיעורים האלה, אבל עד היום לא למדתי לקח לגמרי, כי אידאולוגית אני חייב להישאר במחנה השפוי שאוהב את הקוד ולא משתמש בו כמו בדפיקה על מכונת פחיות תקולה.
          בעיית ביצועים שאני מציע להתייחס ולהיזהר ממנה גם בסקאלות חסרות משמעות, היא בעיה חבויה שלא ברורה מאליה. פה למשל כאשר הקוד יהפוך לאיטי וירצו לשפר אותו, הבעיה תקפוץ לעין מייד - כתוב במפורש את בזבוז הביצועים.
          עוד הערה, בC# גישה לאורך מערך נחשבת גישה למשתנה. במילה "מעריכים" שכתבת על length נשמע שזה פעולת חישוב, ולזכורני יש בזה אמת בJS (למרות שזה לא פונקציה) אבל בתכלס כמו שאמר @yossiz המנועים של javascript כיום מוחקים את ההבדל הזה לגמרי כנראה https://jsben.ch/4WrFK.

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

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

          OdedDvirO תגובה 1 תגובה אחרונה
          7
          • OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            השיב לdovid ב נערך לאחרונה על ידי OdedDvir
            #5

            @dovid אמר בריצה בלופ מהאחרון לראשון בJS:

            במילה "מעריכים" שכתבת על length נשמע שזה פעולת חישוב, ולזכורני יש בזה אמת בJS (למרות שזה לא פונקציה).

            אני לא מבין מה בדיוק קורה מתחת למכסה המנוע של JS, שיערתי שזה מיושם כ- ReadOnly Property ב-C# שניגשים עליו באמצעות get() כך שאמורה להיות כאן איזו שהיא overhead.

            אבל בתכלס כמו שאמר @yossiz המנועים של javascript כיום מוחקים את ההבדל הזה לגמרי כנראה https://jsben.ch/4WrFK.

            לא זו בלבד, אלא שהקוד הראשון אפילו יותר מהיר?!
            f7f1639b-7ed6-4ca0-aa70-3ab3d6f576c8-תמונה.png
            9ca2c2b7-b43b-4c31-b5f3-7941e10b818a-תמונה.png

            440e173b-30a9-4828-83ff-761841d939a4-תמונה.png
            😲

            שמא מנוע-הריצה מבצע אפליה מתקנת, ומבצע אופטימציה דווקא על קוד גרוע?

            אפר שריפהא תגובה 1 תגובה אחרונה
            3
            • אפר שריפהא מנותק
              אפר שריפהא מנותק
              אפר שריפה
              השיב לOdedDvir ב נערך לאחרונה על ידי
              #6

              @OdedDvir אמר בריצה בלופ מהאחרון לראשון בJS:

              @dovid אמר בריצה בלופ מהאחרון לראשון בJS:

              במילה "מעריכים" שכתבת על length נשמע שזה פעולת חישוב, ולזכורני יש בזה אמת בJS (למרות שזה לא פונקציה).

              אני לא מבין מה בדיוק קורה מתחת למכסה המנוע של JS, שיערתי שזה מיושם כ- ReadOnly Property ב-C# שניגשים עליו באמצעות get() כך שאמורה להיות כאן איזו שהיא overhead.

              אבל בתכלס כמו שאמר @yossiz המנועים של javascript כיום מוחקים את ההבדל הזה לגמרי כנראה https://jsben.ch/4WrFK.

              לא זו בלבד, אלא שהקוד הראשון אפילו יותר מהיר?!
              f7f1639b-7ed6-4ca0-aa70-3ab3d6f576c8-תמונה.png
              9ca2c2b7-b43b-4c31-b5f3-7941e10b818a-תמונה.png

              440e173b-30a9-4828-83ff-761841d939a4-תמונה.png
              😲

              שמא מנוע-הריצה מבצע אפליה מתקנת, ומבצע אופטימציה דווקא על קוד גרוע?

              יתכן שהמערך מחשב מחדש רק בכתיבה למערך

              OdedDvirO תגובה 1 תגובה אחרונה
              1
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לאפר שריפה ב נערך לאחרונה על ידי
                #7

                @אפר-שריפה אמר בריצה בלופ מהאחרון לראשון בJS:

                יתכן שהמערך מחשב מחדש רק בכתיבה למערך

                אם כוונתך לומר שהערך של length() מחושב מחדש רק בכתיבה למערך (או בשליפה של פריט) - זה נכון, וכבר @dovid ו- @yossiz ציינו זאת. זה עדיין לא מסביר את התופעה לעיל.

                אפר שריפהא תגובה 1 תגובה אחרונה
                3
                • אפר שריפהא מנותק
                  אפר שריפהא מנותק
                  אפר שריפה
                  השיב לOdedDvir ב נערך לאחרונה על ידי
                  #8

                  @OdedDvir יש לך עוד השמה

                  OdedDvirO תגובה 1 תגובה אחרונה
                  2
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    השיב לאפר שריפה ב נערך לאחרונה על ידי
                    #9

                    @אפר-שריפה לרגע שמחתי, אבל למרבה הפלא גם כשהעברתי את ההשמה להצהרות, למרות שהיה שיפור, עדיין הקוד הראשון מהיר יותר:
                    03fee8c9-c06a-478a-8ee8-f8ebf650b0b7-תמונה.png

                    dovidD תגובה 1 תגובה אחרונה
                    2
                    • dovidD מחובר
                      dovidD מחובר
                      dovid ניהול
                      השיב לOdedDvir ב נערך לאחרונה על ידי
                      #10

                      @OdedDvir אוייש, המודד הזה (ואולי כל מודד בJS בדפדפן) לא מספיק איכותי בשביל לדון על כל שבריר אחוז... ניסיתי עבורך והפכתי את הסדר, המגמה השתנתה. כפי שצפיתי.
                      כבר @צדקי תמים שאל על מקרה דומה פה
                      מהירות הרצת קוד ב-JS [כרום], או "למה המהירות לא קבועה?"

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

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

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

                        אפרופו ביצועים, לפני כמה ימים בגלל בדיקה של נושא כל שהוא בJS (הפיכת כל האותיות הראשונות לרישיות) הגעתי לstackoverflow לנושא בו הציעו כמה רעיונות ותמיד יש את הספורטיבי שנסחף למבחן ביצועים.
                        התעניינתי בביצועים ושיחקתי במבחן והבחנתי בפרטים קטנים שמשנים הרבה יותר ממה שאנו דנים כעת.
                        למשל, סוגריים ברג'קס. כידוע סוגריים ברג'קס משיגים שני תוצאות: א. קיבוץ ובידוד חלקים ב. חילוץ חלקים בתוצאה לקבוצה בפני עצמה.
                        יש צורה לכתוב סוגריים שלא מחלצים קבוצה החוצה, non-capturing group. עושים זאת ע"י ?: בתחילת הסוגריים. זה זול משמעותית מקיבוץ רגיל. אגב למי שעושה אפליקציית נוד, זה יכול להיות משמעותי עד כדי חסיכת מתקפת DoS (כמו כל שיפור של אחוזים בגבולות יכולת השרת לשניה). באקספרס הרבה פעמים הניתוב עשוי מרג'קס.

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

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

                        תגובה 1 תגובה אחרונה
                        5
                        • dovidD dovid העביר נושא זה מ-תכנות ב-

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

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

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