ক্লোজার কম্পাইলার কম্পাইলেশন লেভেল

ক্লোজার কম্পাইলার আপনাকে কম্পাইলেশনের তিনটি স্তর থেকে বেছে নিতে দেয়, সাদা স্থান সরানো এবং মন্তব্য থেকে আক্রমণাত্মক কোড রূপান্তর পর্যন্ত।

WHITESPACE_ONLY

WHITESPACE_ONLY সংকলন স্তর আপনার কোড থেকে মন্তব্যগুলি সরিয়ে দেয় এবং লাইন বিরতি, অপ্রয়োজনীয় স্থান, বহিরাগত বিরাম চিহ্ন (যেমন বন্ধনী এবং সেমিকোলন) এবং অন্যান্য হোয়াইটস্পেসও সরিয়ে দেয়। জাভাস্ক্রিপ্টের আউটপুটটি কার্যকরীভাবে উৎস জাভাস্ক্রিপ্টের অনুরূপ।

অনুরোধকৃত আউটপুট ভাষা মোড ইনপুট ভাষা মোড থেকে ভিন্ন হলে ভাষার বৈশিষ্ট্যগুলির স্থানান্তর এখনও ঘটবে। পতাকা এবং বিকল্পগুলিতে --language_in এবং --language_out দেখুন।

এই সংকলন স্তর তিনটি স্তরের মধ্যে সর্বনিম্ন সংকোচন প্রদান করে।

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 এর সাথে সংকলিত কোড আনকম্পাইল করা কোডের সাথে কাজ নাও করতে পারে যদি না আপনি ইন্টারঅপারেবিলিটি নিশ্চিত করতে বিশেষ পদক্ষেপ না নেন। আপনি যদি আপনার কোডে উল্লেখ করা বাহ্যিক ফাংশন এবং বৈশিষ্ট্যগুলিকে ফ্ল্যাগ না করেন, তাহলে ক্লোজার কম্পাইলার আপনার কোডের রেফারেন্সগুলিকে অনুপযুক্তভাবে পুনঃনামকরণ করবে, যার ফলে আপনার কোড এবং বাহ্যিক কোডের নামের মধ্যে মিল নেই৷

কিভাবে ADVANCED_OPTIMIZATIONS এর জন্য আপনার কোড প্রস্তুত করবেন সে সম্পর্কে আরও জানতে, Advanced Compilation এবং Externs পড়ুন

ADVANCED_OPTIMIZATIONS রূপান্তরগুলির মধ্যে রয়েছে:

  • আরও আক্রমণাত্মক নামকরণ:

    SIMPLE_OPTIMIZATIONS দিয়ে সংকলন শুধুমাত্র ফাংশনের মধ্যে প্যারামিটার এবং ভেরিয়েবলের নাম পরিবর্তন করে। ADVANCED_OPTIMIZATIONS এছাড়াও গ্লোবাল ভেরিয়েবল, ফাংশনের নাম এবং বৈশিষ্ট্যের নাম পরিবর্তন করে।

  • মৃত কোড অপসারণ:

    ADVANCED_OPTIMIZATIONS এর সাথে সংকলন কোডটি সরিয়ে দেয় যা সম্ভবত পৌঁছানো যায় না। এটি বড় লাইব্রেরির সংমিশ্রণে বিশেষভাবে কার্যকর। আপনি যদি একটি বড় লাইব্রেরি ফাইল থেকে শুধুমাত্র কয়েকটি ফাংশন ব্যবহার করেন, তাহলে কম্পাইলার তার আউটপুট থেকে সেই ফাংশনগুলি ছাড়া সবকিছু মুছে ফেলতে পারে।

  • গ্লোবাল ইনলাইনিং:

    ADVANCED_OPTIMIZATIONS এর সাথে সংকলন কিছু ফাংশন কলকে ফাংশনের বডি দিয়ে প্রতিস্থাপন করে। এই রূপান্তরটি "ইনলাইনিং" হিসাবে পরিচিত। কম্পাইলার শুধুমাত্র ইনলাইন ফাংশন করে যখন এটি নির্ধারণ করে যে ইনলাইনিং নিরাপদ এবং স্থান সংরক্ষণ করে। ADVANCED_OPTIMIZATIONS এর সাথে সংকলন এছাড়াও ইনলাইন ধ্রুবক এবং কিছু ভেরিয়েবল যখন কম্পাইলার নির্ধারণ করে যে এটি নিরাপদে করতে পারে।

কম্পাইলেশন লেভেল কিভাবে সেট করবেন

ক্লোজার কম্পাইলার পরিষেবা UI, পরিষেবা API, এবং অ্যাপ্লিকেশন সকলেরই compilation_level সেট করার জন্য বিভিন্ন পদ্ধতি রয়েছে।

ক্লোজার কম্পাইলার সার্ভিস UI এ

ক্লোজার কম্পাইলার পরিষেবা UI-তে সংকলন স্তর সেট করতে, ইন্টারফেসের অপ্টিমাইজেশন বিভাগে রেডিও বোতামগুলিতে ক্লিক করুন।

UI স্ক্রিনশট

ক্লোজার কম্পাইলার সার্ভিস এপিআই-এ

ক্লোজার কম্পাইলার সার্ভিস API-এ কম্পাইলেশন লেভেল সেট করতে, নিম্নোক্ত পাইথন প্রোগ্রামের মতো WHITESPACE_ONLY , SIMPLE_OPTIMIZATIONS বা ADVANCED_OPTIMIZATIONS এর মান সহ compilation_level নামের একটি অনুরোধ প্যারামিটার অন্তর্ভুক্ত করুন:

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

ক্লোজার কম্পাইলার অ্যাপ্লিকেশনে

ক্লোজার কম্পাইলার অ্যাপ্লিকেশনে কম্পাইলেশন লেভেল সেট করতে, নিম্নোক্ত কমান্ডের মতো WHITESPACE_ONLY , SIMPLE বা ADVANCED এর মান সহ কমান্ড লাইন পতাকা --compilation_level অন্তর্ভুক্ত করুন:

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