שאלות נפוצות


מהו Closure Compiler? למה כדאי להשתמש בה?
‫Closure Compiler הוא כלי להורדה ולהרצה מהירות יותר של JavaScript. אפשר להשתמש ב-Closure Compiler כדי להקטין את הגודל של קובצי JavaScript ולשפר את היעילות שלהם.
מה ההבדל בין Closure Compiler לבין כלי דחיסה אחרים של JavaScript?

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

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

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

האם אפשר להשתמש ב-Closure Compiler כדי לקמפל JavaScript שמוטמע ב-HTML?
לא. Closure Compiler פועל רק על קבצים שמכילים רק JavaScript.
האם אפשר להשתמש ב-Closure Compiler יחד עם כלי אחרים לצמצום קוד JavaScript?

כן. הכלי Closure Compiler קורא כל JavaScript תקין ומפיק JavaScript תקין, כך שאפשר להשתמש בו בקובץ JavaScript לפני או אחרי שמריצים את הקובץ באמצעות כלי אחר לצמצום קבצים.

חשוב לזכור ש-Closure Compiler וכלי מיניפיקציה אחרים עשויים להגדיר ציפיות לגבי הקוד הנכנס. לדוגמה, כלי לצמצום קוד שמסיר הערות עלול להסיר רישיונות או מידע על הערות שנדרשים לכלי אחר.

איך אפשר לנפות באגים ב-JavaScript שנוצר על ידי Closure Compiler?
אם הקוד שעבר קומפילציה מחזיר שגיאות או מתנהג בצורה לא צפויה, אפשר להשתמש במיפוי קוד המקור כדי לנפות באגים בבעיה. מפת מקור מספקת מיפוי בין הקוד שעבר קומפילציה לבין קוד המקור המקורי, כך שהכלים למפתחים בדפדפן יכולים להציג את קוד המקור המקורי במקום הקוד שעבר קומפילציה. כדי ש-Closure Compiler ייצור מפת מקור, מעבירים את האפשרות --create_source_map בשורת הפקודה. לדוגמה:
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
לאחר מכן, אם אתם משתמשים בדפדפן שתומך במיפוי קוד המקור (כמו Chrome או Firefox), אתם יכולים להגדיר נקודות עצירה בדיוק כמו שהייתם עושים בקוד שלא עבר קומפילציה, והכלים למפתחים בדפדפן יציגו את שורת הקוד התואמת במקור המקורי. מידע נוסף על הכלים למפתחים ב-Chrome, כולל מידע על מפות מקור, זמין במאמר ניפוי באגים ב-JavaScript.
האם הקומפיילר מבצע איזשהו איזון בין מהירות ההרצה של האפליקציה לבין גודל הקוד להורדה?
כן. כל קומפיילר שמבצע אופטימיזציה עושה פשרות. חלק מהאופטימיזציות של הגודל גורמות לעלייה קלה בעומס על המהירות. עם זאת, המפתחים של Closure Compiler הקפידו לא להוסיף זמן ריצה משמעותי. חלק מהאופטימיזציות של הקומפיילר אפילו מקטינות את זמן הריצה (ראו שאלה הבאה).
האם הקומפיילר מבצע אופטימיזציה למהירות?
ברוב המקרים, קוד קטן יותר הוא קוד מהיר יותר, כי זמן ההורדה הוא בדרך כלל הגורם הכי חשוב שמשפיע על המהירות באפליקציות אינטרנט. אופטימיזציות שמפחיתות את הכפילויות ומאיצות את זמן הריצה של הקוד.
האם יש הגבלות על גודל הקבצים שאפשר לקמפל?
לשירות האינטרנט של הקומפילציה יש גודל קובץ מקסימלי, אבל לאפליקציית הקומפיילר העצמאית אין.
האם Closure Compiler זמין לכל הפלטפורמות?
הקומפיילר כתוב ב-Java, כך שהוא יכול לפעול בכל מקום שבו Java פועלת.
האם הקומפיילר יכול לעבד כל JavaScript חוקי?
ברוב המקרים. חלק ממבני JavaScript, כולל eval() ו-with(), עלולים לבטל הנחות שהטרנספורמציות של הקומפיילר מבוססות עליהן.
כמה ידע בפיתוח אתרים צריך כדי להשתמש ב-Closure Compiler?
‫Closure Compiler הוא כלי לפיתוח JavaScript, לכן צריך לדעת לתכנת ב-JavaScript כדי להשתמש בקומפיילר. אבל כל מי שמשתמש ב-JavaScript יכול להפיק תועלת משימוש ב-Closure Compiler.
איך Closure Compiler עובד עם Closure Library?
הכלי Closure Compiler מספק בדיקות מיוחדות ואופטימיזציות לקוד שמשתמש בספריית Closure. בנוסף, שירות Closure Compiler יכול לכלול באופן אוטומטי קבצים של Closure Library. בקטע Finding Your Way around Closure מוסבר על התחביר להצהרה על החלקים של Closure שאתם צריכים. בהפניה ל-API מוסבר איך משתמשים בספריית Closure עם ה-API. כדי להשתמש ב-Closure Library עם אפליקציית Closure Compiler, צריך קודם להוריד את Closure Library. התמיכה בספריית Closure מופעלת באפליקציית הקומפיילר כברירת מחדל.
הקוד שלי מפסיק לפעול או שהקומפיילר מפיק שגיאות כשאני מבצע קומפילציה באמצעות ADVANCED_OPTIMIZATIONS. למה?
בדרך כלל, כדי להשתמש במצב מתקדם צריך לבצע הכנות ולשנות את הקוד. במאמר Advanced Compilation and Externs מוסבר איך לוודא שהקוד פועל עם ADVANCED_OPTIMIZATIONS.
למה יש הזנות שורות אקראיות בסקריפטים שעברו קומפילציה?
המהדר של Closure מוסיף בכוונה מעברי שורה כל 500 תווים בערך. חומות אש ושרתי proxy לפעמים משחיתים או מתעלמים מקובצי JavaScript גדולים עם שורות ארוכות מאוד. כדי למנוע את הבעיה הזו, צריך להוסיף מעברי שורה כל 500 תווים. הסרת מעברי השורה לא משפיעה על הסמנטיקה של הסקריפט. ההשפעה על גודל הקוד קטנה, והקומפיילר מבצע אופטימיזציה של מיקום מעברי השורה כך שההשפעה על גודל הקוד תהיה קטנה עוד יותר כשמבצעים gzip לקבצים.
יש לי הודעות בנושא זכויות יוצרים או טקסט של רישיון קוד פתוח שחייבים להופיע בקוד המקור שלי. איך אפשר למנוע מ-Closure Compiler להסיר את הטקסט הזה?
‫Closure Compiler תומך בתג @license של JSDoc. מוסיפים את התג @license לכל תגובת JSDoc כדי לשמור את התגובה בפלט של הקומפיילר. מידע נוסף זמין במאמר הוספת הערות ל-JavaScript עבור Closure Compiler.