بستن سطوح تالیف کامپایلر

کامپایلر Closure به شما امکان می دهد از بین سه سطح کامپایل انتخاب کنید، از حذف ساده فضای خالی و کامنت ها تا تبدیل کدهای تهاجمی.

WHITESPACE_ONLY

سطح کامپایل WHITESPACE_ONLY نظرات را از کد شما حذف می کند و همچنین خطوط شکسته، فاصله های غیر ضروری، علائم نقطه گذاری اضافی (مانند پرانتز و نیم ویرگول) و سایر فضاهای سفید را حذف می کند. جاوا اسکریپت خروجی از نظر عملکردی با جاوا اسکریپت منبع یکسان است.

اگر حالت زبان خروجی درخواستی با حالت زبان ورودی متفاوت باشد، انتقال ویژگی‌های زبان همچنان اتفاق می‌افتد. --language_in و --language_out در Flags and Options ببینید.

این سطح کامپایل کمترین فشرده سازی را در بین سه سطح فراهم می کند.

SIMPLE_OPTIMIZATIONS

سطح کامپایل SIMPLE_OPTIMIZATIONS همان فضای خالی و حذف نظر را مانند WHITESPACE_ONLY انجام می دهد، اما بهینه سازی هایی را در عبارات و توابع انجام می دهد، از جمله تغییر نام متغیرهای محلی و پارامترهای تابع به نام های کوتاه تر. تغییر نام متغیرها به نام های کوتاه تر، کد را به میزان قابل توجهی کوچکتر می کند. از آنجایی که سطح SIMPLE_OPTIMIZATIONS فقط نمادهایی را که محلی برای توابع هستند تغییر نام می دهد، در تعامل بین جاوا اسکریپت کامپایل شده و جاوا اسکریپت دیگر تداخلی ایجاد نمی کند.

کامپایل با SIMPLE_OPTIMIZATIONS همیشه عملکرد جاوا اسکریپت معتبر از نظر نحوی را حفظ می کند، مشروط بر اینکه کد با استفاده از نام رشته ها به متغیرهای محلی دسترسی نداشته باشد (مثلاً با استفاده از دستورات eval() یا با فراخوانی toString روی توابع).

SIMPLE_OPTIMIZATIONS سطح کامپایل پیش فرض است.

ADVANCED_OPTIMIZATIONS

سطح تلفیقی ADVANCED_OPTIMIZATIONS همان تبدیل‌های SIMPLE_OPTIMIZATIONS را انجام می‌دهد، اما انواع تبدیل‌های جهانی تهاجمی‌تر را برای دستیابی به بالاترین فشرده‌سازی هر سه سطح اضافه می‌کند. سطح ADVANCED_OPTIMIZATIONS جاوا اسکریپت را بسیار فراتر از آنچه با ابزارهای دیگر ممکن است فشرده می کند.

برای فعال کردن این فشرده سازی شدید، ADVANCED_OPTIMIZATIONS مفروضات قوی در مورد کد کامپایل شده ایجاد می کند. اگر کد شما با این مفروضات مطابقت نداشته باشد، ADVANCED_OPTIMIZATIONS کدی تولید می کند که اجرا نمی شود.

برای مثال، کد کامپایل شده با ADVANCED_OPTIMIZATIONS ممکن است با کدهای کامپایل نشده کار نکند، مگر اینکه اقدامات خاصی برای اطمینان از قابلیت همکاری انجام دهید. اگر توابع و خصوصیات خارجی اشاره شده در کد خود را علامت گذاری نکنید، Closure Compiler به طور نامناسبی نام مراجع را در کد شما تغییر می دهد و باعث عدم تطابق بین نام های موجود در کد شما و کد خارجی می شود.

برای کسب اطلاعات بیشتر در مورد نحوه آماده کردن کد خود برای ADVANCED_OPTIMIZATIONS ، کامپایل پیشرفته و Externs را بخوانید.

تبدیل‌های ADVANCED_OPTIMIZATIONS عبارتند از:

  • تغییر نام تهاجمی تر:

    کامپایل با SIMPLE_OPTIMIZATIONS فقط پارامترها و متغیرهای داخل توابع را تغییر نام می دهد. ADVANCED_OPTIMIZATIONS همچنین متغیرهای سراسری، نام توابع و خصوصیات را تغییر نام می دهد.

  • حذف کد مرده:

    کامپایل با ADVANCED_OPTIMIZATIONS کدهایی را حذف می کند که به طور قابل اثبات غیرقابل دسترسی است. این به ویژه در ترکیب با کتابخانه های بزرگ مفید است. اگر فقط از چند تابع از یک فایل کتابخانه بزرگ استفاده می کنید، کامپایلر می تواند همه چیز را به جز آن توابع را از خروجی خود حذف کند.

  • خط کشی جهانی:

    کامپایل با ADVANCED_OPTIMIZATIONS برخی از فراخوانی های تابع را با بدنه تابع جایگزین می کند. این تبدیل به "inlining" معروف است. کامپایلر فقط زمانی توابع را درون خطی می کند که تشخیص دهد که درون خطی ایمن است و در فضا صرفه جویی می کند. کامپایل با ADVANCED_OPTIMIZATIONS همچنین زمانی که کامپایلر تشخیص می‌دهد که می‌تواند این کار را با خیال راحت انجام دهد، ثابت‌ها و برخی متغیرها را درون خود قرار می‌دهد.

نحوه تنظیم سطح کامپایل

UI سرویس Closure Compiler، سرویس API و برنامه کاربردی همه روش‌های مختلفی برای تنظیم compilation_level دارند.

در رابط کاربری Closure Compiler Service

برای تنظیم سطح کامپایل در رابط کاربری سرویس کامپایلر بسته، روی دکمه‌های رادیویی در بخش Optimization رابط کلیک کنید.

اسکرین شات رابط کاربری

در Closure Compiler Service API

برای تنظیم سطح کامپایل در API سرویس کامپایلر بسته، یک پارامتر درخواستی به نام compilation_level با مقدار WHITESPACE_ONLY ، SIMPLE_OPTIMIZATIONS ، یا ADVANCED_OPTIMIZATIONS ، مانند برنامه پایتون زیر اضافه کنید:

#!/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()

در اپلیکیشن Closure Compiler

برای تنظیم سطح کامپایل در برنامه Closure Compiler، پرچم خط فرمان --compilation_level را با مقدار WHITESPACE_ONLY ، SIMPLE یا ADVANCED مانند دستور زیر وارد کنید:

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js