מהדר סגירה מאפשר לך לבחור בין שלוש רמות של הידור, החל מהסרה פשוטה של רווחים והערות ועד טרנספורמציות בקוד אגרסיבי.
רווח לבן בלבד
רמת האיסוף של WHITESPACE_ONLY
מסירה תגובות
מהקוד שלך ומסירה גם מעברי שורה, רווחים מיותרים,
סימני פיסוק מיותרים (למשל: סוגריים ונקודה-פסיק) ורווחים מיותרים אחרים. ה-JavaScript של הפלט זהה לזה של ה-JavaScript של המקור.
תרגום של תכונות שפה עדיין יתבצע אם מצב
שפת הפלט המבוקש שונה מהמצב של שפת הקלט.
פרטים נוספים זמינים ב--language_in
וב--language_out
בקטע סימונים ואפשרויות.
רמת הידור זו מספקת את הדחיסה הנמוכה ביותר של שלוש הרמות.
פשוט
רמת האוסף SIMPLE_OPTIMIZATIONS
מבצעת
מרחב לבן והסרת תגובות
זהים לאלה של WHITESPACE_ONLY
, אבל היא מבצעת גם אופטימיזציות
בביטויים ובפונקציות, כולל שינוי שמות של
משתנים מקומיים ופרמטרים של פונקציות לשמות קצרים יותר. שינוי
שמות לשמות קצרים מפחית את הקוד
באופן משמעותי. מכיוון שהרמה SIMPLE_OPTIMIZATIONS
משנה רק שמות של סמלים מקומיים לפונקציות, היא לא מפריעה לאינטראקציה בין ה-JavaScript המקומר לבין JavaScript אחר.
השילוב עם SIMPLE_OPTIMIZATIONS
שומר תמיד על הפונקציונליות של JavaScript חוקי מבחינה תחבירית, בתנאי שהקוד לא ניגש למשתנים מקומיים באמצעות שמות מחרוזות (לדוגמה, על ידי שימוש בביטויים eval()
או על ידי קריאה ל-string בפונקציות).
SIMPLE_OPTIMIZATIONS
היא רמת האוסף המוגדרת כברירת מחדל.
הגדרות מתקדמות
רמת האיסוף של ADVANCED_OPTIMIZATIONS
מבצעת
את אותן טרנספורמציות כמו SIMPLE_OPTIMIZATIONS
, אבל
מוסיפה עוד מגוון טרנספורמציות גלובליות אגרסיביות יותר כדי להשיג
את הדחיסה הגבוהה ביותר בכל שלוש
הרמות. רמת ADVANCED_OPTIMIZATIONS
מכווצת JavaScript
מעבר למה שניתן באמצעות כלים אחרים.
כדי להפעיל את הדחיסה
הקיצונית הזו, ADVANCED_OPTIMIZATIONS
מתבססת על הנחות משמעותיות בנוגע לקוד שהורכב. אם הקוד שלך לא עומד בהנחות האלה, ADVANCED_OPTIMIZATIONS
יפיק קוד שלא יפעל.
לדוגמה, יכול להיות שקוד שהורכב
עם ADVANCED_OPTIMIZATIONS
לא יפעל עם קוד שלא עבר קומפילציה, אלא אם ינקטו פעולות מיוחדות כדי לוודא
יכולת פעולה הדדית. אם לא תסמנו פונקציות חיצוניות
ונכסים חיצוניים שמופיעים בקוד, מהדר סגירה
ישנה באופן בלתי הולם את השם של ההפניות בקוד, מה שיגרום לחוסר התאמה
בין השמות בקוד לבין הקוד החיצוני.
רוצה לדעת איך להכין את הקוד
ל-ADVANCED_OPTIMIZATIONS
?
אפשר לקרוא מידע נוסף על הידור ותוספות.
הטרנספורמציות של ADVANCED_OPTIMIZATIONS
כוללות:
- שינוי שמות אגרסיבי יותר:
בהידור עם
SIMPLE_OPTIMIZATIONS
משנים רק את הפרמטרים והמשתנים של הפונקציות.ADVANCED_OPTIMIZATIONS
גם משנה את השם של משתנים גלובליים, שמות פונקציות ומאפיינים. - הסרת קוד מת:
האיסוף באמצעות
ADVANCED_OPTIMIZATIONS
מסיר קוד שלא ניתן לגשת אליו. זה שימושי במיוחד בשילוב עם ספריות גדולות. אם תשתמשו רק בכמה פונקציות מקובץ ספרייה גדול, המהדר יוכל להסיר את הכול מלבד הפונקציות האלה מהפלט שלו. - הטמעה גלובלית:
האיסוף באמצעות
ADVANCED_OPTIMIZATIONS
מחליף חלק מהקריאות לפונקציות לגוף הפונקציה. הטרנספורמציה הזו נקראת "הטבעת". המהדר פועל רק כאשר הוא קובע שהטבעה בטוחה וחוסכת מקום. בנוסף, ההידור עםADVANCED_OPTIMIZATIONS
מוצב בקבועים מסוימים ומשתנים מסוימים, כאשר המהדר קובע שהוא יכול לעשות זאת בצורה בטוחה.
איך להגדיר את רמת האוסף
לממשק המשתמש של הכלי לעריכת חסימות, ל-API של השירות ולאפליקציה
יש שיטות שונות להגדרת
compilation_level
.
בממשק המשתמש של הכלי 'סגירת הכלי לסגירה'
כדי להגדיר את רמת ההידור בממשק המשתמש של שירות 'סגירת אוסף', יש ללחוץ על לחצני הבחירה בקטע אופטימיזציה בממשק.
ב-Clsure Compiler Service API
כדי להגדיר את רמת האיסוף ב-Clsure Compiler Service API, צריך לכלול פרמטר בקשה בשם compilation_level
עם הערך WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
או ADVANCED_OPTIMIZATIONS
, כמו בתוכנת python הבאה:
#!/usr/bin/python2.4 import httplib, urllib, sys params = urllib.urlencode([ ('code_url', sys.argv[1]), ('compilation_level', 'ADVANCED_OPTIMIZATIONS'), ('output_format', 'text'), ('output_info', 'compiled_code'), ]) headers = { "Content-type": "application/x-www-form-urlencoded" } conn = httplib.HTTPSConnection('closure-compiler.appspot.com') conn.request('POST', '/compile', params, headers) response = conn.getresponse() data = response.read() print data conn.close()
באפליקציה 'מהדר סגירה'
כדי להגדיר את רמת ההידור באפליקציה 'מהדר סגירה', יש לכלול את הדגל של שורת הפקודה --compilation_level
עם הערך WHITESPACE_ONLY
, SIMPLE
או ADVANCED
, כמו בפקודה הבאה:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js