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

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

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

מהירות העבודה של גוגל סקריפט

מתוזמן נעוץ נעול הועבר תוכנה
23 פוסטים 5 כותבים 424 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב לשמחה זו הסיסמא ב נערך לאחרונה על ידי
    #4

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

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

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

    ש תגובה 1 תגובה אחרונה
    3
    • ש מנותק
      ש מנותק
      שמחה זו הסיסמא
      השיב לdovid ב נערך לאחרונה על ידי שמחה זו הסיסמא
      #5

      @dovid
      הבנתי את השאלה שלך, אבל מדובר במגוון של דברים, ואני מחפש אפשרות אולי בתשלום שתמהר את הפעולה שלו, ולא לשכלל את הקוד שלי.
      על אף שאני אבדוק גם את מה שאתה אומר

      מישהוא אמר לי שאולי עם google cloud זה אפשרי רק שאני לא יודע איך מתעסקים עם זה

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

        @dovid אני כתבתי את הקוד המדובר 🙂
        ולעניות דעתי אין בו קריאות מיותרות
        יש קריאה אחת בהתחלה לקבל את כל הנתונים כמערך דו מימדי (ככה הם קוראים לזה), זה נצרך בגלל שהקוד מחפש שורה שעומדת בתנאים מסוימים
        ובסיום יש קריאה נוספת לעדכון
        האמת שבמקור עשיתי בבת אחת עדכון לכל השורה (כלומר getRange לכל השורה ואז setValues), כאשר היכן שאין מה לעדכן (לא נשלח ערך חדש עבור התא) מכניס את התוכן המקורי (שהתקבל בקריאה הראשונה),
        ועכשיו שיניתי כך שיעדכן רק היכן שיש צורך, כך שזה במקום קריאה אחת לעדכון של כל השורה, יש בין 1 ל7 (תלוי בכמות התאים שמתעדכנים) קריאות קטנות כדי לעדכן כל תא, אבל מבדיקה שלי זה לא גורם לאיטיות, נראה שבאמת לוקח לסקריפט זמן לפעול
        למעשה זה החלקים היחידים שמתקשרים עם השיטס:

        const sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName(sheetName);
        const table = sheet.getDataRange().getValues();
        

        בהתחלה, כאשר לא מדובר בגליון גדול
        ואז לוגיקה די פשוטה של JS, ובסוף

        for (const [i, call] of row.entries()) {
            if (call !== 'original-value') {
                sheet.getRange(rowIndex + 2, i + 1, 1, 1).setValue([call]);
            }
        }
        

        או:

        sheet.deleteRow(rowIndex + 2);
        

        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
        טיפים

        dovidD Y.Excel.AccessY 2 תגובות תגובה אחרונה
        1
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          השיב לצדיק תמים ב נערך לאחרונה על ידי
          #7

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

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

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

          צדיק תמיםצ תגובה 1 תגובה אחרונה
          0
          • Y.Excel.AccessY מנותק
            Y.Excel.AccessY מנותק
            Y.Excel.Access
            השיב לצדיק תמים ב נערך לאחרונה על ידי Y.Excel.Access
            #8

            @צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:

            למעשה זה החלקים היחידים שמתקשרים עם השיטס:

            const sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheetByName(sheetName);
            const table = sheet.getDataRange().getValues();
            

            בהתחלה, כאשר לא מדובר בגליון גדול
            ואז לוגיקה די פשוטה של JS, ובסוף

            for (const [i, call] of row.entries()) {
                if (call !== 'original-value') {
                    sheet.getRange(rowIndex + 2, i + 1, 1, 1).setValue([call]);
                }
            }
            

            או:

            sheet.deleteRow(rowIndex + 2);
            

            לכאורה העניין הוא בשימוש ב for עם setValue ולא ב setValues אחד. כי הדבר הכבד כאן הוא הקריאה שוב ושוב לקובץ מקובץ הקוד החיצוני.
            הרחבה - (איך להזין מערך ל SHEETS בקריאה אחת) - https://stackoverflow.com/questions/11495588/write-an-array-of-values-to-a-range-of-cells-in-a-spreadsheet

            Y.Excel.Access @ gmail.com

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

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

              const secret = 'tgy4rugh84'
              function doPost(req) {
                if (req.parameter.secret !== secret) {
                  return ContentService.createTextOutput(
                    JSON.stringify({
                      error: 'Unauthorized',
                    })
                  ).setMimeType(ContentService.MimeType.JSON);
                }
                return ContentService.createTextOutput(
                  JSON.stringify({
                    message: 'OK',
                  })
                ).setMimeType(ContentService.MimeType.JSON);
              }
              

              לוקח לו להחזיר תשובה בין 0.9 ל1.5 שניות

              Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
              טיפים

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • צדיק תמיםצ מנותק
                צדיק תמיםצ מנותק
                צדיק תמים
                השיב לY.Excel.Access ב נערך לאחרונה על ידי צדיק תמים
                #10

                @Y-Excel-Access @צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:

                האמת שבמקור עשיתי בבת אחת עדכון לכל השורה (כלומר getRange לכל השורה ואז setValues), כאשר היכן שאין מה לעדכן (לא נשלח ערך חדש עבור התא) מכניס את התוכן המקורי (שהתקבל בקריאה הראשונה),
                ועכשיו שיניתי כך שיעדכן רק היכן שיש צורך, כך שזה במקום קריאה אחת לעדכון של כל השורה, בין 1 ל7 (תלוי בכמות התאים שמתעדכנים) קריאות קטנות כדי לעדכן כל תא, אבל מבדיקה שלי זה לא גורם לאיטיות,

                כלומר שאני מכיר את הצורה הנ"ל, ובמקרה הזה היא לא מתאימה (כיוון שישנם תאים עם נוסחאות, והgetDataRange().getValues() מקבל אותם כטקסט מקובע וממילא גם הsetValues בסוף מחזיר אותם כטקסט, ודורס את הנוסחה).
                בכל מקרה כמו שכתבתי, אני לא חושב שעדכון של כל תא בשורה המסוימת בנפרד, במקום עדכון בבת אחת של כל ה1-7 תאים, הוא זה שגורם לאיטיות. הסקריפט אמור להתמודד בקלות עם כזה דבר. ראה גם מה שכתבתי בתגובה מעל 👆

                Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                טיפים

                תגובה 1 תגובה אחרונה
                0
                • OdedDvirO מנותק
                  OdedDvirO מנותק
                  OdedDvir
                  השיב לצדיק תמים ב נערך לאחרונה על ידי
                  #11

                  @צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:

                  אפילו קוד פשוט כזה לוקח לו להחזיר תשובה בין 0.9 ל1.5 שניות

                  האם אתה מתכוון גם באופן שהגליון ריק לגמרי מנתונים ונוסחאות?

                  צדיק תמיםצ תגובה 1 תגובה אחרונה
                  2
                  • צדיק תמיםצ מנותק
                    צדיק תמיםצ מנותק
                    צדיק תמים
                    השיב לOdedDvir ב נערך לאחרונה על ידי צדיק תמים
                    #12

                    @OdedDvir
                    0.9 - 1.5 שניות זה בלי שום גליון... בדיקה פשוטה של תנאי לוגי, והחזרת תשובה. תסתכל בקטע קוד שהבאתי.

                    Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                    טיפים

                    OdedDvirO Y.Excel.AccessY 2 תגובות תגובה אחרונה
                    0
                    • OdedDvirO מנותק
                      OdedDvirO מנותק
                      OdedDvir
                      השיב לצדיק תמים ב נערך לאחרונה על ידי OdedDvir
                      #13

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

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

                        @OdedDvir זה פרוייקט app script, הוא חי לעצמו ללא כל חוברת עבודה/גיליון.

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

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

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

                          אולי להשתמש ב CacheService כדי לשפר את התגובות הבאות? זה לא בדיוק פותר את שורש הבעיה...

                          צדיק תמיםצ תגובה 1 תגובה אחרונה
                          1
                          • צדיק תמיםצ מנותק
                            צדיק תמיםצ מנותק
                            צדיק תמים
                            השיב לOdedDvir ב נערך לאחרונה על ידי צדיק תמים
                            #16

                            @OdedDvir לא רלוונטי במקרה הזה, הפעולה צריכה להיות על הנתונים בזמן אמת, כמו כן לאיטיות המובנית שהדגמתי כאן עם קוד פשוט של request => response בלי שום קבלת נתונים מרוחקים, זה לא יעזור.
                            אבל זה כלי שימושי לפעמים, תודה שהכרת לי אותו 🙂
                            עריכה - השתמשתי בו עכשיו למשהו שחסך לי הרבה קומבינות בדרכים שהכרתי... תודה!

                            רק חבל שזה מוגבל לאלף רשומות... 😐

                            Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                            טיפים

                            תגובה 1 תגובה אחרונה
                            1
                            • Y.Excel.AccessY מנותק
                              Y.Excel.AccessY מנותק
                              Y.Excel.Access
                              השיב לצדיק תמים ב נערך לאחרונה על ידי
                              #17

                              @צדיק-תמים אמר במהירות העבודה של גוגל סקריפט:

                              @OdedDvir
                              0.9 - 1.5 שניות זה בלי שום גליון... בדיקה פשוטה של תנאי לוגי, והחזרת תשובה. תסתכל בקטע קוד שהבאתי.

                              כל פעולה של APP SCRIPT המתקשרת עם SHEETS לוקחת כזה זמן, לא משנה כמה היא פשוטה. ואפילו מאקרו פשוט של 'כתוב ב A1 "אא" ' יקח לו כזה זמן.

                              -מה שאומר - לא יודע אם יש לזה פתרון אפשרי.

                              Y.Excel.Access @ gmail.com

                              dovidD ש 2 תגובות תגובה אחרונה
                              0
                              • dovidD מנותק
                                dovidD מנותק
                                dovid ניהול
                                השיב לY.Excel.Access ב נערך לאחרונה על ידי
                                #18

                                @Y-Excel-Access לא קראת מה שכתבו, אין בכלל התקשרות לsheet.

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

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

                                תגובה 1 תגובה אחרונה
                                3
                                • ש מנותק
                                  ש מנותק
                                  שמחה זו הסיסמא
                                  השיב לY.Excel.Access ב נערך לאחרונה על ידי שמחה זו הסיסמא
                                  #19

                                  @Y-Excel-Access
                                  מה שאומר שאין לזה אולי פתרון אפשרי בכתיבת הקוד, אבל כן יתכן ויש לזה פיתרון אפשרי עם תשלום ל google שיקצו עבור זה יותר משאבים כדי שיקח פחות זמן
                                  זו הייתה השאלה מתחילה ואולי מן הראוי להתמקד בדרך הזו אם יש מישהו שיכול לעזור

                                  ושוב... תודה רבה מאוד לכל מי שמנסה לעזור 😳

                                  dovidD תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    השיב לשמחה זו הסיסמא ב נערך לאחרונה על ידי
                                    #20

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

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

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

                                    ש תגובה 1 תגובה אחרונה
                                    0
                                    • ש מנותק
                                      ש מנותק
                                      שמחה זו הסיסמא
                                      השיב לdovid ב נערך לאחרונה על ידי
                                      #21

                                      @dovid
                                      מה הכוונה פונקציית ענן ?

                                      dovidD תגובה 1 תגובה אחרונה
                                      0
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        השיב לשמחה זו הסיסמא ב נערך לאחרונה על ידי
                                        #22

                                        @שמחה-זו-הסיסמא זה כמו לשאול על רגל אחת מה זה app script.
                                        צריך לפתוח נושא על איך ואיפה וכמה עולה לכתוב פונקציית ענן שעושה XYZ (אני לא יודע מה הapp script של עושה).

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

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

                                        ש תגובה 1 תגובה אחרונה
                                        1
                                        • ש מנותק
                                          ש מנותק
                                          שמחה זו הסיסמא
                                          השיב לdovid ב נערך לאחרונה על ידי שמחה זו הסיסמא
                                          #23

                                          @dovid אני רק רציתי להבין מה פירוש המילים שלך
                                          פונקציית ענן זה פלטפורמה מקבילה לapp script ? או שזה פונקציה לכתוב בapp script או משהו אחר ?

                                          בעיקרון המעלה הגדולה של app script היא האימות של גוגל שנעשית בצורה כמעט אוטומטית
                                          משא"כ במקומות אחרים שזה מאוד מסובך לעשות אימות עם גוגל

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

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

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

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