רמות הידור של חסימות

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

רווח לבן בלבד

רמת האיסוף של 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