کامپایلر 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