שאלות נפוצות


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

בדרך כלל, כלי ההידור של Closure אמור לעמוד בדרישות הדחיסה של כלי צמצום קוד אחרים או לעלות עליהן, ולשפר את זמני ההורדה של אפליקציית האינטרנט שלכם. בנוסף, הכלי 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 Library עם ה-API. כדי להשתמש בספריית Closure עם אפליקציית Closure Compiler, צריך קודם להוריד את ספריית Closure. התמיכה בספריית Closure מופעלת באפליקציית הקומפיילר כברירת מחדל.
הקוד שלי מפסיק לפעול או שהקומפיילר מפיק שגיאות כשאני מבצע קומפילציה באמצעות ADVANCED_OPTIMIZATIONS. למה?
בדרך כלל, כדי להשתמש במצב מתקדם צריך לבצע הכנות ולשנות את הקוד. במאמר Advanced Compilation and Externs מוסבר איך לוודא שהקוד פועל עם ADVANCED_OPTIMIZATIONS.
למה יש הזנות שורות אקראיות בסקריפטים שעברו קומפילציה?
ה-Closure Compiler מוסיף בכוונה מעברי שורה כל 500 תווים בערך. חומות אש ושרתי proxy לפעמים משחיתים או מתעלמים מקובצי JavaScript גדולים עם שורות ארוכות מאוד. כדי למנוע את הבעיה הזו, מוסיפים מעברי שורה כל 500 תווים. ההשפעה על גודל הקוד קטנה, והקומפיילר מבצע אופטימיזציה של מיקום מעברי השורה כך שההשפעה על גודל הקוד תהיה קטנה עוד יותר כשמבצעים gzip לקבצים. מידע נוסף זמין בבעיה מספר 4106.
יש לי הודעות בנושא זכויות יוצרים או טקסט של רישיון קוד פתוח שחייב להופיע בקוד המקור שלי. How do I keep the Closure Compiler from stripping this text out?
‫Closure Compiler תומך בתג @license של JSDoc. מוסיפים את התג @license לכל תגובת JSDoc כדי לשמור את התגובה בפלט של הקומפיילר. מידע נוסף זמין במאמר בנושא הוספת הערות ל-JavaScript עבור Closure Compiler.